sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsBase de données SQL dans Microsoft Fabric

Cette vue de gestion dynamique renvoie des informations sur les transactions enregistrées pour la versionisation de lignes et à qui un numéro de séquence de transaction (XSN) est attribué. Les transactions peuvent être incluses sous une ou plusieurs des conditions suivantes :

  • Lorsque l’un ou l’autre ou les deux ALLOW_SNAPSHOT_ISOLATION options de READ_COMMITTED_SNAPSHOT base de données sont ON:

    • Transactions qui établissent un instantané sous isolation d’instantané ou lisent une isolation engagée via le versionnement de lignes.

    • Des transactions qui génèrent des versions de lignes, par exemple en mettant à jour ou en supprimant des lignes dans une base de données avec ces options activées.

  • Des transactions qui génèrent ou accèdent à des versions de ligne pour les déclencheurs.

  • Transactions utilisant la version des lignes lors des opérations d’index en ligne.

  • Transactions utilisant le versioning de lignes dans une session Multiple Active Result Sets (MARS).

  • Dans SQL Server 2019 (15.x) et versions ultérieures, les transactions modifiant des données dans une base de données avec la récupération accélérée de la base de données (ADR) activée, même lorsque les deux options de base de données instantanées sont OFF.

Cette vue de gestion dynamique n’inclut pas les transactions système. Les transactions terminées peuvent apparaître brièvement lors d’une énumération ou d’un nettoyage simultané.

Note

Pour appeler cela depuis Azure Synapse Analytics, 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.

Syntax

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 attribué à 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 unique attribué lors de la première transaction nécessite un versionnement de ligne. Les transactions qui ne génèrent ni des versions de ligne ni n’utilisent de balayages instantanés ne se voient pas attribuer de numéro de séquence de transaction.
commit_sequence_num bigint Toujours NULL dans cette vue.
session_id int ID de la session associée à la transaction.
is_snapshot bit 0 = n'est pas une transaction d'isolement d'instantané.

1 = est une transaction d'isolement d'instantané.
first_snapshot_sequence_num bigint Le numéro de séquence de transaction le plus bas enregistré comme actif dans les instantanés actuellement détenus par la transaction. Inclut des instantanés au niveau de la transaction et du relevé. NULL si aucun numéro de séquence n’est enregistré.
max_version_chain_traversed int Nombre maximal de versions de lignes parcourues dans une seule chaîne de versions par la transaction. Ne rend pas 0 si aucune version de ligne n’est parcourue.
average_version_chain_traversed float Nombre moyen de versions de lignes parcourues par parcours de chaîne de versions par la transaction. Les traversées de longueur 0 sont exclues. Ne rend pas 0 si aucune version de ligne n’est parcourue.
elapsed_time_seconds bigint Temps écoulé, en secondes, depuis que la transaction a reçu son numéro de séquence de transaction.
pdw_node_id int Applies à : Azure Synapse Analytics

Identificateur du nœud sur lequel cette distribution est activée.

Permissions

Sur SQL Server et SQL Managed Instance, vous devez disposer d’une autorisation VIEW SERVER STATE.

Sur sql Database de base, S0et objectifs de service S1, et pour les bases de données dans pools élastiques, le compte d’administrateur de serveur, le compte Administrateur Microsoft Entra ou l’appartenance au rôle serveur ##MS_ServerStateReader## est nécessaire. 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 ultérieures

Nécessite l'autorisation VIEW SERVER PERFORMANCE STATE sur le serveur.

Remarques

sys.dm_tran_active_snapshot_database_transactions rapporte les transactions attribuées à un numéro de séquence de transaction (XSN) pour le versionnement des lignes. Un XSN est attribué lorsque la transaction nécessite d’abord un versionnement de ligne, pas nécessairement au démarrage ou à l’accès physique au magasin de versions.

Dans une base de données avec ALLOW_SNAPSHOT_ISOLATION ou READ_COMMITTED_SNAPSHOT activée, des exemples incluent :

  • Une transaction exécutée sous isolation sérialisable se voit attribuer un XSN lorsqu’elle génère pour la première fois des versions de lignes, par exemple via une UPDATE opération ou DELETE .

  • Une transaction fonctionnant sous isolement d’instantané se voit attribuer un XSN lorsqu’elle établit pour la première fois un instantané pour l’accès aux données, par exemple via un SELECT qui lit une table utilisateur. BEGIN TRANSACTION à elle seule n’attribue pas un XSN.

Les XSN sont alloués à partir d’un compteur croissant à l’échelle de l’instance. Le même compteur est utilisé pour les instantanés au niveau de l’état, donc les XSN de transaction n’ont pas besoin d’être consécutifs.

Examples

L’exemple suivant illustre quatre transactions concurrentes dans une base de données avec ALLOW_SNAPSHOT_ISOLATION et READ_COMMITTED_SNAPSHOT définies à ON:

  • XSN-57 exécute une UPDATE isolation sous sérialisabilité et reste non engagé.
  • XSN-58 exécute un autre UPDATE sous isolement sérialisable et reste non engagé.
  • XSN-59 exécute une SELECT isolation sous instantané et reste ouvert.
  • XSN-60 exécute un autre SELECT sous isolement instantané et reste ouvert.

Les deux transactions snapshot établissent leurs snapshots tandis que XSN-57 et XSN-58 sont actifs. Leurs déclarations lisent SELECT des versions antérieures de lignes modifiées par les mises à jour non engagées.

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
ORDER BY transaction_sequence_num;

Le résultat suivant est illustratif. Les identifiants réels, numéros de séquence, statistiques et temps écoulés varient.

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
--------------  ------------------------  -------------------  -----------  ----------  ---------------------------  ---------------------------  -------------------------------  --------------------
9295            57                        NULL                 0            54          NULL                         0                            0                                419
9324            58                        NULL                 0            53          NULL                         0                            0                                397
9387            59                        NULL                 1            52          57                           1                            1                                359
9400            60                        NULL                 1            51          57                           1                            1                                333

Les résultats montrent les éléments suivants :

  • XSN-57 et XSN-58 utilisent une isolation sérialisable, donc is_snapshot = 0. Les UPDATE instructions exécutées dans ces transactions génèrent des versions de lignes car les options d’instantané de la base de données sont ON. Cette génération de version entraîne l’attribution de numéros de séquence de transaction. Aucune des deux transactions ne conserve d’instantané dans cet exemple, donc first_snapshot_sequence_num NULL est le cas.

  • XSN-59 et XSN-60 ont is_snapshot = 1. Leur first_snapshot_sequence_num valeur de 57 identifie la plus ancienne transaction enregistrée comme active lors de l’établissement de leurs instantanés.

  • Pour XSN-59 et XSN-60, les longueurs maximales et moyennes de parcours de chaîne de version sont toutes deux 1. Chaque parcours enregistré a une version en ligne. La moyenne est calculée sur les traversées qui visitent au moins une version de ligne.

  • XSN-59 et XSN-60 lisaient les versions antérieures engagées des lignes modifiées par XSN-57 et XSN-58, qui n’étaient toujours pas engagées lors de l’établissement des deux instantanés.