Lock:Escalation イベント クラス

Lock:Escalation イベント クラスは、細かい単位のロックが大きな単位のロックに変換されたことを示します。たとえば、行ロックがオブジェクト ロックに変換された場合です。Escalation イベント クラスは、イベント ID 60 です。

Lock:Escalation イベント クラスのデータ列

データ列名

データ型

説明

列 ID

フィルタの適用

ApplicationName

nvarchar

SQL Server のインスタンスへの接続を作成したクライアント アプリケーションの名前。この列には、プログラムの表示名ではなく、アプリケーションによって渡された値が格納されます。

10

ClientProcessID

int

クライアント アプリケーションが実行されているプロセスに対し、ホスト コンピュータが割り当てた ID。クライアントによりクライアント プロセス ID が指定されると、このデータ列に値が格納されます。

9

DatabaseID

int

ロックが取得されたデータベースの ID。ServerName データ列がトレースにキャプチャされ、サーバーが使用できる場合、SQL Server Profiler にデータベースの名前が表示されます。データベースに対応する値は、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

ユーザーのログイン名 (SQL Server セキュリティ ログインまたは DOMAIN\username という形式の Microsoft Windows ログイン資格情報)。

11

LoginSid

image

ログイン ユーザーのセキュリティ ID 番号 (SID)。この情報は、sys.server_principals カタログ ビューで参照できます。各 SID はサーバーのログインごとに一意です。

41

Mode

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

ObjectID

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

ServerName

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

Type

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 は Escalation イベント クラスを示し、番号 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  byusing sp_trace_setfilter.
-- Start the trace.
EXEC sp_trace_setstatus @TraceID, 1
GO

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  byusing sp_trace_setfilter.
-- Start the trace.
EXEC sp_trace_setstatus @TraceID, 1
GO

トレースが実行中であるため、トレースの必要があるステートメントを実行します。完了したら、次のコードを実行してトレースを停止し、閉じます。この例では、fn_trace_getinfo 関数を使用して、sp_trace_setstatus ステートメントで使用される traceid を取得します。

-- 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

-- 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