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

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel 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:

    • スナップショット分離レベルまたは行のバージョン管理を使用する read committed 分離レベルで実行されているトランザクションごとに 1 つの行があります。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 SQL データ ウェアハウスAzure SQL Data WarehouseまたはParallel Data WarehouseParallel Data Warehouse、名前を使用して、 sys.dm_pdw_nodes_tran_active_snapshot_database_transactionsします。To call this from Azure SQL データ ウェアハウスAzure SQL Data Warehouse 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 SQL データ ウェアハウスAzure SQL Data WarehouseParallel Data WarehouseParallel Data WarehouseApplies to: Azure SQL データ ウェアハウスAzure SQL Data Warehouse, 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 DatabaseSQL Database Premium レベルでは、必要があります、VIEW DATABASE STATEデータベースの権限。On SQL DatabaseSQL Database Premium Tiers, requires the VIEW DATABASE STATE permission in the database. SQL DatabaseSQL Database Standard および Basic 階層は、必要があります、サーバー管理者またはAzure Active Directory 管理者アカウント。On SQL DatabaseSQL Database Standard and Basic Tiers, requires the Server admin or an Azure Active Directory admin account.

コメント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.

  • トランザクションがスナップショット分離下で実行している場合、データ操作言語 (DML) ステートメント、SELECT 操作などが実行されたときに 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 1 つまたは両方 ALLOW_SNAPSHOT_ISOLATION または READ_COMMITTED_SNAPSHOT データベース オプションが ON であるため、このトランザクションにトランザクション シーケンス番号が割り当てられていることを示します。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)