락 트리
락 트리 화면에서는 잠금(Lock)으로 인해 서로 대기하는 세션을 트리 형태로 확인할 수 있습니다. 어떤 세션이 자원을 쥐고 있고(holder) 어떤 세션이 그것을 기다리는지(waiter) 부모와 자식 관계로 보여 줘서, 교착 상태의 원인 세션을 빠르게 찾도록 돕습니다.
락과 락 트리
쉽게 말하면 락은 같은 데이터를 동시에 바꾸지 못하도록 거는 잠금장치입니다. 한 세션이 데이터를 수정하는 동안 다른 세션은 기다려야 합니다. 기다리는 세션이 늘어나 서로 물고 물리면 교착 상태가 됩니다. 락 트리는 이 대기 관계를 나무 모양으로 펼쳐, 맨 위에서 자원을 쥐고 있는 세션(원인)을 찾게 해 줍니다.
기본 화면 안내
화면 상단에서 인스턴스와 데이터베이스를 선택합니다. 먼저 Lock Wait Sessions 차트에서 락 대기가 발생한 시점을 선택하면, 그 시점의 Lock Tree와 Total Locks를 확인할 수 있습니다. 수 분 이상 지속된 락을 짚어 주므로 오래 묶여 있는 잠금을 빠르게 찾을 수 있습니다.
| 영역 | 설명 |
|---|---|
| Lock Wait Sessions | 시간대별 락 대기 세션 수 차트. 조회할 시점을 선택 |
| Lock Tree | 선택 시점의 잠금 대기 관계를 트리로 표시 |
| Total Locks | 선택 시점의 전체 락 수 |
컬럼 안내
자원을 쥔 세션(holder)과 기다리는 세션(waiter)을 다음 컬럼으로 표시합니다.
| Column | Description |
|---|---|
instance | 세션이 실행 중인 노드 |
node_id | 노드 식별자 |
session_id | 세션 ID |
db | 사용 중인 데이터베이스 |
user | 접속 사용자 |
tx_state | 트랜잭션 상태 |
lock_type | 잠금 유형 |
row_locks | 행 잠금 수 |
partition_locks | 파티션 잠금 수 |
activity | 작업 이름 |
raw_task | 실행 중인 SQL 원문 |
sql_param | SQL 파라미터 |
command | 실행 중인 명령 종류 |
elapsed_time_ms | 수행 시간 (밀리초) |
여기서 헷갈릴 수 있는 부분은 세션을 식별하는 방식입니다. MySQL은 세션 ID 하나로 식별하지만, SingleStore는 분산 환경이라 노드 식별자와 세션 ID를 함께(node_id + session_id) 매칭 키로 사용합니다. 같은 세션 ID라도 노드가 다르면 다른 세션이기 때문입니다. row_locks·partition_locks는 분산 환경에서 잠금이 행 단위인지 파티션 단위인지 구분해 줍니다.
락 해소
원인 세션(holder)을 확인한 뒤 필요하면 해당 세션을 중지할 수 있습니다. 세션 중지 방법은 세션 히스토리와 인스턴스 모니터링 문서를 참조하세요.