데드락
홈 화면 > 프로젝트 선택 > 분석 > 데드락
데드락(Dead Lock)은 둘 이상의 트랜잭션이 각각 상대방이 잠근 리소스(테이블 또는 행)를 기다리며 서로 진행하지 못하는 상태입니다. 빈번한 데드락은 최종 사용자에게 불편함을 주고 서비스 품질을 저하시킵니다.
-
데드락이 발생한 시점과 관련 정보를 조회할 수 있습니다.
-
에이전트가
SHOW ENGINE INNODB STATUS명령어를 주기적으로 실행하여 데드락 정보를 수집합니다. -
수집한 정보가 이전과 중복되면 별도로 저장하지 않습니다.
이 명령어의 특성상 가장 최근에 발생한 데드락 정보만 확인할 수 있습니다. 수집 주기 사이에 여러 건의 데드락이 발생하더라도 마지막 한 건만 수집됩니다.
사전 설정
데드락을 사용하려면 Agent 설정이 필요합니다.
Agent 설정
별도 설정 없이 1시간 간격으로 데드락 정보를 수집합니다. 수집 주기를 변경하려면 whatap.conf에 다음 설정을 추가합니다.
deadlock_interval=60
| 설정 항목 | 타입 | 기본값 | 설명 |
|---|---|---|---|
deadlock_interval | Int | 60 | 데드락 정보를 수집하는 간격(분)을 설정합니다. 설정한 주기 동안 발생한 데드락 중 가장 마지막에 발생한 하나의 데드락 정보만 수집합니다. |
SHOW ENGINE INNODB STATUS 명령어는 시스템 부하가 거의 없으므로, 데드락이 빈번한 환경에서는 수집 간격을 줄여 모니터링하는 것을 권장합니다. 수집 간격이 길면 그 사이에 발생한 데드락이 유실될 수 있습니다.
데드락 분석하기
사용자는 특정 시간, 인스턴스를 선택하여 데드락 이벤트를 조회할 수 있습니다.
기본 옵션
상단 필터 영역에서 조회 기간, 대상 인스턴스를 설정할 수 있습니다.
- 시간: 조회할 시간 범위를 선택합니다. 최대 3주까지 선택할 수 있습니다.
- 인스턴스: 조회 대상 DB 인스턴스를 선택합니다.
데드락 목록
설정한 조건으로 검색하면, 데이터베이스에서 발생한 데드락 정보를 테이블 형태로 제공합니다.
알람 설정
데드락 발생에 대한 알람을 설정할 수 있습니다. 단, 데드락 정보는 deadlock_interval 주기마다 확인되므로, 알람은 실시간으로 발생하지 않고 해당 주기에 확인된 데드락에 대해 발생합니다.
데이터 해석 가이드
주요 확인 포인트
- 데드락 발생 빈도: 짧은 기간에 반복적으로 발생하면 → 트랜잭션 설계 또는 인덱스 구조 점검 필요
- 관련 테이블/행: 동일한 테이블에서 반복 발생하면 → 해당 테이블의 접근 패턴과 락 범위 확인
- 관련 트랜잭션: 어떤 SQL이 충돌하는지 확인 → 트랜잭션 순서 조정, 락 범위 축소 검토
- 발생 시간대: 특정 시간대에 집중되면 → 배치 작업, 트래픽 증가 등 외부 요인 확인
실전 활용 시나리오
시나리오 1. 데드락 발생 이력 조회
-
시간 필터에서 확인하려는 기간 설정
-
인스턴스를 선택한 뒤 검색
-
데드락 목록에서 발생 시점과 관련 정보 확인