Lock:Escalation 이벤트 클래스
Lock:Escalation 이벤트 클래스는 행 잠금이 개체 잠금으로 변환되는 것과 같이 미세 잠금이 성긴 잠금으로 변환되었음을 나타냅니다. 에스컬레이션 이벤트 클래스는 이벤트 ID 60입니다.
Lock:Escalation 이벤트 클래스 데이터 열
데이터 열 이름 | 데이터 형식 | Description | 열 ID | 필터 가능 |
---|---|---|---|---|
ApplicationName | nvarchar |
SQL Server인스턴스에 연결한 클라이언트 애플리케이션의 이름입니다. 이 열은 프로그램의 표시 이름이 아니라 애플리케이션에서 전달한 값으로 채워집니다. | 10 | 예 |
ClientProcessID | int |
클라이언트 애플리케이션이 실행 중인 프로세스에 대해 호스트 컴퓨터가 할당한 ID입니다. 클라이언트가 클라이언트 프로세스 ID를 제공하면 이 데이터 열이 채워집니다. | 9 | 예 |
DatabaseID | int |
잠금을 획득한 데이터베이스의 ID입니다. SQL Server Profiler ServerName 데이터 열이 추적에서 캡처되고 서버를 사용할 수 있으면 에 데이터베이스 이름이 표시됩니다. DB_ID 함수를 사용하여 데이터베이스의 값을 확인할 수 있습니다. | 3 | 예 |
DatabaseName | nvarchar |
에스컬레이션이 발생한 데이터베이스의 이름입니다. | 35 | 예 |
EventClass | int |
이벤트 유형 = 60 | 27 | 예 |
EventSubClass | int |
잠금 에스컬레이션의 원인: 0 - LOCK_THRESHOLD 는 문이 잠금 임계값을 초과했음을 나타냅니다. 1 - MEMORY_THRESHOLD 는 문이 메모리 임계값을 초과했음을 나타냅니다. |
21 | 예 |
EventSequence | int |
요청 내에 지정된 이벤트 시퀀스입니다. | 51 | 예 |
GroupID | int |
SQL 추적 이벤트가 발생한 작업 그룹의 ID입니다. | 66 | 예 |
HostName | nvarchar |
클라이언트를 실행 중인 컴퓨터 이름입니다. 클라이언트가 호스트 이름을 제공할 경우 이 데이터 열이 채워집니다. 호스트 이름을 확인하려면 HOST_NAME 함수를 사용합니다. | 8 | 예 |
IntegerData | int |
HoBT 잠금 카운트입니다. 잠금 에스컬레이션 시 HoBT의 잠금 수입니다. | 25 | 예 |
IntegerData2 | int |
에스컬레이션된 잠금 카운트입니다. 변환된 총 잠금 수 입니다. 이러한 잠금 구조는 이미 에스컬레이션된 잠금으로 보호되므로 할당이 취소됩니다. | 55 | 예 |
IsSystem | int |
이벤트가 시스템 프로세스에서 발생했는지 아니면 사용자 프로세스에서 발생했는지를 나타냅니다. 1 = 시스템, 0 = 사용자 | 60 | 예 |
LineNumber | int |
Transact-SQL 문의 줄 번호입니다. | 5 | 예 |
LoginName | nvarchar |
사용자 로그인 이름이며 DOMAIN\username 형식의 SQL Server Windows 로그인 자격 증명 또는 Microsoft 보안 로그인입니다. | 11 | 예 |
LoginSid | image |
로그인한 사용자의 SID(보안 ID)입니다. 이 정보는 sys.server_principals 카탈로그 뷰에 있습니다. 각 SID는 서버의 각 로그인마다 고유합니다. | 41 | 예 |
모드 | int |
에스컬레이션 후의 결과 잠금 모드: 0=NULL - 모든 잠금 모드와 호환(LCK_M_NL) 1=스키마 안정성 잠금(LCK_M_SCH_S) 2=스키마 수정 잠금(LCK_M_SCH_M) 3=공유 잠금(LCK_M_S) 4=업데이트 잠금(LCK_M_U) 5=배타 잠금(LCK_M_X) 6=내재된 공유 잠금(LCK_M_IS) 7=의도 업데이트 잠금(LCK_M_IU) 8=의도 배타 잠금(LCK_M_IX) 9=의도 업데이트 공유(LCK_M_SIU) 10=의도 배타 공유(LCK_M_SIX) 11=의도 배타 업데이트(LCK_M_UIX) 12=대량 업데이트 잠금(LCK_M_BU) 13=키 범위 공유/공유(LCK_M_RS_S) 14=키 범위 공유/업데이트(LCK_M_RS_U) 15=키 범위 삽입 NULL(LCK_M_RI_NL) 16=키 범위 삽입 공유(LCK_M_RI_S) 17=키 범위 삽입 업데이트(LCK_M_RI_U) 18=키 범위 삽입 배타(LCK_M_RI_X) 19=키 범위 배타 공유(LCK_M_RX_S) 20=키 범위 배타 업데이트(LCK_M_RX_U) 21=키 범위 배타 배타(LCK_M_RX_X) |
32 | 예 |
NTDomainName | nvarchar |
사용자가 속한 Windows 도메인입니다. | 7 | 예 |
NTUserName | nvarchar |
Windows 사용자 이름입니다. | 6 | 예 |
Exchange Spill | int |
잠금 에스컬레이션이 트리거된 테이블의 시스템 할당 ID입니다. | 22 | 예 |
ObjectID2 | bigint |
관련 개체 또는 엔터티의 ID입니다. 즉, 잠금 에스컬레이션이 트리거된 HoBT ID입니다. | 56 | 예 |
Offset | int |
Transact-SQL 문의 시작 오프셋입니다. | 61 | 예 |
OwnerID | int |
1=TRANSACTION 2=CURSOR 3=SESSION 4=SHARED_TRANSACTION_WORKSPACE 5=EXCLUSIVE_TRANSACTION_WORKSPACE 6=WAITFOR_QUERY |
58 | 예 |
RequestID | int |
문을 포함하는 요청의 ID입니다. | 49 | 예 |
데이터 열이 추적에서 캡처되고 서버를 사용할 수 있으면 | nvarchar |
추적 중인 SQL Server 인스턴스의 이름입니다. | 26 | 예 |
SessionLoginName | nvarchar |
세션을 시작한 사용자의 로그인 이름입니다. 예를 들어 Login1을 사용하여 SQL Server 에 연결하고 Login2로 문을 실행할 경우 SessionLoginName 은 Login1을 표시하고 LoginName 은 Login2를 표시합니다. 이 열은 SQL Server 및 Windows 로그인을 모두 표시합니다. | 64 | 예 |
SPID | int |
이벤트가 발생한 세션의 ID입니다. | 12 | 예 |
StartTime | datetime |
이벤트가 시작된 시간입니다(사용 가능한 경우). | 14 | 예 |
TextData | ntext |
잠금 에스컬레이션을 발생시킨 Transact-SQL 문의 텍스트입니다. | 1 | 예 |
TransactionID | bigint |
시스템이 할당한 트랜잭션의 ID입니다. | 4 | 예 |
형식 | int |
잠금 에스컬레이션 세분성: 1=NULL_RESOURCE 2=DATABASE 3=FILE 5=OBJECT(테이블 수준) 6=PAGE 7=KEY 8=EXTENT 9=RID 10=APPLICATION 11=METADATA 12=HOBT 13=ALLOCATION_UNIT |
57 | 예 |
예제
다음 예에서는 sp_trace_create
프로시저를 사용하여 추적을 만들고 sp_trace_setevent
를 사용하여 추적에 잠금 에스컬레이션 열을 추가한 다음 sp_trace_setstatus
를 추적을 시작합니다. EXEC sp_trace_setevent @TraceID, 60, 22, 1
과 같은 문에서 숫자 60
은 에스컬레이션 이벤트 클래스를 나타내고, 22
는 ObjectID 열을 나타내며, 1
은 추적 이벤트를 ON으로 설정합니다.
DECLARE @RC int, @TraceID int;
EXEC @rc = sp_trace_create @TraceID output, 0, N'C:\TraceResults';
-- Set the events and data columns you need to capture.
EXEC sp_trace_setevent @TraceID, 60, 1, 1; -- 1 = TextData
EXEC sp_trace_setevent @TraceID, 60, 12, 1; -- 12 = SPID
EXEC sp_trace_setevent @TraceID, 60, 21, 1; -- 21 = EventSubClass
EXEC sp_trace_setevent @TraceID, 60, 22, 1; -- 22 = ObjectID
EXEC sp_trace_setevent @TraceID, 60, 25, 1; -- 25 = IntegerData
EXEC sp_trace_setevent @TraceID, 60, 55, 1; -- 25 = IntegerData2
EXEC sp_trace_setevent @TraceID, 60, 57, 1; -- 57 = Type
-- Set any filter by using sp_trace_setfilter.
-- Start the trace.
EXEC sp_trace_setstatus @TraceID, 1;
GO
이제 추적이 실행되고 있으므로 추적할 문을 실행합니다. 문이 완료되면 다음 코드를 실행하여 추적을 중지한 다음 닫습니다. 이 예에서는 fn_trace_getinfo
함수를 사용하여 traceid
가 sp_trace_setstatus
문에 사용되도록 합니다.
-- After the trace is complete.
DECLARE @TraceID int;
-- Find the traceid of the current trace.
SELECT @TraceID = traceid
FROM ::fn_trace_getinfo(default)
WHERE value = N'C:\TraceResults.trc';
-- First stop the trace.
EXEC sp_trace_setstatus @TraceID, 0;
-- Close and then delete its definition from SQL Server.
EXEC sp_trace_setstatus @TraceID, 2;
GO
참고 항목
sp_trace_setevent(Transact-SQL)
sys.dm_tran_locks (Transact-SQL)