sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Gilt für: SQL Server (alle unterstützten Versionen) Azure SQL Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

In einer SQL Server Instanz gibt diese dynamische Verwaltungsansicht eine virtuelle Tabelle für alle aktiven Transaktionen zurück, die Zeilenversionen generieren oder möglicherweise darauf zugreifen. Transaktionen für mindestens eine der folgenden Bedingungen sind enthalten:

  • Wenn eine oder beide der Datenbankoptionen ALLOW_SNAPSHOT_ISOLATION und READ_COMMITTED_SNAPSHOT auf ON festgelegt sind:

    • Es gibt eine Zeile für jede Transaktion, die unter der Momentaufnahmeisolationsstufe oder der READ COMMITTED-Isolationsstufe, die die Zeilenversionsverwaltung verwendet, ausgeführt wird.

    • Es gibt eine Zeile für jede Transaktion, die bewirkt, dass eine Zeilenversion in der aktuellen Datenbank erstellt wird. Beispielsweise generiert die Transaktion eine Zeilenversion durch Aktualisieren oder Löschen einer Zeile in der aktuellen Datenbank.

  • Wenn ein Trigger ausgelöst wird, gibt es eine Zeile für die Transaktion, unter der der Trigger ausgeführt wird.

  • Wenn eine Onlineindizierungsprozedur ausgeführt wird, gibt es eine Zeile für die Transaktion, die den Index erstellt.

  • Wenn eine MARS-Sitzung (Multiple Active Result Sets) aktiviert ist, gibt es eine Zeile für jede Transaktion, die auf Zeilenversionen zugreift.

Diese dynamische Verwaltungssicht schließt keine Systemtransaktionen ein.

Hinweis

Um dies von Azure Synapse Analytics- oder Analytics Platform System (PDW) aufzurufen, verwenden Sie den Namen sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.

Syntax

  
sys.dm_tran_active_snapshot_database_transactions  

Zurückgegebene Tabelle

Spaltenname Datentyp BESCHREIBUNG
transaction_id bigint Eindeutige, der Transaktion zugewiesene ID. Die Transaktions-ID wird in erster Linie zum Identifizieren der Transaktion in Sperrvorgängen verwendet.
transaction_sequence_num bigint Transaktionssequenznummer. Hierbei handelt es sich um eine eindeutige, der Transaktion beim Start zugewiesene Sequenznummer. Transaktionen, die keine Versionsdatensätze generieren und keine Momentaufnahmescans verwenden, erhalten keine Transaktionssequenznummer.
commit_sequence_num bigint Sequenznummer, die das Ende (durch Commit oder Anhalten) der Transaktion angibt. Bei aktiven Transaktionen ist der Wert NULL.
is_snapshot int 0 = Keine Momentaufnahmeisolationstransaktion

1 = Momentaufnahmeisolationstransaktion
session_id int ID der Sitzung, die die Transaktion gestartet hat.
first_snapshot_sequence_num bigint Niedrigste Transaktionssequenznummer der Transaktionen, die beim Erstellen einer Momentaufnahme aktiviert waren. Bei der Ausführung einer Momentaufnahmetransaktion wird eine Momentaufnahme aller zu diesem Zeitpunkt aktiven Transaktionen erstellt. Für NonSnapshot-Transaktionen wird in dieser Spalte 0 angezeigt.
max_version_chain_traversed int Maximale Länge der Versionskette, die durchsucht wird, um die hinsichtlich der Transaktion konsistente Version zu finden.
average_version_chain_traversed real Durchschnittliche Anzahl von Zeilenversionen in den durchsuchten Versionsketten.
elapsed_time_seconds bigint Zeitraum, der verstrichen ist, seitdem die Transaktion ihre Transaktionssequenznummer erhalten hat.
pdw_node_id int Gilt für: Azure Synapse Analytics, Analytics Platform System (PDW)

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

Berechtigungen

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

Für Standard-, S0- und S1-Dienstziele von SQL-Datenbank sowie für Datenbanken in Pools für elastische Datenbanken ist das Konto des Serveradministrators, des Azure Active Directory-Administrators oder die Mitgliedschaft in der ##MS_ServerStateReader##Serverrolle erforderlich. Für alle anderen SQL-Datenbank-Dienstziele ist entweder die VIEW DATABASE STATE-Berechtigung für die Datenbank oder die Mitgliedschaft in der ##MS_ServerStateReader##-Serverrolle erforderlich.

