次の方法で共有


sys.dm_tran_locks

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

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

列名 データ型 説明

resource_type

nvarchar(120)

リソースの種類。値は DATABASE、FILE、OBJECT、PAGE、KEY、EXTENT、RID、APPLICATION、METADATA、HOBT、ALLOCATION_UNIT のいずれかです。

resource_subtype

nvarchar(120)

resource_type のサブタイプ。親タイプのサブタイプ化されていないロックを保持せずに、サブタイプのロックを取得することができます。サブタイプが異なる場合でも、サブタイプ同士や、サブタイプ化されていない親タイプとの競合は発生しません。また、すべての種類のリソースにサブタイプが含まれるわけではありません。

resource_database_id

int

リソースのスコープとなっているデータベースの ID。ロック マネージャによって処理されるすべてのリソースのスコープは、このデータベース ID に基づいて決定されます。

resource_description

nvarchar(512)

別のリソース列からは使用できない情報のみを含むリソースの説明。

resource_associated_entity_id

bigint

リソースが関連付けられているデータベース内のエンティティの ID。この ID はリソースの種類に応じて、オブジェクト ID、Hobt ID、またはアロケーション ユニット ID になります。

resource_lock_partition

int

ロック リソースがパーティション分割されている場合の、ロック パーティションの ID。パーティション分割されていないロック リソースの値は 0 です。

request_mode

nvarchar(120)

要求のモード。許可された要求については許可モード、待機中の要求については要求中モードになります。

request_type

nvarchar(120)

要求の種類。値は LOCK です。

request_status

nvarchar(120)

この要求の現在の状態。値は GRANTED、CONVERT、または WAIT です。

request_reference_count

smallint

同じ要求元がこのリソースを要求した回数の概数。

request_lifetime

int

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

request_session_id

int

要求を現在所有するセッション ID。所有セッション ID は、分散トランザクションとバインドされたトランザクションでは異なります。値が -2 の場合、その要求が孤立した分散トランザクションに属することを示します。値が -3 の場合、その要求が遅延復旧トランザクションに属することを示します。遅延復旧トランザクションとは、たとえば、ロールバックが正常に完了しなかったためにロールバックの復旧を遅延したトランザクションのことです。

request_exec_context_id

int

要求を現在所有するプロセスの、実行コンテキスト ID。

request_request_id

int

要求を現在所有するプロセスの要求 ID (バッチ ID)。この値は、トランザクションに対する複数のアクティブな結果セット (MARS) 接続が変わるたびに変化します。

request_owner_type

nvarchar(120)

要求を所有するエンティティの種類。ロック マネージャの要求は、さまざまな種類のエンティティで所有されます。次の値をとります。

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

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

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

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

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

request_owner_id

bigint

この要求の特定の所有者の ID。この値は、この ID がトランザクション ID となっているトランザクションにのみ使用されます。

request_owner_guid

uniqueidentifier

この要求の特定の所有者の GUID。この値は、分散トランザクションの MS DTC GUID に対応する場合に、そのトランザクションによってのみ使用されます。

request_owner_lockspace_id

nvarchar(64)

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。この値は、要求元のロック領域 ID を示します。ロック領域 ID によって、2 つの要求元の間に互換性があり、互いに競合しないモードでロックを許可できるかどうかを判断できます。

lock_owner_address

varbinary(8)

要求を追跡するときに使用される内部データ構造のメモリ アドレス。この列は sys.dm_os_waiting_tasksresource_address 列と結合できます。

権限

サーバーに対する VIEW SERVER STATE 権限が必要です。

解説

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

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

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

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

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

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

1 つのセッション 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 がテーブル 1 に共有ロックを保持しており、セッション S1 で実行中のトランザクション T1 もテーブル 1 に共有ロックを保持しているとします。この場合、sys.dm_tran_locks で返される resource_description 列には、同じリソースの 2 つのインスタンスが表示されます。request_owner_type 列には、1 つのインスタンスがセッションとして表示され、もう 1 つのインスタンスがトランザクションとして表示されます。また、resource_owner_id 列には異なる値が設定されます。

