요약
Summary
SHOW ENGINE INNODB STATUSset GLOBAL innodb_print_all_deadlocks = ON
1. 환경
- mariadb 10.8.3
2. 이슈
데드락이 발생했을 때 mariadb 내부에 기록되는 데드락 로그를 파악하는 방법이 필요했다.
3. 해결
방법 1. SHOW ENGINE INNODB STATUS 쿼리
SHOW ENGINE INNODB STATUS 쿼리 결과 중 ‘LATEST DETECTED DEADLOCK’ 데이터를 확인하면 가장 최근에 발생한 데드락 정보를 확인할 수 있다. 이 쿼리는 마지막 1개의 데드락 로그만 표시하기 때문에, 연쇄적으로 데드락이 발생한 경우에는 전체 이력을 확인하기 어렵다는 문제가 있다.
방법 2. my.cnf 설정 추가
아래 설정을 추가한 뒤 mariadb를 재기동하면, 이후에 발생하는 모든 deadlock 로그를 mysql_error.log 파일에서 확인할 수 있다.
[mysqld]
# 모든 데드락 로그를 저장
innodb_print_all_deadlocks = 1