sys.dm_tran_active_snapshot_database_transactions
Aktualisiert: 05. Dezember 2005
In einer SQL Server-Instanz gibt diese dynamische Verwaltungssicht eine virtuelle Tabelle für alle aktiven Transaktionen zurück, die Zeilenversionen generieren oder potenziell auf sie 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 Snapshotisolationsstufe 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.
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 Snapshotscans verwenden, erhalten keine Transaktionssequenznummer. Weitere Informationen finden Sie unter Grundlegendes zu zeilenversionsbasierten Isolationsstufen. |
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 Snapshotisolationstransaktion 1 = Snapshotisolationstransaktion |
session_id |
int |
ID der Sitzung, die die Transaktion gestartet hat. |
first_snapshot_sequence_num |
bigint |
Niedrigste Transaktionssequenznummer der Transaktionen, die beim Erstellen eines Snapshots aktiviert waren. Bei der Ausführung einer Snapshottransaktion wird ein Snapshot aller zu diesem Zeitpunkt aktiven Transaktionen erstellt. Für Nichtsnapshottransaktionen 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. |
Hinweise
sys.dm_tran_active_snapshot_database_transactions meldet Transaktionen, denen eine Transaktionssequenznummer (XSN) zugewiesen wird. 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 Snapshotisolation 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 Snapshotisolation 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 bei jeder Transaktion, die in einer Datenbankmodul-Instanz gestartet wird, seriell inkrementiert.
Weitere Informationen zu Transaktionssequenznummern finden Sie unter Grundlegendes zu zeilenversionsbasierten Isolationsstufen.
Berechtigungen
Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.
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 Aktualisierungsvorgang auf der serialisierbaren Isolationsstufe.
- XSN-58 entspricht XSN-57.
- Bei XSN-59 handelt es sich um einen SELECT-Vorgang unter der Snapshotisolation.
- 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;
Dies 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 von sys.dm_tran_active_snapshot_database_transactions ausgewertet:
- XSN-57: Da diese Transaktion nicht unter der Snapshotisolation ausgeführt wird, ist der Wert von
is_snapshot
undfirst_snapshot_sequence_num ``0
.transaction_sequence_num
zeigt an, dass dieser Transaktion eine Transaktionssequenznummer zugewiesen wurde, da mindestens eine der Datenbankoptionen ALLOW_SNAPSHOT_ISOLATION und READ_COMMITTED_SNAPSHOT auf ON festgelegt ist. - XSN-58: Diese Transaktion wird nicht unter der Snapshotisolation ausgeführt. Es gelten die gleichen Informationen wie für XSN-57.
- XSN-59: Dies ist die erste aktive Transaktion, die unter der Snapshotisolation 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, durchschnittlich1
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 Snapshotisolation ausgeführt wird. Die Ausgabe zeigt die gleichen Informationen an wie für XSN-59.
Siehe auch
Verweis
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
Dynamische Verwaltungssichten und -funktionen
Dynamische Verwaltungssichten und Funktionen in Verbindung mit Transaktionen
Andere Ressourcen
Verwenden von auf Zeilenversionsverwaltung basierenden Isolationsstufen
Grundlegendes zu zeilenversionsbasierten Isolationsstufen
Auswählen von auf Zeilenversionsverwaltung basierenden Isolationsstufen
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version | Verlauf |
---|---|
05. Dezember 2005 |
|