ms190345.note(ja-jp,SQL.90).gifメモ :
1 つのセッションで実行する複数のカーソルは区別できないため、1 つのエンティティとして扱われます。 SQL Server データベース エンジンで使用されるロックの種類の詳細については、「データベース エンジンのロック」を参照してください。

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

リソースの詳細

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

リソースの種類 リソースの説明 Resource_associated_entity_id

DATABASE

データベースを示します。

適用なし

FILE

データベース ファイルを示します。このファイルは、データまたはログ ファイルのいずれかになります。

適用なし

OBJECT

データベース オブジェクトを示します。このオブジェクトは、データ テーブル、ビュー、ストアド プロシージャ、拡張ストアド プロシージャ、またはオブジェクト ID 付きのオブジェクトのいずれかになります。

Object 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 に対応します。

ALLOCATION_UNIT

インデックス パーティションなどの関連ページのセットを示します。各アロケーション ユニットは、1 つの IAM (Index Allocation Map) チェーンを対象としています。

アロケーション ユニット ID。この値は sys.allocation_units.allocation_unit_id に対応します。

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

リソースのサブタイプ 同期

DATABASE.BULKOP_BACKUP_DB

データベースのバックアップと一括操作。

DATABASE.BULKOP_BACKUP_LOG

データベース ログのバックアップと一括操作。

DATABASE.DDL

データ定義言語 (DDL) 操作と、削除などのファイル グループ操作。

DATABASE.STARTUP

データベースの起動を同期するときに使用します。

TABLE.UPDSTATS

テーブル上の統計の更新。

TABLE.COMPILE

ストアド プロシージャのコンパイル。

TABLE.INDEX_OPERATION

インデックス操作。

HOBT.INDEX_REORGANIZE

ヒープまたはインデックスの再構成操作。

HOBT.BULK_OPERATION

SNAPSHOT、READ COMMITTED、および行バージョンを使用する READ COMMITTED の分離レベルでの、ヒープが最適化された一括読み込み操作と同時実行スキャン。

ALLOCATION_UNIT.PAGE_COUNT

遅延削除操作での、アロケーション ユニットのページ数の統計。

METADATA.INDEXSTATS

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.STATS

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.XML_COLLECTION

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SEQUENCE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.QNAME

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ASSEMBLY_CLR_NAME

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ASSEMBLY_TOKEN

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ASSEMBLY

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.PARTITION_FUNCTION

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DATA_SPACE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.USER_TYPE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DB_PRINCIPAL_SID

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DATABASE_PRINCIPAL

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SCHEMA

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.XML_COMPONENT

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVER

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.INSTANTIATED_TYPE_HASH

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DB_MIRRORING_SESSION

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ENDPOINT

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SECURITY_CACHE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DB_MIRRORING_WITNESS

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.CREDENTIAL

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SECURITY_DESCRIPTOR

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVICE_BROKER_GUID

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.CONVERSTATION_ENDPOINT_RECV

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DATABASE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.CONVERSATION_GROUP

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ENDPOINT_WEBMETHOD

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ASSYMMETRIC_KEY

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.FULLTEXT_CATALOG

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.FULLTEXT_INDEX

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVER_PRINCIPAL

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ROUTE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.MESSAGE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.QNAME_HASH

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVICE_MESSAGE_TYPE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.CONVERSTATION_ENDPOINT_SEND

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.CERTIFICATE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SYMMETRIC_KEY

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.XML_INDEX_QNAME

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVICE_CONTRACT

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.REMOTE_SERVICE_BINDING

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVICE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.METADATA_CACHE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

次の表は、各リソースの種類に対する resource_description 列の形式です。

リソース 形式 説明

DATABASE

適用なし。

データベース ID は resource_database_id 列で既に使用可能になっています。

FILE

<file_id>

このリソースが示すファイルの ID。

OBJECT

<object_id>

このリソースが示すオブジェクトの ID。テーブルだけでなく、sys.objects に一覧表示されるあらゆるオブジェクトが対象になります。

PAGE

<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 つの混合ページ スロットのいずれかを表すことに注意してください。

