sys.dm_tran_active_snapshot_database_transactions (Transact-sql)sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

インスタンスで SQL ServerSQL Server は、この動的管理ビューは、行バージョンを生成またはアクセスする可能性のあるすべてのアクティブなトランザクションの仮想テーブルを返します。In a SQL ServerSQL Server instance, this dynamic management view returns a virtual table for all active transactions that generate or potentially access row versions. トランザクションは、次の条件を 1 つ以上満たします。Transactions are included for one or more of the following conditions:

  • ALLOW_SNAPSHOT_ISOLATION データベース オプションと READ_COMMITTED_SNAPSHOT データベース オプションのいずれかまたは両方が ON に設定されている場合、When either or both ALLOW_SNAPSHOT_ISOLATION and READ_COMMITTED_SNAPSHOT database options are set to ON:

    • スナップショット分離レベルで実行されているトランザクションごとに1行、または行のバージョン管理を使用する read committed 分離レベルがあります。There is one row for each transaction that is running under snapshot isolation level, or read-committed isolation level that is using row versioning.

    • 現在のデータベースに行バージョンを作成するトランザクションごとに、1 行のデータが存在する。There is one row for each transaction that causes a row version to be created in the current database. たとえば、トランザクションでは、現在のデータベースの行を更新または削除することによって行バージョンを生成します。For example, the transaction generates a row version by updating or deleting a row in the current database.

  • トリガーが起動される場合、トリガーが実行されるトランザクションごとに 1 行のデータが存在する。When a trigger is fired, there is one row for the transaction under which the trigger is executing.

  • オンライン インデックス処理中に、インデックスを作成しているトランザクションごとに 1 行のデータが存在する。When an online indexing procedure is running, there is one row for the transaction that is creating the index.

  • 複数のアクティブな結果セット (MARS) セッションが有効になっている場合は、行バージョンにアクセスしているトランザクションごとに1つの行が存在します。When Multiple Active Results Sets (MARS) session is enabled, there is one row for each transaction that is accessing row versions.

この動的管理ビューには、システムトランザクションは含まれません。This dynamic management view does not include system transactions.

注意

またはからこれを呼び出すに Azure Synapse AnalyticsAzure Synapse AnalyticsParallel Data WarehouseParallel Data Warehousesys.dm_pdw_nodes_tran_active_snapshot_database_transactions という名前を使用します。To call this from Azure Synapse AnalyticsAzure Synapse Analytics or Parallel Data WarehouseParallel Data Warehouse, use the name sys.dm_pdw_nodes_tran_active_snapshot_database_transactions.

構文Syntax

  
sys.dm_tran_active_snapshot_database_transactions  

返されるテーブルTable Returned

列名Column name データ型Data type 説明Description
transaction_idtransaction_id bigintbigint トランザクションに割り当てられている一意な識別番号。Unique identification number assigned for the transaction. トランザクション ID は主に、ロック操作でトランザクションを識別するために使用されます。The transaction ID is primarily used to identify the transaction in locking operations.
transaction_sequence_numtransaction_sequence_num bigintbigint トランザクションのシーケンス番号。Transaction sequence number. これは、トランザクションが開始されるときに、トランザクションに割り当てられる一意のシーケンス番号です。This is a unique sequence number that is assigned to a transaction when it starts. バージョン レコードを生成せず、スナップショット スキャンを行わないトランザクションには、トランザクション シーケンス番号は割り当てられません。Transactions that do not generate version records and do not use snapshot scans will not receive a transaction sequence number.
commit_sequence_numcommit_sequence_num bigintbigint トランザクションが完了 (コミットまたは停止) したことを示すシーケンス番号。Sequence number that indicates when the transaction finishes (commits or stops). アクティブなトランザクションの場合、値は NULL です。For active transactions, the value is NULL.
is_snapshotis_snapshot intint 0 = スナップショット分離トランザクションではありません。0 = Is not a snapshot isolation transaction.

1 = スナップショット分離トランザクションです。1 = Is a snapshot isolation transaction.
session_idsession_id intint トランザクションを開始したセッションの ID。ID of the session that started the transaction.
first_snapshot_sequence_numfirst_snapshot_sequence_num bigintbigint スナップショット取得時にアクティブだったトランザクションの最小トランザクションシーケンス番号。Lowest transaction sequence number of the transactions that were active when a snapshot was taken. 実行時には、スナップショットトランザクションは、その時点でアクティブなすべてのトランザクションのスナップショットを取得します。On execution, a snapshot transaction takes a snapshot of all of the active transactions at that time. スナップショット以外のトランザクションの場合、この列には0が表示されます。For nonsnapshot transactions, this column shows 0.
max_version_chain_traversedmax_version_chain_traversed intint トランザクション全体で一貫性のあるバージョンを検索するためにスキャンされるバージョン チェーンの最大長。Maximum length of the version chain that is traversed to find the transactionally consistent version.
average_version_chain_traversedaverage_version_chain_traversed realreal 走査されるバージョンチェーン内の行バージョンの平均数。Average number of row versions in the version chains that are traversed.
elapsed_time_secondselapsed_time_seconds bigintbigint トランザクションがトランザクションシーケンス番号を取得してから経過した時間。Elapsed time since the transaction obtained its transaction sequence number.
pdw_node_idpdw_node_id intint 適用対象: Azure Synapse AnalyticsAzure Synapse AnalyticsParallel Data WarehouseParallel Data WarehouseApplies to: Azure Synapse AnalyticsAzure Synapse Analytics, Parallel Data WarehouseParallel Data Warehouse

このディストリビューションが配置されているノードの識別子。The identifier for the node that this distribution is on.

アクセス許可Permissions

