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

S’APPLIQUE À : ouiSQL Server (à partir de 2008) ouiAzure SQL Database ouiAzure SQL Data Warehouse ouiParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Dans une instance SQL ServerSQL Server, cette vue de gestion dynamique retourne une table virtuelle pour toutes les transactions actives qui génèrent des versions de ligne ou qui sont susceptibles d'y accéder.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. Les transactions sont incluses lorsque l'une des conditions suivantes, au minimum, est remplie :Transactions are included for one or more of the following conditions:

  • Lorsque au moins l'une des deux options de base de données ALLOW_SNAPSHOT_ISOLATION et READ_COMMITTED_SNAPSHOT est définie à ON :When either or both ALLOW_SNAPSHOT_ISOLATION and READ_COMMITTED_SNAPSHOT database options are set to ON:

    • Il existe une ligne pour chaque transaction exécutée avec le niveau d'isolement d'instantané ou le niveau d'isolement de lecture validée avec le contrôle de version de ligne.There is one row for each transaction that is running under snapshot isolation level, or read-committed isolation level that is using row versioning.

    • Il existe une ligne pour chaque transaction qui entraîne la création d'une version de ligne dans la base de données active.There is one row for each transaction that causes a row version to be created in the current database. Par exemple, la transaction génère une version de ligne en mettant à jour ou en supprimant une ligne dans la base de données active.For example, the transaction generates a row version by updating or deleting a row in the current database.

  • Lorsqu'un déclencheur est activé, il existe une ligne pour la transaction sous laquelle le déclencheur est exécuté.When a trigger is fired, there is one row for the transaction under which the trigger is executing.

  • Lorsqu'une procédure d'indexation est en cours d'exécution, il existe une ligne pour la transaction qui crée l'index.When an online indexing procedure is running, there is one row for the transaction that is creating the index.

  • Lorsqu'une session MARS (Multiple Active Results Sets) est activée, il existe une ligne pour chaque transaction qui accède aux versions de ligne.When Multiple Active Results Sets (MARS) session is enabled, there is one row for each transaction that is accessing row versions.

    Cette vue de gestion dynamique n'inclut pas les transactions système.This dynamic management view does not include system transactions.

Note

À appeler à partir Azure SQL Data WarehouseAzure SQL Data Warehouse ou Parallel Data WarehouseParallel Data Warehouse, utilisez le nom sys.dm_pdw_nodes_tran_active_snapshot_database_transactions.To call this from Azure SQL Data WarehouseAzure SQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse, use the name sys.dm_pdw_nodes_tran_active_snapshot_database_transactions.

SyntaxeSyntax


sys.dm_tran_active_snapshot_database_transactions  

Table retournéeTable Returned

Nom de colonneColumn name Type de donnéesData type DescriptionDescription
transaction_idtransaction_id bigintbigint Numéro d'identification unique assigné pour la transaction.Unique identification number assigned for the transaction. L'ID de transaction permet principalement d'identifier la transaction dans les opérations de verrouillage.The transaction ID is primarily used to identify the transaction in locking operations.
transaction_sequence_numtransaction_sequence_num bigintbigint Numéro de séquence de la transaction.Transaction sequence number. Il s'agit d'un numéro de séquence unique qui est attribué à une transaction lorsqu'elle démarre.This is a unique sequence number that is assigned to a transaction when it starts. Les transactions qui ne produisent pas d'enregistrements de version et n'utilisent pas d'analyses d'instantané ne recevront pas de numéro de séquence.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 Numéro de séquence qui indique quand la transaction se termine (validée ou arrêtée).Sequence number that indicates when the transaction finishes (commits or stops). Pour les transactions actives, la valeur est NULL.For active transactions, the value is NULL.
is_snapshotis_snapshot Intint 0 = n'est pas une transaction d'isolement d'instantané.0 = Is not a snapshot isolation transaction.

1 = est une transaction d'isolement d'instantané.1 = Is a snapshot isolation transaction.
session_idsession_id Intint ID de la session qui a démarré la transaction.ID of the session that started the transaction.
first_snapshot_sequence_numfirst_snapshot_sequence_num bigintbigint Il s'agit du plus petit numéro de séquence des transactions qui étaient actives lors de la création d'un instantané.Lowest transaction sequence number of the transactions that were active when a snapshot was taken. Lors de l'exécution, une transaction d'instantané prend un instantané de toutes les transactions actives présentes.On execution, a snapshot transaction takes a snapshot of all of the active transactions at that time. Pour les transactions non liées à des instantanés, la valeur 0 est affichée dans cette colonne.For nonsnapshot transactions, this column shows 0.
max_version_chain_traversedmax_version_chain_traversed Intint Longueur maximale de la chaîne de versions traversée pour trouver la version cohérente d'un point de vue transactionnel.Maximum length of the version chain that is traversed to find the transactionally consistent version.
average_version_chain_traversedaverage_version_chain_traversed realreal Nombre moyen de versions de ligne dans les chaînes de versions traversées.Average number of row versions in the version chains that are traversed.
elapsed_time_secondselapsed_time_seconds bigintbigint Temps écoulé depuis que la transaction a obtenu son numéro de séquence.Elapsed time since the transaction obtained its transaction sequence number.
pdw_node_idpdw_node_id Intint S’applique aux: Azure SQL Data WarehouseAzure SQL Data Warehouse, Parallel Data WarehouseParallel Data WarehouseApplies to: Azure SQL Data WarehouseAzure SQL Data Warehouse, Parallel Data WarehouseParallel Data Warehouse