Bemerkungen

sys.dm_tran_active_snapshot_database_transactions meldet Transaktionen, die einer Transaktionssequenznummer (XSN) zugewiesen sind. Die XSN wird zugewiesen, wenn die Transaktion zum ersten Mal auf den Versionsspeicher zugreift. In den folgenden Beispielen wird gezeigt, wann in einer Datenbank, die für die Momentaufnahmeisolation oder die READ COMMITTED-Isolation aktiviert ist, die die Zeilenversionsverwaltung verwendet, einer Transaktion eine XSN zugewiesen wird:

  • Wenn eine Transaktion unter der serialisierbaren Isolationsstufe ausgeführt wird, wird eine XSN zugewiesen, wenn die Transaktion zum ersten Mal eine Anweisung ausführt, die die Erstellung einer Zeilenversion verursacht, z. B. einen UPDATE-Vorgang.

  • Wenn eine Transaktion unter der Momentaufnahmeisolation ausgeführt wird, wird eine XSN zugewiesen, wenn eine Anweisung in der Datenbearbeitungssprache (Data Manipulation Language, DML), einschließlich eines SELECT-Vorgangs, ausgeführt wird.

Transaktionssequenznummern werden für jede Transaktion, die in einer Instanz des Datenbankmoduls gestartet wird, fortlaufend erhöht.

Beispiele

Im folgenden Beispiel wird ein Testszenario verwendet, in dem vier gleichzeitige Transaktionen, die jeweils durch eine Transaktionssequenznummer (XSN) identifiziert werden, in einer Datenbank ausgeführt werden, für die die Optionen ALLOW_SNAPSHOT_ISOLATION und READ_COMMITTED_SNAPSHOT auf ON festgelegt sind. Die folgenden Transaktionen werden ausgeführt:

  • XSN-57 ist ein Updatevorgang auf der serialisierbaren Isolationsstufe.

  • XSN-58 entspricht XSN-57.

  • Bei XSN-59 handelt es sich um einen SELECT-Vorgang unter der Momentaufnahmeisolation.

  • XSN-60 entspricht XSN-59.

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;  

Hier ist das Resultset.

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  

In den folgenden Informationen werden die Ergebnisse aus sys.dm_tran_active_snapshot_database_transactions ausgewertet:

  • XSN-57: Da diese Transaktion nicht unter der Momentaufnahmeisolation ausgeführt wird, ist der is_snapshot Wert und first_snapshot_sequence_num der 0Wert vorhanden. transaction_sequence_num zeigt an, dass der Transaktion eine Transaktionsnummer zugewiesen wurde, da die Datenbankoption ALLOW_SNAPSHOT_ISOLATION und/oder die Datenbankoption READ_COMMITTED_SNAPSHOT aktiviert sind (ON).

  • XSN-58: Diese Transaktion wird nicht unter der Momentaufnahmeisolation ausgeführt. Es gelten die gleichen Informationen wie für XSN-57.

  • XSN-59: Dies ist die erste aktive Transaktion, die unter der Momentaufnahmeisolation ausgeführt wird. Diese Transaktion liest Daten, für die vor XSN-57 ein Commit ausgeführt wird, wie dies durch first_snapshot_sequence_num angezeigt wird. Die Ausgabe für diese Transaktion zeigt außerdem an, dass die maximale Versionskette, die für eine Zeile durchsucht wird, 1 beträgt und dass für jede Zeile, auf die zugegriffen wird, durchschnittlich 1 Version durchsucht wurde. Dies bedeutet, dass die Transaktionen XSN-57, XSN-58 und XSN-60 keine Zeilen geändert und kein Commit ausgeführt haben.

  • XSN-60: Dies ist die zweite Transaktion, die unter der Momentaufnahmeisolation ausgeführt wird. Die Ausgabe zeigt die gleichen Informationen an wie für XSN-59.

Weitere Informationen

SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
Dynamische Verwaltungssichten und Funktionen (Transact-SQL)
Dynamische Verwaltungssichten und -funktionen im Zusammenhang mit Transaktionen (Transact-SQL)