본문으로 건너뛰기

락 트리

홈 화면 > 프로젝트 선택 > 분석 > 락 트리

SQL Server 데이터베이스에서 발생하는 락(lock) 현황을 실시간으로 모니터링하고 세션의 락 상태와 관련한 세부 정보를 확인할 수 있는 유용한 도구입니다. 이 기능을 통해 사용자는 데이터베이스 성능 저하를 유발할 수 있는 락 문제를 빠르게 식별하고 원인을 분석할 수 있습니다.

제공하는 주요 기능은 다음과 같습니다.

  • 락 현황 시각화: 하루 동안 발생한 락 현황을 시각화한 그래프로 확인할 수 있습니다. 이를 통해 락이 발생한 시간대와 빈도를 한눈에 파악할 수 있습니다.

  • 세션 정보 제공: 락을 유발한 세션에 대한 상세 정보를 테이블 형식으로 제공합니다. 각 세션의 상태, 대기 시간, 대기 유형, 실행 중인 SQL 문 등의 정보를 확인할 수 있습니다.

기본 사용 안내

Lock tree

  1. 화면 상단의 시간에서 조회하려는 날짜를 선택와 시간을 설정하세요.

  2. 모니터링할 인스턴스를 선택하세요.

선택한 인스턴스에서 설정한 시간 동안 발생한 잠금(Lock) 현황을 확인할 수 있습니다.

만약 설정된 시간 동안 잠금(Lock)이 발생했다면, Lock Wait Sessions 그래프와 하단의 테이블에서 특정 시간대에 잠금이 집중되는지, 또는 특정 세션이 지속적으로 잠금을 유발하는지 등을 분석할 수 있습니다.

노트

차트에서 3시간 이내로 드래그해서 5초 단위의 데이터를 조회할 수 있습니다. 다만 5초 단위의 데이터는 최근 한 달 범위에서만 조회할 수 있습니다. 한 달 이전의 데이터는 5분 요약 데이터로만 볼 수 있습니다. 예를 들어, 40일 전의 락 트릭 데이터를 드래그(드릴다운)해서 5분 요약 데이터를 조회할 수 있으나 5초 데이터는 알 수 없습니다.

컬럼 정보 안내

각 세션에 대한 세부 정보는 다음 컬럼을 통해 제공합니다.

항목설명
application세션을 생성한 애플리케이션의 이름입니다.
client세션을 생성한 클라이언트의 이름 또는 IP 주소입니다.
db세션이 연결된 데이터베이스의 이름입니다.
elapsed_time세션이 시작된 후 경과된 시간(밀리초 단위)입니다. 잠금이 발생한 이후 얼마나 시간이 흘렀는지 측정하는 데 사용됩니다.
host세션을 생성한 클라이언트 호스트의 이름입니다.
id잠금 세션의 고유 식별자(ID)입니다.
instance에이전트 또는 인스턴스의 이름입니다.
last_wait_type세션이 마지막으로 기다린 대기 유형입니다.
row_count세션에서 처리된 행(row)의 수를 나타냅니다.
query현재 세션에서 실행 중인 SQL 문의 전체 텍스트입니다.
query_param세션에서 실행 중인 SQL 문의 매개변수 값입니다.s
status세션의 현재 상태를 나타냅니다. 예를 들어, running, suspended, sleeping 등이 있으며, 세션이 활성 상태인지, 대기 중인지를 의미합니다.
userSQL Server에 접속한 사용자의 이름입니다.
wait_resource세션이 대기하고 있는 자원(resource)을 나타냅니다.
wait_time세션이 대기 중인 시간(밀리초 단위)입니다.
wait_type세션이 대기 중인 대기 유형을 나타냅니다. 예를 들어, 잠금 대기 또는 IO 대기 등의 정보를 포함합니다.
노트

와탭은 클라이언트와 관련한 정보를 기본 저장합니다.

wait_type

wait_type 컬럼은 SQL Server에서 쿼리나 트랜잭션이 대기 중인 특정 리소스나 이벤트를 나타내는 값입니다. SQL Server는 내부적으로 다양한 대기 유형을 사용하여 시스템 성능을 관리하고 문제를 진단합니다.

I/0 관련 대기

  • PAGEIOLATCH_EX: 데이터 페이지를 읽기 위해 배타적 잠금을 대기합니다.

  • PAGEIOLATCH_SH: 데이터 페이지를 읽기 위해 공유 잠금을 대기합니다.

  • FILEIO: 파일 I/O 작업 중 대기입니다.

락(Lock) 관련 대기

  • LCK_M_X: 배타적 잠금 대기입니다.

  • LCK_M_S: 공유 잠금 대기입니다.

  • LCK_M_U: 업데이트 잠금 대기입니다.

  • RESOURCE_SEMAPHORE': 리소스 세마포어 대기, 메모리 자원을 확보하기 위해 대기하는 경우입니다.

기타 대기

  • CKPACKET: 병렬 쿼리에서 스레드 간 동기화 대기입니다.

  • ASYNC_NETWORK_IO: 네트워크 I/O 작업 중 대기입니다.

  • SLEEP_*: WAITFOR 또는 WAITFOR DELAY 문으로 인해 대기 중입니다.

  • BROKER_* : Service Broker 메시지 대기입니다.

  • LOCK_MANAGER: 잠금 관리 대기, SQL Server의 잠금 관리자와 관련한 대기입니다.

wait_resource

wait_resource 컬럼은 SQL Server에서 실행 중인 요청이 대기하고 있는 리소스에 대한 정보를 제공합니다. 요청이 특정 리소스를 기다리는 상황을 문자열 형식으로 표현하며, 대기 중인 리소스의 구체적인 식별자나 위치를 나타냅니다.

주요 리소스 유형 및 예시는 다음을 참조하세요.

  • PAGE: <file_id>:<page_id>

    데이터 페이지에 대한 대기를 나타냅니다.

    예, PAGE: 1:12345

  • FILE: <file_id>

    데이터 파일 전체에 대한 대기를 나타냅니다.

    예, FILE: 1

  • 0BJECT: <cobject_id>

    특정 테이블에 대한 대기를 나타냅니다.

    예, 0BJECT: 123456

  • DATABASE: <database_id>

    특정 데이터베이스에 대한 대기를 나타냅니다.

    예, DATABASE: 5

  • KEY: <key_id>

    인덱스 키 또는 다른 데이터 구조의 키에 대한 대기를 나타냅니다.

    예, KEY: 67890

  • RID: <file_id>:<page_id>:<row_id>

    wait_resource 컬럼이 RID(Row Identifier)인 경우는 SQL Server의 특정 행(row)에 대한 대기를 나타냅니다. RID는 SQL Server에서 테이블의 특정 행을 식별하는 고유한 식별자입니다.

    예, RID: 1:1234:5678

노트
  • <file_id>는 데이터 파일의 ID를 의미합니다.

  • <page_id>는 페이지의 ID를 의미합니다.

  • <object_id>는 테이블의 ID입니다.

  • <database_1d>는 데이터베이스의 ID입니다.

  • <key_id>는 키의 ID입니다.

  • <row_id>는 페이지 내에서 행을 식별하는 ID입니다.