APPLICATION

<DbPrincipalId>:<upto 32 characters>:(<hash_value>)

アプリケーションのロック リソースのスコープに使用する、データベース プリンシパルの ID。アプリケーションのロック リソースに対応する、最大 32 文字のリソース文字列も含まれます。場合によっては、完全な文字列が使用できず、2 文字のみが表示されることがあります。この動作は、データベース復旧時、復旧処理の一部として再取得されるアプリケーション ロックに関してのみ発生します。ハッシュ値は、このアプリケーション ロック リソースに対応する、完全リソース文字列のハッシュを示します。

HOBT

適用なし。

resource_associated_entity_id として含まれる HoBt ID。

ALLOCATION_UNIT

適用なし。

resource_associated_entity_id として含まれるアロケーション ユニット ID。

METADATA.SEQUENCE

$seq_type = S, object_id = O

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.STATS

object_id = O, stats_id = S

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SCHEMA

schema_id = S

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.INDEXSTATS

object_id = O, index_id or stats_id = I

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DATABASE_PRINCIPAL

principal_id = P

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DB_PRINCIPAL_SID

$hash = H1:H2:H3

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.USER_TYPE

user_type_id = U

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DATA_SPACE

data_space_id = D

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.PARTITION_FUNCTION

function_id = F

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.PARTITION_FUNCTION

function_id = F

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ASSEMBLY

assembly_id = A

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ASSEMBLY_TOKEN

assembly_id = A, $token_id = T

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ASSEMBLY_CLR_NAME

$qname_id = Q

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.QNAME

$qname_id = Q

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.XML_COLLECTION

xml_collection_id = X

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.XML_COMPONENT

xml_component_id = X

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.QNAME_HASH

$qname_scope_id = Q, $qname_hash = H

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.XML_INDEX_QNAME

object_id = O, $qname_id = Q

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVICE_MESSAGE_TYPE

message_type_id = M

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVICE_CONTRACT

service_contract_id = S

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVICE

service_id = S

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.REMOTE_SERVICE_BINDING

remote_service_binding_id = R

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ROUTE

route_id = R

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.FULLTEXT_INDEX

object_id = O

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.FULLTEXT_CATALOG

fulltext_catalog_id = F

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.CONVERSATION_GROUP

conversation_group_id = C

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.CONVERSTATION_ENDPOINT_SEND

$hash = H1:H2:H3

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.CONVERSTATION_ENDPOINT_RECV

$hash = H1:H2:H3

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SYMMETRIC_KEY

symmetric_key_id = S

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.CERTIFICATE

certificate_id = C

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ASSYMMETRIC_KEY

asymmetric_key_id = A

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DATABASE

database_id = D

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.MESSAGE

message_id = M

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVER_PRINCIPAL

principal_id = P

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVER

server_id = S

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ENDPOINT

endpoint_id = E

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.ENDPOINT_WEBMETHOD

$hash = H1:H2:H3

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DB_MIRRORING_SESSION

database_id = D

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.DB_MIRRORING_WITNESS

$hash = H1:H2:H3

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVICE_BROKER_GUID

$hash = H1:H2:H3

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SERVICE_BROKER_GUID

$hash = H1:H2:H3

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.CREDENTIAL

credential_id = C

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.INSTANTIATED_TYPE_HASH

user_type_id = U, hash = H1

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SECURITY_DESCRIPTOR

sd_id = S

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.SECURITY_CACHE

$hash = H1:H2:H3

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

METADATA.METADATA_CACHE

$hash = H1:H2:H3

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

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.databases からの database_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

B. セッション情報を、オペレーティング システムのスレッドにリンクする

次の例では、セッション ID と Windows のスレッド ID を関連付ける情報を返します。スレッドのパフォーマンスは、Windows パフォーマンス モニタで監視できます。このクエリでは、現在休止しているセッション 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

参照

関連項目

sys.dm_tran_database_transactions
動的管理ビューと動的管理関数
トランザクション関連の動的管理ビューおよび関数

ヘルプおよび情報

SQL Server 2005 の参考資料の入手