MySQL) “The total number of locks exceeds the lock table size”

ACAI BERRY DEVELOVER·2023년 3월 9일
0

데이터를 많이 넣어 테스트할 게 있어서 무지성으로 재귀복사를 했더니 어느순간 1개의 쿼리를 돌리는 데 무한로딩...

그러다가 ERROR1206을 만나버림.

이번 재귀복사 건은 일시적인 거라 앞으로 이런 일은 없을 거 같아서 버퍼풀사이즈는 건드리지 않는다. 하지만 앞으로 insert, delete, update와 같은 쿼리를 실행할 때 또 무한로딩이 되어버리면 손 보기로 한다.

간혹 MySQL에서 대량 작업중에 아래와 같은 에러를 만나게 되는 경우가 있다.

ERROR 1206 (HY000) The total number of locks exceeds the lock table size

문제의 원인은 버퍼풀 사이즈 !!

주로 MyISAM 기준으로 셋팅이 되어서 버퍼풀 사이즈를 매우 작게 할당해 놓거나, 혹은 실수로 innodb_buffer_pool_size 파라미터를 지정하지 않아서 버퍼풀이 기본 설정인 8MB로 올라온 경우가 있는데, 이때 InnoDB에 대량의 데이터를 집어넣고 대량 작업을 하게 되면, Row 별로 설정되는 Lock 정보를 버퍼풀에 저장하지 못하기 때문에 십중팔구 위의 에러를 만나게 된다.

위의 에러를 만난 상황에서는 버퍼풀 사이즈를 늘려서 DB를 재가동 하는 수 밖에 없지만,
DB 재가동이 어려운 경우에는 대량 작업을 피하고, 임시로 작은 단위로 작업을 나누어서 처리하는 방법도 고려할 수 있다.

(예)

DELETE FROM sample WHERE ID <= 100000;

->

아래 쿼리를 데이터가 모두 처리될 때까지 반복 수행
DELETE FROM sample WHERE ID <= 100000 LIMIT 10000;

reference : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=seuis398&logNo=70112975589
https://greypencil.tistory.com/143

profile
쓸때 대충 쓰지 말고! 공부하면서 써!

0개의 댓글