sys.dm_tran_locks (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric のウェアハウス

SQL Server で現在アクティブなロック マネージャー リソースに関する情報を返します。 各行は、ロック マネージャーに対して現在アクティブになっている要求を示しています。この要求は、許可されたロックまたは許可を待機しているロックに対するものです。

結果セットの列は、リソースと要求の 2 つの主要グループに分けられます。 リソース グループは、ロック要求が出されているリソースを示し、要求グループはロック要求を示します。

Note

これを Azure Synapse Analytics または Analytics Platform System (PDW) から呼び出すには、 sys.dm_pdw_nodes_tran_locksという名前を使用します。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。

列名 データ型 説明
resource_type nvarchar(60) リソースの種類。 値は次のようになります。

DATABASE

FILE

OBJECT

ページ

KEY

EXTENT

RID (行 ID)

アプリケーション

METADATA

HOBT (ヒープまたは B ツリー)

ALLOCATION_UNIT

XACT (トランザクション)

OIB (オンライン インデックス ビルド)

ROW_GROUP
resource_subtype nvarchar(60) resource_typeのサブタイプを表します。 親型のサブタイプ以外のロックを保持せずにサブタイプ ロックを取得することは技術的に有効です。 サブタイプが異なると、互いに競合したり、サブタイプのない親型と競合したりすることはありません。 また、すべての種類のリソースにサブタイプが含まれるわけではありません。
resource_database_id int リソースのスコープとなっているデータベースの ID。 ロック マネージャーによって処理されるすべてのリソースのスコープは、このデータベース ID に基づいて決定されます。
resource_description nvarchar (256) 別のリソース列からは使用できない情報のみを含むリソースの説明。
resource_associated_entity_id bigint リソースが関連付けられているデータベース内のエンティティの ID。 リソースの種類に応じて、オブジェクト ID、HOBT ID、またはアロケーション ユニット ID を指定できます。
resource_lock_partition Int ロック リソースがパーティション分割されている場合の、ロック パーティションの ID。 パーティション分割されていないロック リソースの値は 0
request_mode nvarchar(60) 要求のモード。 許可された要求については許可モード、待機中の要求については要求中モードになります。

NULL = リソースへのアクセスは許可されていません。 プレースホルダーとして機能します。

Sch-S (スキーマ安定性) = スキーマ要素に対するスキーマ安定性ロックがセッションで保持されている間、テーブルやインデックスなどのスキーマ要素が削除されないようにします。

Sch-M (スキーマ変更) = 指定したリソースのスキーマを変更するセッションで、保持する必要があります。 指定したオブジェクトが他のセッションによって参照されないようにします。

S (共有) = 保持しているセッションは、リソースへの共有アクセスを許可されます。

U (更新) = 最終的に更新される可能性があるリソースで取得された更新ロックを示します。 これは、後で更新される可能性があるリソースが複数のセッションによってロックされるとき、一般的な形式のデッドロックが発生するのを防止するために使用します。

X (排他) = 保持しているセッションは、リソースへの排他アクセスを許可されます。

IS (インテント共有) = ロック階層の下位リソースに対して S ロックを設定する意図を示します。

IU (インテント更新) = ロック階層の下位リソースに対して U ロックを設定する意図を示します。

IX (インテント排他) = ロック階層の下位リソースに対して X ロックを設定する意図を示します。

SIU (共有インテント更新) = ロック階層の下位リソースに対する更新ロックの取得を意図した、リソースへの共有アクセスを示します。

SIX (共有インテント排他) = ロック階層の下位リソースに対する排他ロックの取得を意図した、リソースへの共有アクセスを示します。

UIX (更新インテント排他) = ロック階層の下位リソースに対する排他ロックの取得を意図した、リソースでの更新ロックの保持を示します。

BU = 一括操作によって使われます。

RangeS_S (共有キー範囲と共有リソース ロック) = シリアル化可能な範囲スキャンを示します。

RangeS_U (共有キー範囲と更新リソース ロック) = シリアル化可能な更新スキャンを示します。

RangeI_N (挿入キー範囲と NULL リソース ロック) = 新しいキーをインデックスに挿入する前に範囲をテストするために使われます。

RangeI_S = RangeI_N と S ロックの重複によって作成されるキー範囲変換ロック。

RangeI_U = RangeI_N と U ロックの重複によって作成されるキー範囲変換ロック。

RangeI_X = RangeI_N と X ロックの重複によって作成されるキー範囲変換ロック。

RangeX_S = RangeI_N と RangeS_S ロックの重複によって作成されるキー範囲変換ロック。 ロック。

RangeX_U = RangeI_N と RangeS_U ロックの重複によって作成されるキー範囲変換ロック。

RangeX_X (排他キー範囲と排他リソース ロック) = これは、範囲内のキーを更新するときに使われる変換ロックです。
request_type nvarchar(60) 要求の種類。 値は LOCK です。
request_status nvarchar(60) この要求の現在の状態。 使用できる値は、GRANTED、CONVERT、WAIT、LOW_PRIORITY_CONVERT、LOW_PRIORITY_WAIT、または ABORT_BLOCKERS です。 低優先度の待機と中止ブロッカーについて詳しくは、「ALTER INDEX (Transact-SQL)」の low_priority_lock_wait に関するセクションをご覧ください。
request_reference_count smallint 同じ要求元がこのリソースを要求した回数の概数。
request_lifetime int 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
request_session_id int session_id 現在この要求を所有している 所有 session_id は、分散トランザクションとバインドされたトランザクションに対して変更される可能性があります。 -2の値は、要求が孤立した分散トランザクションに属していることを示します。 -3値は、要求が遅延復旧トランザクション (ロールバックが正常に完了できなかったために復旧時にロールバックが延期されたトランザクションなど) に属していることを示します。
request_exec_context_id int 要求を現在所有するプロセスの、実行コンテキスト ID。
request_request_id int request_id この要求を現在所有しているプロセスの (バッチ ID)。 この値は、トランザクションのアクティブな複数アクティブな結果セット (MARS) 接続が変更されるたびに変更されます。
request_owner_type nvarchar(60) 要求を所有するエンティティの種類。 ロック マネージャーの要求は、さまざまな種類のエンティティで所有されます。 次のいずれかの値になります。

TRANSACTION = 要求はトランザクションが所有しています。

CURSOR = 要求はカーソルが所有しています。

SESSION = 要求はユーザー セッションが所有しています。

SHARED_TRANSACTION_WORKSPACE = 要求は、トランザクション ワークスペースの共有部分が所有しています。

EXCLUSIVE_TRANSACTION_WORKSPACE = 要求は、トランザクション ワークスペースの排他部分が所有しています。

NOTIFICATION_OBJECT = 要求は、内部 SQL Server コンポーネントによって所有されています。 このコンポーネントは、別のコンポーネントがロックの取得を待機しているときに、そのことを通知するようにロック マネージャーに要求しました。 FileTable 機能は、この値を使用するコンポーネントです。

注: 登録されたセッションのロックを保持するには、ワークスペースが内部的に使われます。
request_owner_id bigint この要求の特定の所有者の ID。

トランザクションが要求の所有者である場合、この値にはトランザクション ID が含まれます。

FileTable が要求の所有者である場合、 request_owner_id には次のいずれかの値があります。
  • -4 : FileTable がデータベース ロックを取得しました。
  • -3 : FileTable がテーブル ロックを取得しました。
  • その他の値: 値はファイル ハンドルを表します。 この値は、動的管理ビュー sys.dm_filestream_non_transacted_handles (Transact-SQL)fcb_id としても表示されます。
request_owner_guid uniqueidentifier この要求の特定の所有者の GUID。 この値は、分散トランザクションの MS DTC GUID に対応する場合に、そのトランザクションによってのみ使用されます。
request_owner_lockspace_id nvarchar(32) 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。 この値は、要求元のロック領域 ID を示します。 ロック領域 ID によって、2 つの要求元の間に互換性があり、互いに競合しないモードでロックを許可できるかどうかを判断できます。
lock_owner_address varbinary(8) 要求を追跡するときに使用される内部データ構造のメモリ アドレス。 この列は、sys.dm_os_waiting_tasksresource_address 列と結合できます。
pdw_node_id int 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW)