SQL ServerSQL Server は、 VIEW SERVER STATE 権限が必要です。On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
SQL Database Basic、S0、S1 のサービス目標、およびエラスティックプール内のデータベースについて Server admin は、または Azure Active Directory admin アカウントが必要です。On SQL Database Basic, S0, and S1 service objectives, and for databases in elastic pools, the Server admin or an Azure Active Directory admin account is required. その他のすべての SQL Database サービスの目的で VIEW DATABASE STATE は、データベースで権限が必要になります。On all other SQL Database service objectives, the VIEW DATABASE STATE permission is required in the database.

解説Remarks

sys.dm_tran_active_snapshot_database_transactions は、トランザクションシーケンス番号 (XSN) が割り当てられているトランザクションを報告します。sys.dm_tran_active_snapshot_database_transactions reports transactions that are assigned a transaction sequence number (XSN). XSN は、トランザクションが最初にバージョンストアにアクセスしたときに割り当てられます。The XSN is assigned when the transaction first accesses the version store. 行のバージョン管理を使用するスナップショット分離または READ COMMITTED 分離が有効なデータベースにおいて、XSN がトランザクションに割り当てられるときの例を次に示します。In a database that is enabled for snapshot isolation or read committed isolation using row versioning, the examples show when an XSN is assigned to a transaction:

  • トランザクションが serializable 分離レベルで実行されている場合、更新操作などのステートメントをトランザクションが最初に実行するときに XSN が割り当てられ、行バージョンが作成されます。If a transaction is running under serializable isolation level, an XSN is assigned when the transaction first executes a statement, such as an UPDATE operation, that causes a row version to be created.

  • トランザクションがスナップショット分離で実行されている場合、SELECT 操作を含むデータ操作言語 (DML) ステートメントが実行されると、XSN が割り当てられます。If a transaction is running under snapshot isolation, an XSN is assigned when any data manipulation language (DML) statement, including a SELECT operation, is executed.

トランザクション シーケンス番号は、データベース エンジンDatabase Engine インスタンスでトランザクションが開始されるたびに増分されます。Transaction sequence numbers are serially incremented for each transaction that is started in an instance of the データベース エンジンDatabase Engine.

Examples

次の例では、4 つの同時実行トランザクションが存在するテスト シナリオを使用します。これらのトランザクションはそれぞれトランザクション シーケンス番号 (XSN) で識別され、ALLOW_SNAPSHOT_ISOLATION オプションと READ_COMMITTED_SNAPSHOT オプションが ON に設定されているデータベース内で実行されます。The following example uses a test scenario in which four concurrent transactions, each identified by a transaction sequence number (XSN), are running in a database that has the ALLOW_SNAPSHOT_ISOLATION and READ_COMMITTED_SNAPSHOT options set to ON. 実行されるトランザクションは次のとおりです。The following transactions are running:

  • XSN-57。SERIALIZABLE 分離での更新操作です。XSN-57 is an update operation under serializable isolation.

  • XSN-58 は、XSN-57 と同じです。XSN-58 is the same as XSN-57.

  • XSN-59 はスナップショット分離の選択操作ですXSN-59 is a select operation under snapshot isolation

  • XSN-60 は XSN-59 と同じです。XSN-60 is same as XSN-59.

次のクエリが実行されます。The following query is executed.

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;  

結果セットは次のようになります。Here is the result set.

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 の結果を評価します。The following information evaluates the results from sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57: このトランザクションはスナップショット分離で実行されていないため、 is_snapshot 値と first_snapshot_sequence_num0 です。XSN-57: Because this transaction is not running under snapshot isolation, the is_snapshot value and first_snapshot_sequence_num are 0. transaction_sequence_num ALLOW_SNAPSHOT_ISOLATION または READ_COMMITTED_SNAPSHOT データベースオプションのいずれかまたは両方がオンになっているため、トランザクションシーケンス番号がこのトランザクションに割り当てられていることを示します。transaction_sequence_num shows that a transaction sequence number has been assigned to this transaction, because one or both ALLOW_SNAPSHOT_ISOLATION or READ_COMMITTED_SNAPSHOT database options are ON.

  • XSN-58: このトランザクションはスナップショット分離で実行されていません。 XSN-57 についても同じ情報が適用されます。XSN-58: This transaction is not running under snapshot isolation and the same information for XSN-57 applies.

  • XSN-59: これは、スナップショット分離で実行されている最初のアクティブなトランザクションです。XSN-59: This is the first active transaction that is running under snapshot isolation. このトランザクションは、によって示されているように、XSN-57 より前にコミットされたデータを読み取り first_snapshot_sequence_num ます。This transaction reads data that is committed before XSN-57, as indicated by first_snapshot_sequence_num. このトランザクションの出力では、1 行にスキャンされるバージョン チェーンの最大長が 1 で、アクセスした行ごとに平均で 1 つのバージョンがスキャンされていることも示されています。The output for this transaction also shows the maximum version chain that is traversed for a row is 1 and has traversed an average of 1 version for each row that is accessed. これは、トランザクション XSN-57、XSN-58、および XSN-60 では行が変更されずコミットされていないことを表します。This means that transactions XSN-57, XSN-58, and XSN-60 have not modified rows and committed.

  • XSN-60: これは、スナップショット分離で実行されている2番目のトランザクションです。XSN-60: This is the second transaction running under snapshot isolation. 出力では、XSN-59 と同じ情報が示されます。The output shows the same information as XSN-59.

参照See Also

SET TRANSACTION ISOLATION LEVEL (Transact-SQL) SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
動的管理ビューと動的管理関数 (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
トランザクション関連の動的管理ビューおよび関数 (Transact-SQL)Transaction Related Dynamic Management Views and Functions (Transact-SQL)