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

SQL Server 프로파일러SQL Server Profiler 를 사용하여 교착 상태의 원인을 확인할 수 있습니다.Use SQL Server 프로파일러SQL Server Profiler to identify the cause of a deadlock. 둘 이상의 스레드 또는 프로세스 간에 SQL Server 내의 일부 리소스에 대한 순환 종속성이 있는 경우 교착 상태가 발생합니다.A deadlock occurs when there is a cyclic dependency between two or more threads, or processes, for some set of resources within SQL Server. SQL Server 프로파일러SQL Server Profiler를 사용하여 교착 상태 이벤트를 기록하고 재생하고 표시하는 추적을 만들어 분석할 수 있습니다.Using SQL Server 프로파일러SQL Server Profiler, you can create a trace that records, replays, and displays deadlock events for analysis.

교착 상태 이벤트를 추적하려면 Deadlock graph 이벤트 클래스를 추적에 추가합니다.To trace deadlock events, add the Deadlock graph event class to a trace. 이 이벤트 클래스는 교착 상태와 관련된 프로세스 및 개체에 대한 XML 데이터로 추적 시 TextData 데이터 열을 채웁니다.This event class populates the TextData data column in the trace with XML data about the process and objects that are involved in the deadlock. SQL Server 프로파일러SQL Server Profiler 는 XML 문서를 교착 상태 XML(.xdl) 파일로 추출할 수 있습니다. 이 XML 파일은 나중에 SQL Server Management Studio에서 볼 수 있습니다. can extract the XML document to a deadlock XML (.xdl) file which you can view later in SQL Server Management Studio. SQL Server 프로파일러SQL Server Profiler 를 구성하여 모든 Deadlock graph 이벤트가 포함되어 있는 단일 파일로 Deadlock graph 이벤트를 추출하거나 개별 파일로 추출할 수도 있습니다.You can configure SQL Server 프로파일러SQL Server Profiler to extract Deadlock graph events to a single file that contains all Deadlock graph events, or to separate files. 다음과 같은 방법으로 추출할 수 있습니다.This extraction can be done in any of the following ways:

  • 추적 구성 시 이벤트 추출 설정 탭을 사용합니다.At trace configuration time, using the Events Extraction Settings tab. 이벤트 선택 탭에서 Deadlock graph 이벤트를 선택해야만 이 탭이 표시됩니다.Note that this tab does not appear until you select the Deadlock graph event on the Events Selection tab.

  • 파일 메뉴에서 SQL Server 이벤트 추출 옵션을 사용합니다.Using the Extract SQL Server Events option on the File menu.

  • 개별 이벤트는 특정 이벤트를 마우스 오른쪽 단추로 클릭하고 이벤트 데이터 추출을 선택하여 추출 및 저장할 수도 있습니다.Individual events can also be extracted and saved by right-clicking a specific event and choosing Extract Event Data.

교착 상태 그래프Deadlock Graphs

SQL Server 프로파일러SQL Server ProfilerSQL Server Management StudioSQL Server Management Studio 는 교착 상태 WAITFOR 그래프를 사용하여 교착 상태를 설명합니다. and SQL Server Management StudioSQL Server Management Studio use a deadlock wait-for graph to describe a deadlock. 교착 상태 WAITFOR 그래프에는 프로세스 노드, 리소스 노드 및 프로세스와 리소스 간의 관계를 나타내는 가장자리가 포함됩니다.The deadlock wait-for graph contains process nodes, resource nodes, and edges representing the relationships between the processes and the resources. WAITFOR 그래프의 구성 요소는 다음 표에 정의되어 있습니다.The components of wait-for graphs are defined in the following table:

프로세스 노드Process node
태스크를 수행하는 스레드입니다. 예를 들어 INSERT, UPDATE 또는 DELETE입니다.A thread that performs a task; for example, INSERT, UPDATE, or DELETE.

리소스 노드Resource node
데이터베이스 개체입니다. 예를 들어 테이블, 인덱스 또는 행입니다.A database object; for example, a table, index, or row.

가장자리Edge
프로세스와 리소스 간의 관계입니다.A relationship between a process and a resource. request 가장자리는 프로세스가 리소스를 대기할 때 발생합니다.A request edge occurs when a process waits for a resource. owner 가장자리는 리소스가 프로세스를 대기할 때 발생합니다.An owner edge occurs when a resource waits for a process. 잠금 모드는 가장자리 설명에 포함되어 있습니다.The lock mode is included in the edge description. 예를 들어 Mode: X입니다.For example, Mode: X.

교착 상태 프로세스 모드Deadlock Process Node

WAITFOR 그래프에서 프로세스 노드는 프로세스에 대해 설명합니다.In a wait-for graph, the process node contains information about the process. 다음 표에서는 프로세스의 구성 요소에 대해 설명합니다.The following table explains the components of a process.

구성 요소Component 정의Definition
서버 프로세스 IDServer process Id SPID(서버 프로세스 식별자)는 서버가 잠금을 소유하고 있는 프로세스에 할당한 식별자입니다.Server process identifier (SPID), a server assigned identifier for the process owning the lock.
서버 일괄 처리 IDServer batch Id SBID(서버 일괄 처리 식별자)입니다.Server batch identifier (SBID).
실행 컨텍스트 IDExecution context Id ECID(실행 컨텍스트 식별자)입니다.Execution context identifier (ECID). 특정 SPID와 관련된 주어진 스레드의 실행 컨텍스트 ID입니다.The execution context ID of a given thread associated with a specific SPID.

ECID = {0,1,2,3, ...n}이며 여기서 0은 항상 주 또는 부모 스레드를 의미하고 {1,2,3, ...n}은 하위 스레드를 의미합니다.ECID = {0,1,2,3, ...n}, where 0 always represents the main or parent thread, and {1,2,3, ...n} represent the subthreads.
교착 상태 우선 순위Deadlock priority 프로세스의 교착 상태 우선 순위입니다.Deadlock priority for the process. 가능한 값에 대한 자세한 내용은 SET DEADLOCK_PRIORITY(Transact-SQL)를 참조하세요.For more information about possible values, see SET DEADLOCK_PRIORITY (Transact-SQL).
사용된 로그Log Used 프로세스가 사용한 로그 공간입니다.Amount of log space used by the process.
소유자 IDOwner Id 트랜잭션을 사용 중이고 잠금에 대해 현재 대기 중인 프로세스의 트랜잭션 ID입니다.Transaction ID for the processes which are using transactions and currently waiting on a lock.
트랜잭션 설명자Transaction descriptor 트랜잭션 상태를 설명하는 트랜잭션 설명자에 대한 포인터입니다.Pointer to the transaction descriptor that describes the state of the transaction.
입력 버퍼Input buffer 현재 프로세스의 입력 버퍼. 이벤트의 유형과 실행 중인 문을 정의합니다.Input buffer of the current process, defines the type of event and the statement being executed. 가능한 값은 다음과 같습니다.Possible values include:

언어Language

RPCRPC

없음None
Statement 문 유형.Type of statement. 가능한 값은Possible values are:

NOPNOP

SELECTSELECT

UPDATEUPDATE

INSERTINSERT

DELETEDELETE

UnknownUnknown

교착 상태 리소스 노드Deadlock Resource Node

두 프로세스가 각각 다른 프로세스에서 소유하고 있는 리소스를 대기하고 있는 상태가 교착 상태입니다.In a deadlock, two processes are each waiting for a resource held by the other process. 교착 상태 그래프에서 리소스는 리소스 노드로 표시됩니다.In a deadlock graph, the resources are displayed as resource nodes.