sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)
S’applique à : SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Dans une instance SQL Server, cette vue de gestion dynamique retourne une table virtuelle pour toutes les transactions actives qui génèrent ou peuvent accéder aux versions de lignes. Les transactions sont incluses lorsque l'une des conditions suivantes, au minimum, est remplie :
Lorsque au moins l'une des deux options de base de données ALLOW_SNAPSHOT_ISOLATION et READ_COMMITTED_SNAPSHOT est définie à 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.
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. 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.
Lorsqu'un déclencheur est activé, il existe une ligne pour la transaction sous laquelle le déclencheur est exécuté.
Lorsqu'une procédure d'indexation est en cours d'exécution, il existe une ligne pour la transaction qui crée l'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.
Cette vue de gestion dynamique n'inclut pas les transactions système.
Remarque
Pour appeler cela à partir d’Azure Synapse Analytics ou du système de plateforme d’analyse (PDW), utilisez le nom sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Cette syntaxe n’est pas prise en charge par le pool SQL serverless dans Azure Synapse Analytics.
Syntaxe
sys.dm_tran_active_snapshot_database_transactions
Table retournée
Nom de la colonne | Type de données | Description |
---|---|---|
transaction_id | bigint | Numéro d'identification unique assigné pour la transaction. L'ID de transaction permet principalement d'identifier la transaction dans les opérations de verrouillage. |
transaction_sequence_num | bigint | Numéro de séquence de la transaction. Il s'agit d'un numéro de séquence unique qui est attribué à une transaction lorsqu'elle démarre. 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. |
commit_sequence_num | bigint | Numéro de séquence qui indique quand la transaction se termine (validée ou arrêtée). Pour les transactions actives, la valeur est NULL. |
is_snapshot | int | 0 = n'est pas une transaction d'isolement d'instantané. 1 = est une transaction d'isolement d'instantané. |
session_id | int | ID de la session qui a démarré la transaction. |
first_snapshot_sequence_num | bigint | Il s'agit du plus petit numéro de séquence des transactions qui étaient actives lors de la création d'un instantané. Lors de l'exécution, une transaction d'instantané prend un instantané de toutes les transactions actives présentes. Pour les transactions non liées à des instantanés, la valeur 0 est affichée dans cette colonne. |
max_version_chain_traversed | int | Longueur maximale de la chaîne de versions traversée pour trouver la version cohérente d'un point de vue transactionnel. |
average_version_chain_traversed | real | Nombre moyen de versions de ligne dans les chaînes de versions traversées. |
elapsed_time_seconds | bigint | Temps écoulé depuis que la transaction a obtenu son numéro de séquence. |
pdw_node_id | int | S’applique à : Azure Synapse Analytics, Analytics Platform System (PDW) Identificateur du nœud sur lequel cette distribution est activée. |
Autorisations
Sur SQL Server et SQL Managed Instance, l’autorisation VIEW SERVER STATE
est requise.
Sur les objectifs de service SQL Database Basic, S0 et S1, et pour les bases de données dans des pools élastiques, le compte d’administrateur du serveur, le compte d’administrateur Microsoft Entra ou l’appartenance au ##MS_ServerStateReader##
rôle serveur est requis. Sur tous les autres objectifs de service SQL Database, l’autorisation VIEW DATABASE STATE
sur la base de données ou l’appartenance au rôle serveur ##MS_ServerStateReader##
est requise.
Autorisations pour SQL Server 2022 (et versions plus récentes)
Nécessite l’autorisation VIEW SERVER PERFORMANCE STATE sur le serveur.
Notes
sys.dm_tran_active_snapshot_database_transactions signale les transactions affectées à un numéro de séquence de transactions (XSN). Ce numéro de séquence est attribué lorsque la transaction accède pour la première fois à la banque des versions. 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 :
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.
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.
Les numéros de séquence de transactions sont incrémentés en série pour chaque transaction démarrée dans une instance du Moteur de base de données.
Exemples
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. Les transactions suivantes sont exécutées :
XSN-57 est une opération Update exécutée avec le niveau d'isolement sérialisable.
XSN-58 est identique à XSN-57.
XSN-59 est une opération Select exécutée avec le niveau d'isolement d'instantané.
XSN-60 est identique à XSN-59.
La requête suivante est exécutée :
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 le jeu de résultats obtenu.
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 :
XSN-57 : Étant donné que cette transaction n’est pas en cours d’exécution sous isolation d’instantané, la
is_snapshot
valeur etfirst_snapshot_sequence_num
sont0
.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).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-59 : Il s'agit de la première transaction active exécutée avec le niveau d'isolement d'instantané. Cette transaction lit les données qui sont validées avant XSN-57, comme l'indique l'argument
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 est1
, avec une moyenne de1
version traversée pour chaque ligne utilisée. Ceci signifie que les transactions XSN-57, XSN-58 et XSN-60 n'ont pas modifié les lignes et les ont validées.XSN-60 : Il s'agit de la seconde transaction exécutée avec le niveau d'isolement d'instantané. Le résultat affiche les mêmes informations que pour la transaction XSN-59.
Voir aussi
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
Fonctions et vues de gestion dynamique (Transact-SQL)
Fonctions et vues de gestion dynamique relatives aux transactions (Transact-SQL)