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 알 수 없음 |
교착 상태 리소스 노드
교착 상태에 있는 두 프로세스는 각각 다른 프로세스에서 보유한 리소스를 기다리고 있습니다. 교착 상태 그래프에서 리소스는 리소스 노드로 표시됩니다.