다음을 통해 공유


SQL Server Profiler를 사용하여 교착 상태 분석

적용 대상: SQL Server Azure SQL Managed Instance

SQL Server Profiler를 사용하여 교착 상태의 원인을 식별합니다. SQL Server 내의 일부 리소스 집합에 대해 둘 이상의 스레드 또는 프로세스 간에 순환 종속성이 있는 경우 교착 상태가 발생합니다. SQL Server Profiler를 사용하여 분석을 위해 교착 상태 이벤트를 기록, 재생 및 표시하는 추적을 만들 수 있습니다.

교착 상태 이벤트를 추적하려면 추적에 교착 상태 그래프 이벤트 클래스를 추가합니다. 해당 이벤트 클래스는 교착 상태와 관련된 프로세스 및 개체에 대한 XML 데이터로 추적 시 TextData 데이터 열을 채웁니다. SQL Server Profiler는 XML 문서를 교착 상태 XML (.xdl) 파일로 추출하여 나중에 SQL Server Management Studio에서 확인할 수 있습니다. SQL Server Profiler 교착 상태 그래프 이벤트를 모든 교착 상태 그래프 이벤트가 포함된 하나의 파일로 추출하거나 별도의 파일로 추출하도록 설정할 수 있습니다. 이 작업은 다음 방법 중 하나로 수행할 수 있습니다:

  • 추적 구성 시 이벤트 추출 설정 탭을 사용합니다. 이벤트 선택 탭에서 교착 상태 그래프 이벤트를 선택하지 않으면 이 탭이 표시되지 않습니다.

  • 파일 메뉴에서 SQL Server 이벤트 추출 옵션을 사용합니다.

  • 혹은 특정 이벤트를 마우스 오른쪽 단추로 클릭하고 이벤트 데이터 추출을 선택하여 개별 이벤트를 추출하고 저장할 수 있습니다.

교착 상태 그래프

SQL Server Profiler 및 SQL Server Management Studio는 교착 상태 대기 그래프를 사용하여 교착 상태를 설명합니다. 교착 상태 대기 그래프에는 프로세스 노드, 리소스 노드 및 프로세스와 리소스 간의 관계를 나타내는 Edge가 포함됩니다. 대기 그래프의 구성 요소는 다음 표에 정의되어 있습니다:

프로세스 노드
작업을 수행하는 스레드. 예를 들어 INSERT, UPDATE 또는 DELETE.

리소스 노드
데이터베이스 개체; 예를 들어 테이블, 인덱스 또는 행

Edge
프로세스와 리소스 간의 관계. 요청 Edge는 프로세스가 리소스를 대기할 때 발생합니다. 소유자 Edge는 리소스가 프로세스를 대기할 때 발생합니다. 잠금 모드는 Edge 설명에 포함됩니다. 예를 들어 Mode: X.

교착 상태 프로세스 노드

대기 그래프에서 프로세스 노드는 프로세스에 대해 설명합니다. 다음 테이블은 프로세스의 구성 요소를 설명합니다.

구성 요소 정의
서버 프로세스 Id 서버 프로세스 식별자 (SPID), 잠금을 소유한 프로세스에 할당된 서버에서 지정한 식별자.
서버 배치 Id 서버 배치 식별자 (SBID).
실행 컨텍스트 Id 실행 컨텍스트 식별자 (ECID) 특정 SPID와 연결된 지정된 스레드의 실행 컨텍스트 ID.

ECID = {0,1,2,3, ... n}, 여기서 0은 항상 기본 또는 부모 스레드를 나타내고 {1,2,3, ... n}은 하위 스레드를 나타냅니다.
교착 상태 우선 순위 프로세스의 교착 상태 우선 순위 가능한 값에 대한 자세한 내용은 SET DEADLOCK_PRIORITY(Transact-SQL)를 참조하세요.
사용된 로그 프로세스가 사용하는 로그 공간의 양.
담당자 ID. 트랜잭션을 사용하고 현재 잠금을 대기 중인 프로세스의 트랜잭션 ID.
트랜잭션 설명자 트랜잭션 상태를 설명하는 트랜잭션 설명자에 대한 포인터.
입력 버퍼 현재 프로세스의 입력 버퍼는 이벤트 유형과 실행 중인 문을 정의. 가능한 값에는 다음이 있습니다.

언어

RPC

없음
문 유형 가능한 값은 다음과 같습니다.

NOP

SELECT

UPDATE

INSERT

DELETE

알 수 없음

교착 상태 리소스 노드

교착 상태에 있는 두 프로세스는 각각 다른 프로세스에서 보유한 리소스를 기다리고 있습니다. 교착 상태 그래프에서 리소스는 리소스 노드로 표시됩니다.