sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)
適用対象: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Server インスタンスでは、この動的管理ビューは、行バージョンを生成またはアクセスする可能性のあるすべてのアクティブなトランザクションの仮想テーブルを返します。 トランザクションは、次の条件を 1 つ以上満たします。
ALLOW_SNAPSHOT_ISOLATION データベース オプションと READ_COMMITTED_SNAPSHOT データベース オプションのいずれかまたは両方が ON に設定されている場合、
スナップショット分離レベルで実行されているトランザクションごとに 1 行、または行のバージョン管理を使用する読み取りコミットされた分離レベルがあります。
現在のデータベースに行バージョンを作成するトランザクションごとに、1 行のデータが存在する。 たとえば、トランザクションでは、現在のデータベース内の行を更新または削除することで、行バージョンが生成されます。
トリガーが起動される場合、トリガーが実行されるトランザクションごとに 1 行のデータが存在する。
オンライン インデックス処理中に、インデックスを作成しているトランザクションごとに 1 行のデータが存在する。
複数のアクティブな結果セット (MARS) セッションが有効になっている場合、行バージョンにアクセスしているトランザクションごとに 1 つの行があります。
この動的管理ビューには、システム トランザクションは含まれません。
Note
これを Azure Synapse Analytics または Analytics Platform System (PDW) から呼び出すには、 sys.dm_pdw_nodes_tran_active_snapshot_database_transactionsという名前を使用します。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
構文
sys.dm_tran_active_snapshot_database_transactions
返されるテーブル
列名 | データ型 | 説明 |
---|---|---|
transaction_id | bigint | トランザクションに割り当てられている一意な識別番号。 トランザクション ID は、主にロック操作でトランザクションを識別するために使用されます。 |
transaction_sequence_num | bigint | トランザクション シーケンス番号。 これは、トランザクションの開始時に割り当てられる一意のシーケンス番号です。 バージョン レコードを生成せず、スナップショット スキャンを行わないトランザクションには、トランザクション シーケンス番号は割り当てられません。 |
commit_sequence_num | bigint | トランザクションが完了 (コミットまたは停止) したことを示すシーケンス番号。 アクティブなトランザクションの場合、値は NULL です。 |
is_snapshot | int | 0 = スナップショット分離トランザクションではありません。 1 = スナップショット分離トランザクションです。 |
session_id | int | トランザクションを開始したセッションの ID。 |
first_snapshot_sequence_num | bigint | スナップショットの作成時にアクティブだったトランザクションの最小トランザクション シーケンス番号。 実行時に、スナップショット トランザクションは、その時点でアクティブなすべてのトランザクションのスナップショットを取得します。 スナップ以外のトランザクションの場合、この列には 0 が表示されます。 |
max_version_chain_traversed | int | トランザクション全体で一貫性のあるバージョンを検索するためにスキャンされるバージョン チェーンの最大長。 |
average_version_chain_traversed | real | 走査されるバージョン チェーン内の行バージョンの平均数。 |
elapsed_time_seconds | bigint | トランザクションがトランザクション シーケンス番号を取得してからの経過時間。 |
pdw_node_id | int | 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW) このディストリビューションがオンになっているノードの識別子。 |
アクセス許可
SQL Server と SQL Managed Instance では、VIEW SERVER STATE
アクセス許可が必要です。
SQL Database Basic、S0、および S1 サービス目標、および弾性プール内のデータベースの場合サーバー管理者アカウント、Microsoft Entra 管理者アカウント、または##MS_ServerStateReader##
サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE
アクセス許可または ##MS_ServerStateReader##
サーバー ロールのメンバーシップのいずれかが必要です。
SQL Server 2022 以降でのアクセス許可
サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。
解説
sys.dm_tran_active_snapshot_database_transactions は、トランザクション シーケンス番号 (XSN) が割り当てられているトランザクションを報告します。 XSN は、トランザクションが最初にバージョン ストアにアクセスするときに割り当てられます。 行のバージョン管理を使用するスナップショット分離または READ COMMITTED 分離が有効なデータベースにおいて、XSN がトランザクションに割り当てられるときの例を次に示します。
トランザクションがシリアル化可能な分離レベルで実行されている場合、トランザクションが UPDATE 操作などのステートメントを最初に実行したときに XSN が割り当てられ、行バージョンが作成されます。
スナップショット分離の下でトランザクションが実行されている場合、SELECT 操作を含むデータ操作言語 (DML) ステートメントが実行されると、XSN が割り当てられます。
トランザクション シーケンス番号は、データベース エンジンのインスタンスで開始されるトランザクションごとに順次インクリメントされます。
例
次の例では、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,
commit_sequence_num,
is_snapshot session_id,
first_snapshot_sequence_num,
max_version_chain_traversed,
average_version_chain_traversed,
elapsed_time_seconds
FROM sys.dm_tran_active_snapshot_database_transactions;
結果セットは次のようになります。
transaction_id transaction_sequence_num commit_sequence_num
-------------- ------------------------ -------------------
9295 57 NULL
9324 58 NULL
9387 59 NULL
9400 60 NULL
is_snapshot session_id first_snapshot_sequence_num
----------- ----------- ---------------------------
0 54 0
0 53 0
1 52 57
1 51 57
max_version_chain_traversed average_version_chain_traversed
--------------------------- -------------------------------
0 0
0 0
1 1
1 1
elapsed_time_seconds
--------------------
419
397
359
333
次の情報は、 sys.dm_tran_active_snapshot_database_transactionsからの結果を評価します。
XSN-57: このトランザクションはスナップショット分離の下で実行されていないため、
is_snapshot
値とfirst_snapshot_sequence_num
は0
。transaction_sequence_num
は、一方または両方のALLOW_SNAPSHOT_ISOLATIONまたはREAD_COMMITTED_SNAPSHOTデータベース オプションが ON であるため、トランザクション シーケンス番号がこのトランザクションに割り当てられていることを示します。XSN-58: このトランザクションはスナップショット分離で実行されておらず、XSN-57 の同じ情報が適用されます。
XSN-59: これは、スナップショット分離の下で実行されている最初のアクティブなトランザクションです。 このトランザクションは、
first_snapshot_sequence_num
で示されているように、XSN-57 より前にコミットされたデータを読み取ります。 このトランザクションの出力では、1 行にスキャンされるバージョン チェーンの最大長が1
で、アクセスした行ごとに平均で1
つのバージョンがスキャンされていることも示されています。 これは、トランザクション XSN-57、XSN-58、および XSN-60 では行が変更されずコミットされていないことを表します。XSN-60: これは、スナップショット分離の下で実行されている 2 番目のトランザクションです。 出力では、XSN-59 と同じ情報が示されます。
参照
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
動的管理ビューと動的管理関数 (Transact-SQL)
トランザクション関連の動的管理ビューおよび関数 (Transact-SQL)