14.2.10 교착 상태 감지 및 롤백
InnoDB
는 자동으로 트랜잭션 교착 상태 가 검출 된 교착 상태를 해제하기 위해 트랜잭션 (여러 적용될 수 있음)가 롤백됩니다. InnoDB
는 작은 트랜잭션을 선택하고 롤백하려고 시도합니다. 트랜잭션의 크기는 삽입, 업데이트 또는 삭제 된 행 수에 따라 결정됩니다.
InnoDB
는 innodb_table_locks = 1
(기본값)하고 autocommit = 0
의 경우 테이블 잠금을 인식하고 그것보다 상위의 MySQL 레이어는 행 레벨 락을 식별합니다. 그렇지 않으면, InnoDB
는 MySQL LOCK TABLES
문으로 구성된 테이블 잠금 또는 InnoDB
이외의 스토리지 엔진으로 설정된 락이 관련있는 교착 상태를 감지 할 수 없습니다. 이러한 상황을 해결하려면 innodb_lock_wait_timeout
시스템 변수의 값을 설정합니다.
InnoDB
트랜잭션의 전체 롤백이 실행되면 트랜잭션에서 설정된 모든 잠금이 해제됩니다. 그러나 오류의 결과로 단일 SQL 문만 롤백되면 문에 설정된 일부 잠금이 유지 될 수 있습니다. 이것이 발생하는 원인은 InnoDB
는 어느 행이 어느 문으로 설정되었는지를 나중에 확인 할 수없는 형태로 행 잠금이 포함되기 때문입니다.
트랜잭션에서 SELECT
가 스토어드 함수를 호출하고 함수의 문에 실패한 경우, 그 문이 롤백됩니다. 또한 그 후에 ROLLBACK
이 실행되면 전체 트랜잭션이 롤백됩니다.
교착 상태를 방지하기 위해 데이터베이스 작업을 구성하는 방법은 섹션 14.2.11 "교착 상태의 해결 방법" 을 참조하십시오.