14.14.2.2 INNODB_LOCKS과 INNODB_LOCK_WAITS 데이터
트랜잭션이 테이블의 행을 갱신하거나 SELECT FOR UPDATE
로 잠그는 경우 InnoDB
는 해당 행에 대한 잠금 목록 또는 큐를 설정합니다. 마찬가지로 테이블 수준 잠금의 경우 InnoDB
는 테이블에 대한 잠금 목록을 유지합니다. 두 번째 트랜잭션이 호환되지 않는 모드에있는 이전 트랜잭션에 의해 이미 잠겨있는 행의 갱신 또는 테이블 잠금을하려고하면 InnoDB
는 행에 대한 잠금 요청을 해당 큐에 추가합니다 . 트랜잭션에 의해 획득되는 락의 경우 해당 행 또는 테이블 잠금 큐에 이전에 입력 된 호환되지 않는 잠금 요청을 제거하는 (이러한 잠금을 보유 또는 요청중인 트랜잭션이 커밋 또는 롤백 할) 필요가 있습니다.
트랜잭션은 다른 행 또는 테이블에 대한 임의의 숫자 잠금 요청을 유지할 수 있습니다. 트랜잭션마다 다른 트랜잭션에 의해 유지되는 잠금을 요청할 수 있지만 그 잠금은 그 다른 트랜잭션에 의해 차단됩니다. 요청하는 트랜잭션은 차단하는 잠금을 트랜잭션이 커밋 또는 롤백 될 때까지 대기해야합니다. 잠금 대기 않은 트랜잭션은 'RUNNING'
상태에 있습니다. 잠금을 대기하고있는 트랜잭션은 'LOCK WAIT'
상태에 있습니다.
INNODB_LOCKS
테이블은 'LOCK WAIT'
트랜잭션마다 그 진행을 방해하는 모든 잠금 요청을 나타내는 하나 이상의 행을 보유하고 있습니다. 이 테이블에는 또한 특정 행 또는 테이블에 보류되어있는 잠금 큐 내의 모든 잠금을 묘사 한 한 줄도 포함되어 있습니다. INNODB_LOCK_WAITS
테이블은 다른 트랜잭션에 의해 요청 된 잠금을 트랜잭션에 의해 이미 보유하고있는 모든 잠금을 차단하고 있는지를 보여줍니다.