-
[MySQL] MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction데이터베이스/MySQL 2022. 1. 23. 18:22
개발 서버 DB에서 특정 데이터를 삭제하려고 했는데 timeout이 발생하는 이슈가 생겼다. 처음에는 단순히 내가 사용하고 있는 DB툴 문제 인가 생각했는데 아니었고, lock 걸린건가 확인해봤는데 이것 역시 아니었다.
# 모든 프로세스 조회 SHOW FULL PROCESSLIST; # 락테이블 조회 select * from information_schema.innodb_locks; # 대기중인 락 조회 select * from information_schema.innodb_lock_waits; # 트랜젝션조회 select * FROM information_schema.INNODB_TRX;
INNODB_TRX 테이블에서 현재 실행되고 있는 트랜잭션들을 찾았고, PROCESSLIST 테이블에서 각 trx_mysql_thread_id(스레드 id)의 상세 정보를 확인할 수 있다.
SELECT * FROM information_schema.PROCESSLIST WHERE id IN ([trx_mysql_thread_id1], ...);
배치 작업도 없었고 별다른 db작업이 없는 상태였기 때문에 스레드를 모두 종료시켰다.
KILL [trx_mysql_thread_id1]; KILL [trx_mysql_thread_id2]; KILL [trx_mysql_thread_id3];
왜 트랜잭션들이 실행되고 있었는지 확인은 못했으나 추측하기로는 이전에 내가 트랜잭션 걸었던게 commit이나 rollback되지 않고 계속 유지되고 있었던게 아닐까 한다. 나는 분명 트랜잭션 선언 후에 종료까지 했다고 생각했는데 그게 아니었나보다...
이번 이슈로 약간의 시간을 까먹긴 했지만 transaction 걸 때 다시 한 번 확인하는 습관을 가지자는 교훈 & 다음에 비슷한 문제가 발생했을 때 어떤 것들을 확인해야되는지 알았다는 것으로 위안을 삼아야겠다.
'데이터베이스 > MySQL' 카테고리의 다른 글
[MySQL] Table Lock (feat. Deadlock 💀) (0) 2022.04.18 [MySQL] 테이블의 auto increment number 가져오기 (0) 2022.03.28 [MySQL] GROUP_CONCAT length 제한 (0) 2022.03.04 [MySQL] SQL Error Explicit or implicit commit is not allowed in stored function or trigger (0) 2022.01.31 [MySQL] SUBSTRING_INDEX + REPLACE로 UPDATE 하려고 했다 (0) 2021.10.24