このディストリビューションがオンになっているノードの識別子。

アクセス許可

SQL Server と SQL Managed Instance では、VIEW SERVER STATE アクセス許可が必要です。

SQL Database の BasicS0S1 サービス対象、および Elastic Pool のデータベースの場合、サーバー管理者アカウント、Microsoft Entra 管理者アカウント、または ##MS_ServerStateReader##サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE アクセス許可または ##MS_ServerStateReader## サーバー ロールのメンバーシップのいずれかが必要です。

SQL Server 2022 以降でのアクセス許可

サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。

解説

要求が許可された状態とは、要求元に対してリソースのロックが許可されたことを示します。 要求を待機している状態とは、その要求がまだ許可されていないことを示します。 次の待機要求の種類は、 request_status 列によって返されます。

  • 要求変換の状態とは、要求元がリソース要求を既に許可されており、最初の要求からさらに上の段階の許可を現在待機中であることを示します。

  • 要求待機の状態とは、要求元が現在、リソースに対して許可された要求を保持していないことを示します。

sys.dm_tran_locksは内部ロック マネージャーのデータ構造から設定されるため、この情報を維持しても、通常の処理に余分なオーバーヘッドは発生しません。 ビューを具現化するには、ロック マネージャーの内部データ構造にアクセスする必要があります。 これによって、サーバーでの通常の処理にわずかな影響が生じることがありますが、 このような影響は重要ではなく、頻繁に使用されるリソースのみに影響します。 このビューのデータはアクティブなロック マネージャーの状態に対応しているので、データはいつでも変更される可能性があります。ロックが取得または解放されるときに、行が追加または削除されます。 このビューのクエリを実行するアプリケーションでは、ロック マネージャー構造の整合性を保護する性質のため、予期しないパフォーマンスが発生する可能性があります。 このビューには、履歴情報はありません。

