sys.dm_tran_current_transaction (Transact-SQL)

現在のセッションにおけるトランザクションの状態情報を表す 1 行を返します。

構文

sys.dm_tran_current_transaction

返されるテーブル

列名

データ型

説明

transaction_id

bigint

現在のスナップショットのトランザクション ID。

transaction_sequence_num

bigint

レコード バージョンを生成するトランザクションのシーケンス番号。

transaction_is_snapshot

bit

スナップショット分離の状態。トランザクションがスナップショット分離に基づいて開始された場合、この値は 1 です。それ以外の場合は 0 になります。

first_snapshot_sequence_num

bigint

スナップショットが取得されたときにアクティブになっていたトランザクションの、最小トランザクション シーケンス番号。スナップショット トランザクションの実行時には、その時点でアクティブなすべてのトランザクションのスナップショットが取得されます。スナップショット以外のトランザクションの場合、この列は 0 になります。

last_transaction_sequence_num

bigint

グローバル シーケンス番号。この値は、システムにより生成された最後のトランザクション シーケンス番号を表します。

first_useful_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 と同じです。

次のクエリは各トランザクションのスコープ内で実行されます。

SELECT 
    transaction_id
    transaction_sequence_num
    transaction_is_snapshot
    first_snapshot_sequence_num
    last_transaction_sequence_num
    first_useful_sequence_num
  FROM sys.dm_tran_current_transaction;

XSN-59 の結果を次に示します。

transaction_id       transaction_sequence_num transaction_is_snapshot
-------------------- ------------------------ -----------------------
9387                 59                       1                       

first_snapshot_sequence_num last_transaction_sequence_num
--------------------------- -----------------------------
57                               61                      

first_useful_sequence_num
-------------------------
57

この出力は、XSN-59 がスナップショット トランザクションであり、最初のトランザクションとして XSN-57 を使用することと、XSN-57 が XSN-59 の開始時にアクティブであったことを示しています。つまり、XSN-59 では、トランザクション シーケンス番号が XSN-57 より低いトランザクションによってコミットされたデータが読み取られます。

XSN-57 の結果を次に示します。

transaction_id       transaction_sequence_num transaction_is_snapshot
-------------------- ------------------------ -----------------------
9295                 57                       0

first_snapshot_sequence_num last_transaction_sequence_num
--------------------------- -----------------------------
NULL                        61

first_useful_sequence_num
-------------------------
57

XSN-57 はスナップショット トランザクションではないため、first_snapshot_sequence_num は NULL になります。