L’identificateur pour le nœud se trouvant sur cette distribution.The identifier for the node that this distribution is on.

PermissionsPermissions

Sur SQL ServerSQL Server, nécessite VIEW SERVER STATE autorisation.On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
Sur SQL DatabaseSQL Database, nécessite le VIEW DATABASE STATE autorisation dans la base de données.On SQL DatabaseSQL Database, requires the VIEW DATABASE STATE permission in the database.

NotesRemarks

Sys.dm_tran_active_snapshot_database_transactions enregistre les transactions qui sont affectées à un numéro de séquence de transaction (XSN).sys.dm_tran_active_snapshot_database_transactions reports transactions that are assigned a transaction sequence number (XSN). Ce numéro de séquence est attribué lorsque la transaction accède pour la première fois à la banque des versions.The XSN is assigned when the transaction first accesses the version store. Dans une base de données qui est activée pour l'isolement d'instantané ou l'isolement de lecture validée avec le contrôle de version de ligne, les exemples indiquent à quel moment un numéro de séquence est attribué à une transaction :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:

  • Si une transaction est exécutée avec le niveau d'isolement sérialisable, un numéro de séquence est attribué lorsque la transaction exécute pour la première fois une instruction (par exemple, une opération UPDATE) qui entraîne la création d'une version de ligne.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.

  • Si une transaction est exécutée avec le niveau d'isolement d'instantané, un numéro de séquence est attribué lorsqu'une instruction DML (Data Manipulation Language), y compris une opération SELECT, est exécutée.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.

    Les numéros de séquence des transactions augmentent d'une unité à chaque transaction démarrée dans une instance du Moteur de base de donnéesDatabase Engine.Transaction sequence numbers are serially incremented for each transaction that is started in an instance of the Moteur de base de donnéesDatabase Engine.

ExemplesExamples

L'exemple suivant illustre un scénario de test dans lequel quatre transactions simultanées, chacune étant identifiée par un numéro de séquence de transaction, sont exécutées dans une base de données où les options ALLOW_SNAPSHOT_ISOLATION et READ_COMMITTED_SNAPSHOT sont définies à 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. Les transactions suivantes sont exécutées :The following transactions are running:

  • XSN-57 est une opération Update exécutée avec le niveau d'isolement sérialisable.XSN-57 is an update operation under serializable isolation.

  • XSN-58 est identique à XSN-57.XSN-58 is the same as XSN-57.

  • XSN-59 est une opération Select exécutée avec le niveau d'isolement d'instantané.XSN-59 is a select operation under snapshot isolation

  • XSN-60 est identique à XSN-59.XSN-60 is same as XSN-59.

    La requête suivante est exécutée :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;  

Voici l'ensemble des résultats.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  

Les informations suivantes évaluent les résultats de sys.dm_tran_active_snapshot_database_transactions:The following information evaluates the results from sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57 : Étant donné que cette transaction n’est pas exécutée en isolement d’instantané, le is_snapshot valeur et first_snapshot_sequence_num sont 0.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 indique qu'un numéro de séquence de transaction a été attribué à cette transaction, car au moins l'une des options de base de données ALLOW_SNAPSHOT_ISOLATION et READ_COMMITTED_SNAPSHOT est activée (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 : Cette transaction n'est pas exécutée avec le niveau d'isolement d'instantané, et les informations fournies pour XSN-57 s'appliquent.XSN-58: This transaction is not running under snapshot isolation and the same information for XSN-57 applies.

  • XSN-59 : Il s'agit de la première transaction active exécutée avec le niveau d'isolement d'instantané.XSN-59: This is the first active transaction that is running under snapshot isolation. Cette transaction lit les données qui sont validées avant XSN-57, comme l'indique l'argument first_snapshot_sequence_num.This transaction reads data that is committed before XSN-57, as indicated by first_snapshot_sequence_num. Le résultat de cette transaction indique également que le nombre maximal de chaîne de versions traversées pour une ligne est 1, avec une moyenne de 1 version traversée pour chaque ligne utilisée.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. Ceci signifie que les transactions XSN-57, XSN-58 et XSN-60 n'ont pas modifié les lignes et les ont validées.This means that transactions XSN-57, XSN-58, and XSN-60 have not modified rows and committed.

  • XSN-60 : Il s'agit de la seconde transaction exécutée avec le niveau d'isolement d'instantané.XSN-60: This is the second transaction running under snapshot isolation. Le résultat affiche les mêmes informations que pour la transaction XSN-59.The output shows the same information as XSN-59.

Voir aussiSee Also

SET TRANSACTION ISOLATION LEVEL (Transact-SQL) SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
Fonctions et vues de gestion dynamique (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
Fonctions et vues de gestion dynamique relatives aux transactions (Transact-SQL)Transaction Related Dynamic Management Views and Functions (Transact-SQL)