2 つの要求は、すべてのリソース グループの行が等しい場合のみ、同じリソースに実行されます。

次のツールを使用すると、読み取り操作のロックを制御できます。

  • SET TRANSACTION ISOLATION LEVEL を使用すると、セッションに対するロックのレベルを指定できます。 詳細については、「SET TRANSACTION ISOLATION LEVEL (Transact-SQL)」を参照してください。

  • テーブル ヒントをロックすると、FROM 句内にあるテーブルの個別の参照に対してロックのレベルを指定できます。 構文と制限については、「テーブル ヒント (Transact-SQL)」をご覧ください。

1 つの session_id で実行されているリソースに、複数のロックが付与されている場合があります。 1 つのセッションで実行されている異なるエンティティは、それぞれ同じリソースに対するロックを所有でき、sys.dm_tran_locksによって返されるrequest_owner_type列とrequest_owner_id列に情報が表示されます。 同じ request_owner_type の複数のインスタンスが存在する場合は、各インスタンスを区別するために request_owner_id 列が使用されます。 分散トランザクションの場合、 request_owner_type 列と request_owner_guid 列には、さまざまなエンティティ情報が表示されます。

たとえば、セッション S1 は Table1の共有ロックを所有し、セッション S1 で実行されているトランザクション T1 は、 Table1の共有ロックも所有します。 この場合、sys.dm_tran_locksによって返されるresource_description列には、同じリソースの 2 つのインスタンスが表示されます。 request_owner_type列には、1 つのインスタンスがセッションとして、もう 1 つのインスタンスがトランザクションとして表示されます。 また、 resource_owner_id 列の値も異なります。

1 つのセッションで実行する複数のカーソルは区別できないため、1 つのエンティティとして扱われます。

session_id値に関連付けられていない分散トランザクションは孤立したトランザクションであり、-2session_id値が割り当てられます。 詳細については、「KILL (Transact-SQL)」を参照してください。

Locks

ロックは、複数のトランザクションで同じ SQL Server リソースが同時に使用されるのを防ぐために、トランザクション中に読み取られたり変更されたりする行などにかけられます。 たとえば、あるトランザクションによってテーブルの行に排他 (X) ロックがかけられると、他のトランザクションはロックが解除されるまでその行を変更できません。 ロックを最小限にとどめるとコンカレンシーが向上し、パフォーマンスが向上します。

