sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-Datenbank in Microsoft Fabric

Diese dynamische Verwaltungsansicht liefert Informationen über Transaktionen, die für Zeilenversionierung registriert und mit einer Transaktionssequenznummer (XSN) versehen sind. Transaktionen können unter einer oder mehreren der folgenden Bedingungen berücksichtigt werden:

  • Wenn entweder oder beide ALLOW_SNAPSHOT_ISOLATION Datenbankoptionen READ_COMMITTED_SNAPSHOT sind ON:

    • Transaktionen, die unter Snapshot-Isolation einen Snapshot herstellen oder mit Read-Committed Isolation mittels Zeilenversionierung beauftragt werden.

    • Transaktionen, die Zeilenversionen generieren, zum Beispiel durch das Aktualisieren oder Löschen von Zeilen in einer Datenbank mit aktivierten Optionen.

  • Transaktionen, die Zeilenversionen für Trigger generieren oder darauf zugreifen.

  • Transaktionen, die während Online-Indexoperationen Zeilenversionierung verwenden.

  • Transaktionen, die Zeilenversionierung in einer Multiple Active Result Sets (MARS)-Sitzung verwenden.

  • In SQL Server 2019 (15.x) und späteren Versionen sind Transaktionen, die Daten in einer Datenbank mit aktivierter beschleunigter Datenbankwiederherstellung (ADR) ändern, selbst wenn beide Snapshot-Datenbankoptionen .OFF

Diese dynamische Management-Ansicht schließt Systemtransaktionen nicht ein. Abgeschlossene Transaktionen können während gleichzeitiger Aufzählung oder Transaktionsbereinigung kurz erscheinen.

Note

Um das von Azure Synapse Analytics zu nennen, verwenden Sie den Namen sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Diese Syntax wird von serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.

Syntax

sys.dm_tran_active_snapshot_database_transactions  

Zurückgegebene Tabelle

Spaltenname Datentyp Description
transaction_id bigint Eindeutige Identifikationsnummer, die der Transaktion zugewiesen ist. Die Transaktions-ID wird in erster Linie zum Identifizieren der Transaktion in Sperrvorgängen verwendet.
transaction_sequence_num bigint Eindeutige Sequenznummer wird zugewiesen, wenn die Transaktion erstmals eine Zeilenversionierung benötigt. Transaktionen, die weder Zeilenversionen generieren noch Snapshot-Scans verwenden, erhalten keine Transaktionssequenznummer.
commit_sequence_num bigint Immer NULL in dieser Sicht.
session_id int ID der Sitzung, die mit der Transaktion verknüpft ist.
is_snapshot bit 0 = Keine Momentaufnahmeisolationstransaktion

1 = Momentaufnahmeisolationstransaktion
first_snapshot_sequence_num bigint Die niedrigste Transaktionssequenznummer wird in den aktuell von der Transaktion gehaltenen Snapshots als aktiv verzeichnet. Enthält Transaktions- und Statement-Snapshots. NULL, wenn keine solche Sequenznummer aufgezeichnet ist.
max_version_chain_traversed int Maximale Anzahl der Zeilenversionen, die in einer einzigen Versionskette durch die Transaktion durchlaufen werden. Gibt 0 zurück, wenn keine Zeilenversionen durchlaufen werden.
average_version_chain_traversed float Durchschnittliche Anzahl der Zeilenversionen, die pro Versionskettendurchquerung durch die Transaktion durchlaufen werden. Durchläufe der Länge 0 sind ausgeschlossen. Gibt 0 zurück, wenn keine Zeilenversionen durchlaufen werden.
elapsed_time_seconds bigint Verstrichene Zeit in Sekunden, seit die Transaktion ihre Transaktionssequenznummer erhalten hat.
pdw_node_id int Gilt für: Azure Synapse Analytics

Der Bezeichner für den Knoten, auf dem sich diese Verteilung befindet.

Erlaubnisse

Für SQL Server und SQL Managed Instance ist VIEW SERVER STATE Berechtigung erforderlich.

