sys.dm_tran_transactions_snapshot (Transact-SQL)

各スナップショット トランザクションの開始時にアクティブになっているトランザクションの sequence_number に対して仮想テーブルを返します。このビューで返される情報を基に、次のことを確認できます。

  • 現在アクティブなスナップショット トランザクションの数。

  • 特定のスナップショット トランザクションで無視されるデータ変更。スナップショット トランザクションの開始時にアクティブ状態にあったトランザクションによって行われるすべてのデータ変更は、そのトランザクションのコミット後も、スナップショット トランザクションでは無視されます。

たとえば、次の sys.dm_tran_transactions_snapshot からの出力を考えてみます。

transaction_sequence_num snapshot_id snapshot_sequence_num
------------------------ ----------- ---------------------
59                       0           57
59                       0           58
60                       0           57
60                       0           58
60                       0           59
60                       3           57
60                       3           58
60                       3           59
60                       3           60

transaction_sequence_num 列は、現在のスナップショット トランザクションのトランザクション シーケンス番号 (XSN) です。ここでは、59 および 60 が出力されています。snapshot_sequence_num 列は、各スナップショット トランザクションの開始時にアクティブ状態にあったトランザクションのトランザクション シーケンス番号です。

この出力では、2 つのアクティブなスナップショット トランザクション (XSN-57 および XSN-58) の実行中に、スナップショット トランザクション XSN-59 が開始したことが示されています。XSN-57 または XSN-58 でデータ変更が行われた場合、XSN-59 では変更が無視され、行バージョン管理によってトランザクション全体で一貫性のあるデータベース ビューが維持されます。

スナップショット トランザクション XSN-60 では、XSN-57 と XSN-58 だけでなく XSN-59 によって行われたデータ変更も無視されます。

構文

dm_tran_transactions_snapshot

返されるテーブル

列名

データ型

説明

transaction_sequence_num

bigint

スナップショット トランザクションのトランザクション シーケンス番号 (XSN)。

snapshot_id

int

行バージョン管理を使用し、READ COMMITTED で開始された各 Transact-SQL ステートメントのスナップショット ID。この ID を使用して、トランザクション全体で一貫性のあるデータベース ビューを生成し、行バージョンを使用する READ COMMITTED で実行される各クエリをサポートできます。

snapshot_sequence_num

bigint

スナップショット トランザクションが開始したときに有効となっていたトランザクション シーケンス番号。

権限

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

説明

スナップショット トランザクションの開始時、データベース エンジンでは、その時点でアクティブなすべてのトランザクションが記録されます。sys.dm_tran_transactions_snapshot では、現在有効なすべてのスナップショット トランザクションについて、この情報がレポートされます。

各トランザクションは、トランザクションの開始時に割り当てられたトランザクション シーケンス番号によって識別されます。トランザクションは、BEGIN TRANSACTION または BEGIN WORK ステートメントが実行されたときに開始されますが、トランザクション シーケンス番号は、BEGIN TRANSACTION または BEGIN WORK ステートメントの後、最初にデータにアクセスする Transact-SQL ステートメントが実行されたときにデータベース エンジンによって割り当てられます。トランザクション シーケンス番号は 1 ずつ増加します。