リソースの詳細

次の表に、 resource_associated_entity_id 列で表されるリソースの一覧を示します。

リソースの種類 リソースの説明 resource_associated_entity_id
DATABASE データベースを示します。 適用できません
ファイル データベース ファイルを示します。 このファイルは、データまたはログ ファイルのいずれかになります。 適用できません
OBJECT データベース内のオブジェクトを表します。 このオブジェクトは、データ テーブル、ビュー、ストアド プロシージャ、拡張ストアド プロシージャ、またはオブジェクト ID 付きのオブジェクトのいずれかになります。 オブジェクト ID
PAGE データ ファイル内の 1 ページを示します。 HoBt ID。 この値は、 sys.partitions.hobt_idに対応します。 PAGE リソースに対し常に HoBt ID が使用できるとは限りません。HoBt ID は呼び出し元から提供される追加情報であり、呼び出し元によってはこの情報を提供できないことがあります。
KEY インデックス内の行を示します。 HoBt ID。 この値は、 sys.partitions.hobt_idに対応します。
EXTENT データ ファイルのエクステントを示します。 エクステントは連続する 8 ページのグループです。 適用できません
RID ヒープ内の物理的な行を示します。 HoBt ID。 この値は、 sys.partitions.hobt_idに対応します。 RID リソースに対し常に HoBt ID が使用できるとは限りません。HoBt ID は呼び出し元から提供される追加情報であり、呼び出し元によってはこの情報を提供できないことがあります。
APPLICATION アプリケーション固有のリソースを示します。 適用なし
METADATA メタデータの情報を示します。 適用なし
HOBT ヒープまたは B-Tree を示します。 これは、基本的なアクセス パス構造です。 HoBt ID。 この値は、 sys.partitions.hobt_idに対応します。
OIB オンライン インデックス (再) ビルドを表します。 HoBt ID。 この値は、 sys.partitions.hobt_idに対応します。
ALLOCATION_UNIT インデックス パーティションなどの関連ページのセットを示します。 各アロケーション ユニットは、1 つの IAM (Index Allocation Map) チェーンを対象としています。 アロケーション ユニット ID。 この値は、 sys.allocation_units.allocation_unit_idに対応します。
ROW_GROUP 列ストア行グループを表します。
XACT トランザクションを表します。 最適化されたロックが有効な場合に発生します。 次の 2 つのシナリオがあります。

シナリオ 1 (所有者)
- リソースの種類: XACT
- リソースの説明: TID ロックが保持されている場合、 resource_descriptionXACT リソースです。
- リソースに関連付けられたエンティティ ID: resource_associated_entity_id は 0 です。

シナリオ 2 (ウェイター)
- リソースの種類: XACT
- リソースの説明: 要求が TID ロックを待機すると、 resource_descriptionXACT リソースの後に基になる KEY または RID リソースが続きます。
- リソースに関連付けられたエンティティ ID: resource_associated_entity_id は基になる HoBt ID です。

Note

ドキュメントでは、一般的にインデックスを参照して B ツリーという用語を使用します。 行ストア インデックスでは、データベース エンジンは B+ ツリーを実装します。 これは、メモリ最適化テーブルの列ストア インデックスまたはインデックスには適用されません。 詳細については、「SQL Server と Azure SQL のインデックスのアーキテクチャとデザイン ガイド」を参照してください。

次の表は、各リソースの種類に関連付けられるサブタイプの一覧です。

