次の方法で共有


sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

適用対象: SQL Server Azure SQL データベース 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 の BasicS0S1 サービス対象、および Elastic Pool のデータベースの場合、サーバー管理者アカウント、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_num0transaction_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)