DBAtlas · 데이터베이스 운영 아틀라스

1206: The total number of locks exceeds the lock table size (전체 락 수가 락 테이블 크기 초과)

MySQL

의미

InnoDB가 보유한 락에 할당된 메모리(buffer pool 안의 락 구조)를 소진했다. 단일 트랜잭션이 너무 많은 행/gap 락을 누적할 때 발생하며 트랜잭션은 롤백된다.

원인

매우 큰 단일 트랜잭션: 수백만 행을 한 번에 UPDATE/DELETE, 인덱스 없는 WHERE 절로 테이블 전체 락, 워크로드에 비해 너무 작은 innodb_buffer_pool_size가 원인이다. 대규모 배치 작업이 전형적인 트리거다.

해결 방법

큰 DML을 작은 배치로 나눈다(예: 루프에서 LIMIT으로 한 번에 10,000행씩 삭제/갱신하고 배치마다 COMMIT). WHERE 컬럼에 인덱스를 만들어 락이 걸리는 행 수를 줄인다. 영구 조치로 innodb_buffer_pool_size를 늘린다(락 구조가 여기서 할당된다). 불필요하게 긴 트랜잭션을 피한다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목