リソースのサブタイプ 同期
ALLOCATION_UNIT.BULK_OPERATION_PAGE 一括操作で使用されるあらかじめ割り当てられたページ。
ALLOCATION_UNIT.PAGE_COUNT 遅延削除操作での、アロケーション ユニットのページ数の統計。
DATABASE.BULKOP_BACKUP_DB データベースのバックアップと一括操作。
DATABASE.BULKOP_BACKUP_LOG データベース ログのバックアップと一括操作。
DATABASE.CHANGE_TRACKING_CLEANUP 変更の追跡のクリーンアップ タスク。
DATABASE.CT_DDL データベースおよびテーブルレベルの変更の追跡の DDL 操作。
DATABASE.CONVERSATION_PRIORITY CREATE BROKER PRIORITY などの Service Broker のメッセージ交換の優先度操作。
DATABASE.DDL データ定義言語 (DDL) 操作と、削除などのファイル グループ操作。
DATABASE.ENCRYPTION_SCAN TDE 暗号化の同期。
DATABASE.PLANGUIDE プラン ガイドの同期。
DATABASE.RESOURCE_GOVERNOR_DDL ALTER RESOURCE POOL などのリソース ガバナー操作の DDL 操作。
DATABASE.SHRINK データベースの圧縮操作。
DATABASE.STARTUP データベースの起動を同期するときに使用します。
FILE.SHRINK ファイルの圧縮操作。
HOBT.BULK_OPERATION SNAPSHOT、READ COMMITTED、および行のバージョン管理を使用する READ COMMITTED の分離レベルでの、ヒープが最適化された一括読み込み操作と同時実行スキャン。
HOBT.INDEX_REORGANIZE ヒープまたはインデックスの再構成操作。
OBJECT.COMPILE ストアド プロシージャのコンパイル。
OBJECT.INDEX_OPERATION インデックス操作。
OBJECT.UPDSTATS テーブル上の統計の更新。
METADATA.ASSEMBLY 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ASSEMBLY_CLR_NAME 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ASSEMBLY_TOKEN 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ASYMMETRIC_KEY 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.AUDIT 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.AUDIT_ACTIONS 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.AUDIT_SPECIFICATION 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.AVAILABILITY_GROUP 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CERTIFICATE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CHILD_INSTANCE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.COMPRESSED_FRAGMENT 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.COMPRESSED_ROWSET 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CONVERSTATION_ENDPOINT_RECV 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CONVERSTATION_ENDPOINT_SEND 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CONVERSATION_GROUP 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CONVERSATION_PRIORITY 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CREDENTIAL 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CRYPTOGRAPHIC_PROVIDER 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DATA_SPACE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DATABASE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DATABASE_PRINCIPAL 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DB_MIRRORING_SESSION 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DB_MIRRORING_WITNESS 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DB_PRINCIPAL_SID 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ENDPOINT 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ENDPOINT_WEBMETHOD 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.EXPR_COLUMN 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.EXPR_HASH 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.FULLTEXT_CATALOG 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.FULLTEXT_INDEX 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.FULLTEXT_STOPLIST 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.INDEX_EXTENSION_SCHEME 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.INDEXSTATS 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.INSTANTIATED_TYPE_HASH 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.MESSAGE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.METADATA_CACHE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PARTITION_FUNCTION 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PASSWORD_POLICY 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PERMISSIONS 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PLAN_GUIDE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PLAN_GUIDE_HASH 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PLAN_GUIDE_SCOPE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.QNAME 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.QNAME_HASH 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.REMOTE_SERVICE_BINDING 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ROUTE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SCHEMA 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SECURITY_CACHE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SECURITY_DESCRIPTOR 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SEQUENCE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVER_EVENT_SESSIONS 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVER_PRINCIPAL 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVICE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVICE_BROKER_GUID 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVICE_CONTRACT 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVICE_MESSAGE_TYPE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.STATS 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SYMMETRIC_KEY 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.USER_TYPE 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.XML_COLLECTION 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.XML_COMPONENT 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.XML_INDEX_QNAME 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

次の表に、各リソースの種類の resource_description 列の形式を示します。

