MySQL 공식 문서 중 14.15.2.2 InnoDB Lock and Lock-Wait Information 을 번역한 것입니다. 영어가 익숙하지 않아 의미가 잘 전달되지 않는 부분이 있을 수 있습니다. 틀렸거나 잘못 번역된 부분이 있다면 피드백 부탁드리겠습니다.
트랜잭션이 하나의 행을 수정하거나 SELECT … FOR UPDATE 로 잠금을 획득할 때, InnoDB는 행에 대한 잠금 목록이나 큐를 생성한다. 유사하게, InnoDB 는 테이블-레벨 잠금들을 위한 잠금 목록을 유지한다. 만약 두 번째 트랜잭션이 행을 UPDATE 하거나 이미 선행 트랜잭션에 의해서 호환되지 않는 모드로 테이블을 잠그길 원하면, InnoDB 는 잠금 요청을 해당 큐에 추가한다. 트랜잭션에 의해서 얻어진 잠금을 위해서 우선적으로 잠금 큐에 들어간, 호환되지 않는 모든 잠금 요청은 커밋되거나 롤백되어 큐에서 제거 되어야 한다.
트랜잭션은 다른 행이나 테이블을 위해서 여러 개의 잠금 요청을 가질 수 있다. 트랜잭션은 다른 트랜잭션이 이미 잠금을 획득한 잠금을 언제든 요청할 수 있다. 이런 경우에는 다른 트랜잭션에 의해서 블록당한다. 잠금을 요청한 트랜잭션은 다른 트랜잭션이 커밋하거나 롤백할 때까지 기다려야만 한다. 만약 트랜잭션이 잠금을 위해서 대기하지 않는 경우에는 RUNNING
상태 에 있다. 만약 트랜잭션이 잠금을 기다리면, LOCK WAIT
상태에 있다고 말한다.
INNODB_LOCKS
테이블은 LOCK WAIT
상태에 있는 행들에 대한 정보를 가지고 있다. 이 테이블은 각 잠금 큐에 있는 각 잠금을 설명하는 행도 하나 가지고 있다. INNODB_LOCK_WAITS
테이블은 트랜잭션이 이미 가지고 있는 잠금 중에 어떤 잠금이 다른 트랜잭션에 의해 요청된 잠금들을 블로킹하고 있는지 보여준다.
Comments