sys.dm_tran_transactions_snapshot (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
各スナップショット トランザクションの開始時にアクティブなトランザクションの 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
の 2 つが表示されます。 snapshot_sequence_num
列は、各スナップショット トランザクションの開始時にアクティブ状態にあったトランザクションのトランザクション シーケンス番号です。
出力は、2 つのアクティブなトランザクション XSN-57 と XSN-58 が実行されている間にスナップショット トランザクション XSN-59 が開始されることを示しています。 XSN-57 または XSN-58 がデータ変更を行った場合、XSN-59 は変更を無視し、行のバージョン管理を使用してデータベースのトランザクション整合性ビューを維持します。
スナップショット トランザクション XSN-60 は、XSN-57 および XSN-58 および XSN 59 によって行われたデータ変更も無視します。
返されるテーブル
列名 | データ型 | 説明 |
---|---|---|
transaction_sequence_num | bigint | スナップショット トランザクションのトランザクション シーケンス番号 (XSN)。 |
snapshot_id | int | 行のバージョン管理を使用して読み取りコミットで開始された各 Transact-SQL ステートメントのスナップショット ID。 この値は、行のバージョン管理を使用して読み取りコミット済みで実行される各クエリをサポートするデータベースのトランザクション整合性ビューを生成するために使用されます。 |
snapshot_sequence_num | bigint | スナップショット トランザクションが開始したときに有効となっていたトランザクション シーケンス番号。 |
アクセス許可
SQL Server と SQL Managed Instance では、VIEW SERVER STATE
アクセス許可が必要です。
SQL Database の Basic、S0、S1 サービス対象、および Elastic Pool のデータベースの場合、サーバー管理者アカウント、Microsoft Entra 管理者アカウント、または ##MS_ServerStateReader##
サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE
アクセス許可または ##MS_ServerStateReader##
サーバー ロールのメンバーシップのいずれかが必要です。
SQL Server 2022 以降でのアクセス許可
サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。
解説
スナップショット トランザクションが開始されると、データベース エンジンは、その時点でアクティブになっているすべてのトランザクションを記録します。 sys.dm_tran_transactions_snapshot は、現在アクティブなすべてのスナップショット トランザクションに関するこの情報を報告します。
各トランザクションは、トランザクションの開始時に割り当てられるトランザクション シーケンス番号によって識別されます。 トランザクションは、BEGIN TRANSACTION または BEGIN WORK ステートメントが実行されたときに開始されますが、 ただし、データベース エンジンは、BEGIN TRANSACTION または BEGIN WORK ステートメントの後にデータにアクセスする最初の Transact-SQL ステートメントを実行してトランザクション シーケンス番号を割り当てます。 トランザクション シーケンス番号は 1 ずつ増加します。
参照
動的管理ビューと動的管理関数 (Transact-SQL)
トランザクション関連の動的管理ビューおよび関数 (Transact-SQL)