Für SQL-Datenbank Basic, S0und S1 Dienstziele sowie für Datenbanken in elastischen Poolsist der Serveradministrator Konto, der Microsoft Entra-Administrator Konto oder die Mitgliedschaft in der ##MS_ServerStateReader##Serverrolle erforderlich. Für alle anderen SQL-Datenbankdienstziele ist entweder die VIEW DATABASE STATE Berechtigung für die Datenbank oder die Mitgliedschaft in der ##MS_ServerStateReader## Serverrolle erforderlich.

Berechtigungen für SQL Server 2022 und höher

Erfordert die VIEW SERVER PERFORMANCE STATE-Berechtigung auf dem Server.

Bemerkungen

sys.dm_tran_active_snapshot_database_transactions meldet Transaktionen, die für die Zeilenversionierung eine Transaktionssequenznummer (XSN) zugewiesen sind. Ein XSN wird zugewiesen, wenn die Transaktion erstmals eine Zeilenversion benötigt, nicht unbedingt beim Start oder physischen Zugriff auf den Versionsspeicher.

In einer Datenbank mit ALLOW_SNAPSHOT_ISOLATION oder READ_COMMITTED_SNAPSHOT aktiviert sind Beispiele:

  • Eine Transaktion, die unter serialisierbarer Isolation läuft, erhält bei der ersten Generierung von Zeilenversionen, zum Beispiel durch eine UPDATE oder Operation DELETE , ein XSN zugewiesen.

  • Eine Transaktion, die unter Snapshot-Isolation läuft, erhält ein XSN zugewiesen, wenn sie erstmals einen Snapshot für den Datenzugriff erstellt, zum Beispiel über eine SELECT , die eine Benutzertabelle liest. BEGIN TRANSACTION allein weist keine XSN zu.

XSNs werden von einem instanzweiten, steigenden Zähler zugewiesen. Derselbe Zähler wird für Snapshots auf Anweisungsebene verwendet, sodass Transaktions-XSNs nicht aufeinanderfolgend sein müssen.

Examples

Das folgende Beispiel illustriert vier gleichzeitige Transaktionen in einer Datenbank mit ALLOW_SNAPSHOT_ISOLATION und READ_COMMITTED_SNAPSHOT gesetzt auf ON:

  • XSN-57 führt eine UPDATE unter serialisierbare Isolation aus und bleibt ungebunden.
  • XSN-58 führt eine weitere UPDATE Operation unter serialisierbarer Isolation aus und bleibt ungebunden.
  • XSN-59 führt eine SELECT Isolation unter Snapshot aus und bleibt offen.
  • XSN-60 führt ein weiteres SELECT unter Snapshot-Isolation aus und bleibt offen.

Beide Snapshot-Transaktionen legen ihre Snapshots her, während XSN-57 und XSN-58 aktiv sind. Ihre SELECT Aussagen lesen frühere Versionen von Zeilen, die durch die uncommitted Updates modifiziert wurden.

Die folgende Abfrage wird ausgeführt:

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;

Die folgende Ausgabe ist anschaulich. Tatsächliche Kennzeichen, Sequenznummern, Statistiken und vergangene Zeiten variieren.

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

Die Ergebnisse zeigen Folgendes:

  • XSN-57 und XSN-58 verwenden serialisierbare Isolation, also is_snapshot = 0. Die UPDATE innerhalb dieser Transaktionen ausgeführten Anweisungen generieren Zeilenversionen, da die Snapshot-Optionen der Datenbank sind ON. Diese Versionsgenerierung führt dazu, dass Transaktionssequenznummern zugewiesen werden. Keine der beiden Transaktionen enthält in diesem Beispiel einen Snapshot, daher first_snapshot_sequence_num ist NULL.

  • XSN-59 und XSN-60 haben is_snapshot = 1. Ihr Wert von 57 identifiziert die älteste Transaktion, die first_snapshot_sequence_num als aktiv verzeichnet wurde, als ihre Snapshots erstellt wurden.

  • Für XSN-59 und XSN-60 sind die maximalen und durchschnittlichen Versions-Kettenlängen sowohl 1. Jede aufgezeichnete Durchquerung besuchte eine Reihe-Version. Der Durchschnitt wird über Quergänge berechnet, die mindestens eine Reihenversion besuchen.

  • XSN-59 und XSN-60 lasen frühere committierte Versionen der von XSN-57 und XSN-58 modifizierten Zeilen, die bei der Einrichtung beider Snapshots noch nicht committiert waren.