リソース Format 説明
DATABASE 適用なし データベース ID は、 resource_database_id 列で既に使用できます。
FILE <file_id> このリソースが示すファイルの ID。
OBJECT <object_id> このリソースが示すオブジェクトの ID。 このオブジェクトには、テーブルだけでなく、 sys.objectsにリストされている任意のオブジェクトを指定できます。
ページ <file_id>:<page_in_file> このリソースが示すページの、ファイルおよびページ ID。
KEY <hash_value> このリソースが示す行のキー列のハッシュ。
EXTENT <file_id>:<page_in_files> このリソースが示すエクステントの、ファイルおよびページ ID。 エクステント ID は、そのエクステント内にある最初のページのページ ID と同じになります。
RID <file_id>:<page_in_file>:<row_on_page> このリソースが示すページ ID と、行の行 ID。 関連付けられているオブジェクト ID が 99 の場合、このリソースは、IAM チェーンの最初の IAM ページにある 8 つの混合ページ スロットのいずれかを表します。
アプリケーション <DbPrincipalId>:<up to 32 characters>:(<hash_value>) アプリケーションのロック リソースのスコープに使用する、データベース プリンシパルの ID。 アプリケーションのロック リソースに対応する、最大 32 文字のリソース文字列も含まれます。 場合によっては、完全な文字列が使用できなくなったため、2 文字しか表示できません。 この動作は、データベース復旧時、復旧処理の一部として再取得されるアプリケーション ロックに関してのみ発生します。 ハッシュ値は、このアプリケーション ロック リソースに対応する、完全リソース文字列のハッシュを示します。
HOBT 適用なし HoBt ID は、 resource_associated_entity_idとして含まれています。
ALLOCATION_UNIT 適用なし 割り当てユニット ID は、 resource_associated_entity_idとして含まれます。
XACT <dbid>:<XdesId low>:<XdesId high> TID (トランザクション ID) リソース。 最適化されたロックが有効な場合に発生します。
XACT キー [XACT <dbid>:<XdesId low>:<XdesId High>] KEY (<hash_value>) インデックス KEY オブジェクトを使用して、トランザクションが待機している基になるリソース。 最適化されたロックが有効な場合に発生します。
XACT RID [XACT <dbid>:<XdesId low>:<XdesId High>] RID (<file_id>:<page_in_file>:<row_on_page>) ヒープ RID オブジェクトを使用して、トランザクションが待機している基になるリソース。 最適化されたロックが有効な場合に発生します。
METADATA.ASSEMBLY assembly_id = A 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ASSEMBLY_CLR_NAME $qname_id = Q 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ASSEMBLY_TOKEN assembly_id = A, $token_id 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ASSYMMETRIC_KEY asymmetric_key_id = A 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.AUDIT audit_id = A 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.AUDIT_ACTIONS device_id = D, major_id = M 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.AUDIT_SPECIFICATION audit_specification_id = A 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.AVAILABILITY_GROUP availability_group_id = A 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CERTIFICATE certificate_id = C 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CHILD_INSTANCE $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.COMPRESSED_FRAGMENT object_id = O , compressed_fragment_id = C 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.COMPRESSED_ROW object_id = O 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CONVERSTATION_ENDPOINT_RECV $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CONVERSTATION_ENDPOINT_SEND $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CONVERSATION_GROUP $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CONVERSATION_PRIORITY conversation_priority_id = C 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CREDENTIAL credential_id = C 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.CRYPTOGRAPHIC_PROVIDER provider_id = P 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DATA_SPACE data_space_id = D 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DATABASE database_id = D 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DATABASE_PRINCIPAL principal_id = P 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DB_MIRRORING_SESSION database_id = D 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DB_MIRRORING_WITNESS $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.DB_PRINCIPAL_SID $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ENDPOINT endpoint_id = E 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ENDPOINT_WEBMETHOD $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.FULLTEXT_CATALOG fulltext_catalog_id = F 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.FULLTEXT_INDEX object_id = O 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.EXPR_COLUMN object_id = O, column_id = C 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.EXPR_HASH object_id = O, $hash = H 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.FULLTEXT_CATALOG fulltext_catalog_id = F 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.FULLTEXT_INDEX object_id = O 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.FULLTEXT_STOPLIST fulltext_stoplist_id = F 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.INDEX_EXTENSION_SCHEME index_extension_id = I 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.INDEXSTATS object_id = Oindex_id、または stats_id = I 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.INSTANTIATED_TYPE_HASH user_type_id = U, hash = H 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.MESSAGE message_id = M 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.METADATA_CACHE $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PARTITION_FUNCTION function_id = F 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PASSWORD_POLICY principal_id = P 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PERMISSIONS class = C 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PLAN_GUIDE plan_guide_id = P 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PLAN_GUIDE_HASH $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.PLAN_GUIDE_SCOPE scope_id = S 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.QNAME $qname_id = Q 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.QNAME_HASH $qname_scope_id = Q, $qname_hash = H 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.REMOTE_SERVICE_BINDING remote_service_binding_id = R 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.ROUTE route_id = R 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SCHEMA schema_id = S 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SECURITY_CACHE $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SECURITY_DESCRIPTOR sd_id = S 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SEQUENCE $seq_type = S, object_id = O 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVER server_id = S 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVER_EVENT_SESSIONS event_session_id = E 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVER_PRINCIPAL principal_id = P 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVICE service_id = S 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVICE_BROKER_GUID $hash = H1:H2:H3 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVICE_CONTRACT service_contract_id = S 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SERVICE_MESSAGE_TYPE message_type_id = M 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.STATS object_id = O, stats_id = S 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.SYMMETRIC_KEY symmetric_key_id = S 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.USER_TYPE user_type_id = U 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.XML_COLLECTION xml_collection_id = X 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.XML_COMPONENT xml_component_id = X 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
METADATA.XML_INDEX_QNAME object_id = O, $qname_id = Q 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

