Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Base 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_ISOLATIONoptions deREAD_COMMITTED_SNAPSHOTbase de données sontON: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
UPDATEopération ouDELETE.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
SELECTqui 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
UPDATEisolation sous sérialisabilité et reste non engagé. - XSN-58 exécute un autre
UPDATEsous isolement sérialisable et reste non engagé. - XSN-59 exécute une
SELECTisolation sous instantané et reste ouvert. - XSN-60 exécute un autre
SELECTsous 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. LesUPDATEinstructions exécutées dans ces transactions génèrent des versions de lignes car les options d’instantané de la base de données sontON. 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, doncfirst_snapshot_sequence_numNULL est le cas.XSN-59 et XSN-60 ont
is_snapshot = 1. Leurfirst_snapshot_sequence_numvaleur de57identifie 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.