Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
SQL-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_ISOLATIONDatenbankoptionenREAD_COMMITTED_SNAPSHOTsindON: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
UPDATEoder OperationDELETE, 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 TRANSACTIONallein 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
UPDATEunter serialisierbare Isolation aus und bleibt ungebunden. - XSN-58 führt eine weitere
UPDATEOperation unter serialisierbarer Isolation aus und bleibt ungebunden. - XSN-59 führt eine
SELECTIsolation unter Snapshot aus und bleibt offen. - XSN-60 führt ein weiteres
SELECTunter 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. DieUPDATEinnerhalb dieser Transaktionen ausgeführten Anweisungen generieren Zeilenversionen, da die Snapshot-Optionen der Datenbank sindON. Diese Versionsgenerierung führt dazu, dass Transaktionssequenznummern zugewiesen werden. Keine der beiden Transaktionen enthält in diesem Beispiel einen Snapshot, daherfirst_snapshot_sequence_numist NULL.XSN-59 und XSN-60 haben
is_snapshot = 1. Ihr Wert von57identifiziert die älteste Transaktion, diefirst_snapshot_sequence_numals 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.