Lock:Escalation イベント クラス
適用対象: SQL サーバー
Lock:Escalation イベント クラスは、細かい単位のロックが大きな単位のロックに変換されたことを示します。たとえば、行ロックがオブジェクト ロックに変換された場合です。 Escalation イベント クラスは、イベント ID 60 です。
Lock:Escalation イベント クラスのデータ列
データ列名 | データの種類 | 説明 | 列 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 | ユーザーのログインの名前 (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 | はい |
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 | はい |
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 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)