Lock:Escalation イベント クラスは、粒度の細かいロックが粗いロックに変換されたことを示します。たとえば、オブジェクト ロックに変換される行ロックなどです。 エスカレーション イベント クラスはイベント ID 60 です。
ロック:エスカレーションイベントクラスのデータ列
| データ列名 | データの種類 | 説明 | 列 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。 | 二十七 | いいえ |
| 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 のロックの数。 | 二十五 | イエス |
| IntegerData2 | int |
増加したロック数。 変換されたロックの合計数。 これらのロック構造は、エスカレートされたロックによって既にカバーされているため、割り当てが解除されます。 | 55 | イエス |
| IsSystem | int |
イベントがシステム プロセスとユーザー プロセスのどちらで発生したか。 1 はシステム、0 はユーザーです。 | 六十 | イエス |
| LineNumber | int |
ステートメントの行番号 Transact-SQL。 | 5 | イエス |
| LoginName | nvarchar |
ユーザーのログインの名前 (SQL Server セキュリティ ログインまたは DOMAIN\username の形式の Microsoft Windows ログイン資格情報)。 | 11 | イエス |
| LoginSid | image |
ログイン ユーザーのセキュリティ ID 番号 (SID)。 この情報は、 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 | イエス |
| ObjectID | int |
ロックエスカレーションがトリガーされたテーブルのシステム割り当て ID。 | 22 | イエス |
| ObjectID2 | bigint |
関連するオブジェクトまたはエンティティの ID。 (ロックエスカレーションがトリガーされた HoBT ID。) | 56 | イエス |
| オフセット | int |
ステートメントTransact-SQLの開始オフセット。 | 61 | イエス |
| OwnerID | int |
1 = トランザクション 2=カーソル 3=セッション 4 = 共有取引作業領域 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 | イエス |
| タイプ | int |
ロックエスカレーションの詳細度 1 = NULL_RESOURCE 2=データベース 3=ファイル 5 = オブジェクト (テーブルレベル) 6=ページ 7=キー 8=範囲 9=RID 10=アプリケーション 11=メタデータ 12=HOBT 13=割り当て単位 |
五十七 | イエス |
例示
次の例では、 sp_trace_create プロシージャを使用してトレースを作成し、 sp_trace_setevent を使用してトレースにロックエスカレーション列を追加した後、 sp_trace_setstatus を使用してトレースを開始します。
EXEC sp_trace_setevent @TraceID, 60, 22, 1などのステートメントでは、60番号はエスカレーション イベント クラスを示し、22は ObjectID 列を示し、トレース イベントを ON に設定1。
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関数を使用して、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
こちらもご覧ください
sp_trace_setevent (Transact-SQL) イベント設定関数
sys.dm_tran_locks (Transact-SQL)