A. 他のツールでsys.dm_tran_locksを使用する

次の例では、更新操作が別のトランザクションによってブロックされたシナリオを処理します。 sys.dm_tran_locksやその他のツールを使用すると、リソースのロックに関する情報が提供されます。

USE tempdb;
GO

-- Create test table and index.
CREATE TABLE t_lock
    (
    c1 int, c2 int
    );
GO

CREATE INDEX t_lock_ci on t_lock(c1);
GO

-- Insert values into test table
INSERT INTO t_lock VALUES (1, 1);
INSERT INTO t_lock VALUES (2, 2);
INSERT INTO t_lock VALUES (3, 3);
INSERT INTO t_lock VALUES (4, 4);
INSERT INTO t_lock VALUES (5, 5);
INSERT INTO t_lock VALUES (6, 6);
GO

-- Session 1
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

BEGIN TRAN
    SELECT c1
        FROM t_lock
        WITH(holdlock, rowlock);

-- Session 2
BEGIN TRAN
    UPDATE t_lock SET c1 = 10;

次のクエリでは、ロック情報が表示されます。 <dbid>の値は、sys.databasesdatabase_idに置き換える必要があります。

SELECT resource_type, resource_associated_entity_id,
    request_status, request_mode,request_session_id,
    resource_description
    FROM sys.dm_tran_locks
    WHERE resource_database_id = <dbid>;

次のクエリでは、前のクエリからの resource_associated_entity_id を使用してオブジェクトの情報を返します。 このクエリは、オブジェクトを含むデータベースに接続して実行する必要があります。

SELECT object_name(object_id), *
    FROM sys.partitions
    WHERE hobt_id=<resource_associated_entity_id> ;

次のクエリは、ブロック情報を示しています。

SELECT
    t1.resource_type,
    t1.resource_database_id,
    t1.resource_associated_entity_id,
    t1.request_mode,
    t1.request_session_id,
    t2.blocking_session_id
FROM sys.dm_tran_locks as t1
INNER JOIN sys.dm_os_waiting_tasks as t2
    ON t1.lock_owner_address = t2.resource_address;

リソースを解放するには、トランザクションをロールバックします。

-- Session 1
ROLLBACK;
GO

-- Session 2
ROLLBACK;
GO

次の例では、 session_id を Windows スレッド ID に関連付ける情報を返します。 スレッドのパフォーマンスは、Windows パフォーマンス モニターで監視できます。 このクエリは、現在スリープ状態の session_id を返しません。

SELECT STasks.session_id, SThreads.os_thread_id
FROM sys.dm_os_tasks AS STasks
INNER JOIN sys.dm_os_threads AS SThreads
    ON STasks.worker_address = SThreads.worker_address
WHERE STasks.session_id IS NOT NULL
ORDER BY STasks.session_id;
GO