락 트리 & 데드락
하루 동안 발생한 Lock의 추이를 분석할 수 있습니다. Lock을 발생시킨 세션(Lock Holder)과 Lock을 대기하고 있는 세션(Lock Waitier)에 대해 트리 구조로 확인할 수 있습니다. 이러한 기능을 통해 특정 시점 발생한 락 정보 Holder와 Waiter 관계를 확인해 쿼리(Query)를 분석하고 교착 상태(Dead Lock)의 쿼리를 확인할 수 있습니다.
락 트리
홈 화면 > 프로젝트 선택 > 분석 > 락 트리
하루 동안의 락 발생 여부와 시간을 시계열 차트/락 트리로 제공합니다. 락이 최초 발생한 지점부터 holder와 waiter의 구조를 트리 형태로 표현하여 제공합니다. 락 트리를 시간의 흐름으로 확인할 수 있습니다.
- 시간별 락 트렌드 시각화: 1-Min Lock Trends와 Lock Wait Sessions 기능을 통해 락 발생 데이터를 시간 단위로 분석할 수 있습니다.
기본 사용 안내
Lock Wait Sessions
Lock Wait Sessions는 락 대기 세션의 정보를 분석할 수 있는 기능입니다. 조회 기간에 따라 락 대기 세션 데이터를 3시간 이상 조회 시 5분 간격으로, 3시간 미만 조회 시 5초 간격으로 제공합니다. 또한 차트를 드래그하여 시간 범위를 유동적으로 조정할 수 있습니다.
1-Min Lock Trends
Lock Wait Sessions에서 특정 시간대를 클릭하면, 해당 시간 기준으로 15분 전부터 15분 후까지의 총 30분 동안의 락 발생 현황을 시각화하여 표시합니다. 이를 통해 30분 단위로 락 발생 트렌드를 효과적으로 분석할 수 있습니다.
Total Locks는 해당 시간대에 발생한 락의 총 개수를 의미합니다.
시간 조회
Lock Wait Sessions에서 클릭한 시간에 발생한 최대 락 개수를 기준으로 1-Min Lock Trends와 Lock Tree 테이블의 시간이 설정됩니다. 이를 통해 락이 가장 많이 발생한 구간을 찾을 수 있습니다.
Lock Wait Sessions는 그대로 두고 1-Min Lock Trends 차트에서 다른 시간대의 바를 클릭한 경우, 해당 분의 최대 락 개수를 가진 초로 Lock Tree 테이블에 시간 범위가 동기화됩니다. 이를 통해 시간대를 변경할 때 Lock Tree 테이블에서 반영된 정보를 확인할 수 있습니다.
-
3시간 이상 조회 시 (5분 단위 데이터 사용)
조회 시점부터 5분 구간에서 바의 색상이 진하게 표시됩니다.
07:15:00
시점을 클릭한 경우,07:15:00~07:20:00
구간 바 차트 색이 진하게 표시됩니다. -
3시간 미만 조회 시 (5초 단위 데이터 사용)
짧은 시간 간격에서 발생한 락 상황을 분석할 때 유용합니다.
- Active session
- Lock tree
- Process information
항목 | 설명 |
---|---|
user | SQL 수행 계정 |
host | 이 스레드가 연결된 hostname |
db | default database명, 없다면 NULL |
command | 수행 중인 명령어 type(Query/Sleep/Daemon 등) |
time | 현재 COMMAND의 수행 시간(초) |
state | 스레드의 현재상태 (executing/updating/sending data 등) |
query | 실행되고 있는 statement, Processlist.info 에서 리터럴 값을 분리한 SQL을 보여줍니다. |
query_param | query 에서 분리한 리터럴 값 |
type | Thread 타입. FOREGROUND/BACKGROUND 등 |
connection_type | Connection을 맺는데 사용하는 protocol. TCP/IP, SSL/TLS |
항목 | 설명 |
---|---|
Instance | 인스턴스(에이전트) 이름 |
id | 세션 ID |
holder_type | 락이 어떤 대상에 걸려 있는지를 나타냄 - RECORD: 테이블의 레코드(행) 수준의 락 - TABLE: 전체 테이블에 대한 락 |
holder_mode | 홀더 세션의 락 모드 - S (Shared): 공유락. 다른 트랜잭션도 읽기는 가능 - X (Exclusive): 배타락. 다른 트랜잭션은 접근 불가 |
waiter_type | 락이 어떤 대상에 걸려 있는지를 나타냄 holder_type 설명 참조 |
waiter_mode | 락을 대기 중인 세션의 락 모드 holder_mode 설명 참조 |
table | 락을 대기중인 테이블 |
index | 락을 대기 중인 인덱스 |
다음 항목은 XOS 에이전트를 설치한 경우 수집되는 지표입니다.
항목 | 설명 | 단위 |
---|---|---|
pid | 프로세스 ID | - |
cpuusage | 프로세스가 사용하는 CPU 사용률 | % |
cputime | 프로세스가 지금까지 사용한 누적 CPU 시간 | 초 |
elapse | 프로세스가 실행된 이후 경과 시간 | 초 |
vsize | Virtual memory size. 전체 가상 메모리 사용량 (RAM + Swap + 예약) | KB |
rss | Resident Set Size. 현재 프로세스가 차지한 실제 물리 메모리 크기 | KB |
pss | Proportional Set Size. 공유 메모리 포함한 실제 물리 메모리 사용량 | KB |
state | 프로세스의 현재 상태 코드 (예: R, S, D, T, Z 등) | - |
ioread | 누적된 읽기 바이트 수 (read_bytes ) | 바이트 (B) |
iowrite | 누적된 쓰기 바이트 수 (write_bytes ) | 바이트 (B) |
uid | 해당 프로세스를 실행한 사용자 ID | - |
cmd | 실행된 명령어의 짧은 형태 | - |
longcmd | 실행된 명령어 전체 (전체 경로 및 인자 포함) | - |
데드락
홈 화면 > 프로젝트 선택 > 분석 > 데드락
데드락(Dead Lock)은 둘 이상의 프로세스 또는 트랜잭션이 각각 다른 트랜잭션에 필요한 데이터베이스 리소스(테이블 또는 행)를 잠궈서 서로가 진행하지 못하도록 차단할 때 발생합니다. 빈번하게 발생하는 데드락은 최종 사용자에게 불편함을 주고 서비스의 품질을 저하시킵니다. 데드락 메뉴에서는 데드락이 발생한 시점과 이와 관련한 정보를 조회할 수 있습니다. 이 정보는 애플리케이션 설계에서 문제를 식별하고 해결하는데 도움이 될 수 있습니다.
데이터베이스에서 발생한 데드락에 대한 정보를 확인할 수 있습니다.
-
시간에서 조회하고 싶은 시간을 설정하세요.
-
인스턴스에서 조회하려는 인스턴스 이름을 선택하세요.
-
버튼을 선택하세요.
조회한 데드락 정보를 테이블 형태로 제공합니다.
- 조회 시간은 최대 3주까지 선택할 수 있습니다.
수집 방식
에이전트는 일정 주기마다 SHOW ENGINE INNODB STATUS 명령어를 실행하여 데드락 정보를 수집합니다. 이 명령어의 특성상, 가장 최근에 발생한 데드락 정보만 확인할 수 있습니다. 수집한 정보가 이전과 중복되는 경우에는 별도로 저장하지 않습니다.
수집 주기
기본적으로 1시간마다 정보를 수집하며, 다음 에이전트 옵션을 통해 주기를 조정할 수 있습니다.
- deadlock_interval (Int)
기본값:60
(단위: 분)
데드락 정보를 수집하는 간격을 설정합니다. 설정한 주기 동안 발생한 데드락 중 가장 마지막에 발생한 하나의 데드락 정보만 수집합니다.
데이터 수집과 관련된 옵션 사용법은 다음 문서를 참고하세요.
알람 설정
데드락 발생에 대한 알람을 설정할 수 있습니다. 단, 데드락 정보는 deadlock_interval
주기마다 확인되므로, 알람은 실시간으로 발생하지 않고 해당 주기마다 확인된 데드락에 대해 발생합니다.