Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL database w usłudze Microsoft Fabric
Ten dynamiczny widok zarządzania zwraca informacje o transakcjach zarejestrowanych do wersjonowania wiersza i przypisany mu numer sekwencyjny (XSN). Transakcje mogą być objęte jednym lub więcej z następujących warunków:
Gdy jedno lub obie
ALLOW_SNAPSHOT_ISOLATIONopcje iREAD_COMMITTED_SNAPSHOTopcje bazy danych toON:Transakcje ustanawiające migawkę w izolacji snapshot lub odczyt zadeklarowanej izolacji przy użyciu wersjonowania wiersza.
Transakcje generujące wersje wierszy, na przykład poprzez aktualizację lub usuwanie wierszy w bazie danych z włączonymi opcjami.
Transakcje generujące lub uzyskujące dostęp do wersji wierszy wyzwalaczy.
Transakcje wykorzystujące wersjonowanie wierszy podczas operacji indeksu online.
Transakcje wykorzystujące wersjonowanie wierszy w sesji Multiple Active Result Sets (MARS).
W wersjach SQL Server 2019 (15.x) i późniejszych transakcje modyfikujące dane w bazie danych z włączonym przyspieszonym odzyskiwaniem bazy danych (ADR), nawet gdy obie opcje snapshot bazy danych są .
OFF
Ten dynamiczny widok zarządzania nie obejmuje transakcji systemowych. Zakończone transakcje mogą pojawić się krótko podczas równoległej enumeracji lub sprzątania transakcji.
Note
Aby nazwać to z Azure Synapse Analytics, użyj nazwy sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.
Składnia
sys.dm_tran_active_snapshot_database_transactions
Zwracana tabela
| Nazwa kolumny | Typ danych | Description |
|---|---|---|
transaction_id |
bigint |
Unikalny numer identyfikacyjny przypisany transakcji. ID transakcji służy głównie do identyfikacji transakcji podczas operacji blokowania. |
transaction_sequence_num |
bigint |
Unikalny numer sekwencyjny przypisany przy pierwszej transakcji wymaga wersjonowania wiersza. Transakcje, które nie generują wersji wierszy ani nie używają skanów migawkowych, nie otrzymują numeru sekwencyjnego transakcji. |
commit_sequence_num |
bigint |
Zawsze NULL w tym ujęciu. |
session_id |
int |
ID sesji powiązanej z transakcją. |
is_snapshot |
bit |
0 = Nie jest transakcją izolacji migawki. 1 = Jest transakcją izolacji migawki. |
first_snapshot_sequence_num |
bigint |
Najniższy numer sekwencyjny transakcji zarejestrowany jako aktywny w migawkach aktualnie przechowywanych przez transakcję. Zawiera migawki na poziomie transakcji i wyciągu. NULL, jeśli taki numer sekwencyjny nie jest zapisany. |
max_version_chain_traversed |
int |
Maksymalna liczba wersji wierszy przejrzonych w jednym łańcuchu wersji przez transakcję. Zwraca 0, jeśli nie przejdziemy wersji wierszowych. |
average_version_chain_traversed |
float |
Średnia liczba wersji wierszy przejścia na przejście przez łańcuch wersji przez transakcję. Przejścia o długości 0 są wykluczone. Zwraca 0, jeśli nie przejdziemy wersji wierszowych. |
elapsed_time_seconds |
bigint |
Czas upłynął, w sekundach, od momentu uzyskania numeru sekwencyjnego transakcji. |
pdw_node_id |
int |
Dotyczy: Azure Synapse Analytics Identyfikator węzła, w ramach którego znajduje się ta dystrybucja. |
Permissions
W programie SQL Server i usłudze SQL Managed Instance wymagane jest VIEW SERVER STATE uprawnienia.
W usłudze SQL Database VIEW DATABASE STATE w bazie danych lub członkostwo w roli serwera ##MS_ServerStateReader##.
Uprawnienia dla programu SQL Server 2022 i nowszych
Wymaga VIEW SERVER PERFORMANCE STATE uprawnień na serwerze.
Uwagi
sys.dm_tran_active_snapshot_database_transactions raportuje transakcje przypisane do numeru sekwencyjnego transakcji (XSN) do wersjonowania wiersza. XSN jest przypisywany wtedy, gdy transakcja wymaga wersjonowania wiersza, niekoniecznie podczas rozpoczęcia lub fizycznego dostępu do magazynu wersji.
W bazie danych z lub READ_COMMITTED_SNAPSHOT włączoną ALLOW_SNAPSHOT_ISOLATION przykładami są następujące przykłady:
Transakcja działająca w izolacji serializowalnej otrzymuje XSN przy pierwszym generowaniu wersji wiersza, na przykład poprzez operację
UPDATEorDELETE.Transakcja działająca w izolacji snapshot otrzymuje XSN przy pierwszym ustanawianiu snapshotu do dostępu do danych, na przykład poprzez ,
SELECTktóry odczytuje tabelę użytkownika.BEGIN TRANSACTIONsam nie przypisuje XSN.
XSN są przydzielane z licznika rosnącego na poziomie całej instancji. Ten sam licznik jest używany dla migawek na poziomie instrukcji, więc XSN transakcji nie muszą być kolejne.
Examples
Poniższy przykład ilustruje cztery równoległe transakcje w bazie danych z ALLOW_SNAPSHOT_ISOLATION i ustawionymi READ_COMMITTED_SNAPSHOT na ON:
- XSN-57 wykonuje izolację
UPDATEw trybie niedostatecznie serializowalnym i pozostaje niezatwierdzony. - XSN-58 wykonuje kolejne
UPDATEw izolacji serializowalnej i pozostaje niezaangażowany. - XSN-59 wykonuje izolację
SELECTpod kątem snapshotu i pozostaje otwarty. - XSN-60 wykonuje kolejną
SELECTizolację pod kątem snapshotu i pozostaje otwarty.
Obie transakcje migawkowe ustanawiają swoje migawki, gdy XSN-57 i XSN-58 są aktywne. Ich oświadczenia zawierały SELECT wcześniejsze wersje wierszy zmodyfikowanych przez niezatwierdzone aktualizacje.
Wykonywane jest następujące zapytanie:
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;
Poniższe wyniki są obrazowe. Rzeczywiste identyfikatory, numery sekwencyjne, statystyki i upływ czasu się różnią.
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
Wyniki pokazują następujące rzeczy:
XSN-57 i XSN-58 używają izolacji szeregowej, więc
is_snapshot = 0. Instrukcje wykonywaneUPDATEw tych transakcjach generują wersje wierszy, ponieważ opcje snapshotów w bazie danych toON. To generowanie wersji powoduje przypisanie numerów sekwencyjnych transakcji. W tym przykładzie żadna z transakcji nie zawiera snapshotu, więcfirst_snapshot_sequence_numNULL jest taki.XSN-59 i XSN-60 mają
is_snapshot = 1. Ich wartość identyfikuje57najstarszą transakcję zarejestrowanąfirst_snapshot_sequence_numjako aktywną w momencie ustanowienia ich migawek.Dla XSN-59 i XSN-60 maksymalna i średnia długość przejścia łańcucha wersji to .
1Każde nagrane przejście odwiedzało wersję jednego rzędu. Średnia jest obliczana na podstawie przejść, które odwiedzają przynajmniej jedną wersję wierszową.XSN-59 i XSN-60 odczytywały wcześniejsze zatwierdzone wersje wierszy zmodyfikowane przez XSN-57 i XSN-58, które wciąż nie były zatwierdzone, gdy oba migawki zostały ustanowione.
Treści powiązane
- SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
- Widoki i funkcje dynamicznego zarządzania systemem
- Dynamiczne Widoki Zarządzania i Funkcje Związane z Transakcjami (Transact-SQL)