sys.dm_tran_current_snapshot (Transact-SQL)

現在のスナップショット トランザクションの開始時点でアクティブになっている、すべてのトランザクションを表示する仮想テーブルを返します。現在のトランザクションがスナップショット トランザクションではない場合、この関数は行を返しません。sys.dm_tran_current_snapshot は、sys.dm_tran_transactions_snapshot と類似していますが、現在のスナップショット トランザクションのアクティブなトランザクションだけを返す点が異なります。

構文

sys.dm_tran_current_snapshot

返されるテーブル

列名

データ型

説明

transaction_sequence_num

bigint

アクティブなトランザクションのシーケンス番号。

権限

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

次の例では、4 つの同時実行トランザクションが存在するテスト シナリオを使用します。これらのトランザクションはそれぞれトランザクション シーケンス番号 (XSN) で識別され、ALLOW_SNAPSHOT_ISOLATION オプションと READ_COMMITTED_SNAPSHOT オプションが ON に設定されているデータベース内で実行されます。実行されるトランザクションは次のとおりです。

  • XSN-57。SERIALIZABLE 分離での更新操作です。

  • XSN-58。XSN-57 と同じです。

  • XSN-59。スナップショット分離での選択操作です。

  • XSN-60。XSN-59 と同じです。

次のクエリは XSN-59 のスコープ内で実行されます。

SELECT 
    transaction_sequence_num
  FROM sys.dm_tran_current_snapshot;

以下に結果セットを示します。

transaction_sequence_num
------------------------
57
58

この結果は、スナップショット トランザクション XSN-59 の開始時に XSN-57 と XSN-58 がアクティブであったことを示しています。XSN-57 と XSN-58 がコミットまたはロールバックした後も、スナップショットが終了するまで、結果は変わりません。

次に、同じクエリを XSN-60 のスコープ内で実行します。

以下に結果セットを示します。

transaction_sequence_num
------------------------
57
58
59

XSN-60 の出力には、XSN-59 の場合と同じトランザクションが含まれていますが、XSN-60 の開始時にアクティブであった XSN-59 も含まれています。