MariaDB를 사용하다 보면 쓰기작업으로 인해 DeadLock이 발생할 경우가 있다.
Deadlock found when trying to get lock; try restarting transaction
1. DeadLock 분석 쿼리
# 현재 LOCK이 걸려 대기중인 정보
SELECT * FROM information_schema.INNODB_LOCK_WAITS;
# LOCK을 건 정보
SELECT * FROM information_schema.INNODB_LOCKS;
# LOCK을 걸고 있는 프로세스 정보
SELECT * FROM information_schema.INNODB_TRX;
# InnoDB 상태
SHOW ENGINE INNODB STATUS;
2. DeadLock 해결 팁
- 테이블 접근 순서 정하기
- 트랜잭션 내에서 특정 테이블에 대하여 한번만 접근
- Insert를 묶기
- 다수의 데이터를 Update or Delete 하지 않기
- start transaction 후 꼭 commit, rollback을 해서 누수 발생하지 않도록 하기