sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL 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_ISOLATION opcje i READ_COMMITTED_SNAPSHOT opcje bazy danych to ON:

    • 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 w warstwie PodstawowaS0i S1 celów usługi oraz baz danych welastycznych pulachwymagane jest konto administratora serwera , konto administratora firmy Microsoft Entra lub członkostwo w roli serwera . We wszystkich innych celach usługi SQL Database wymagane jest uprawnienie 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ę UPDATE or DELETE .

  • Transakcja działająca w izolacji snapshot otrzymuje XSN przy pierwszym ustanawianiu snapshotu do dostępu do danych, na przykład poprzez , SELECT który odczytuje tabelę użytkownika. BEGIN TRANSACTION sam 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ę UPDATE w trybie niedostatecznie serializowalnym i pozostaje niezatwierdzony.
  • XSN-58 wykonuje kolejne UPDATE w izolacji serializowalnej i pozostaje niezaangażowany.
  • XSN-59 wykonuje izolację SELECT pod kątem snapshotu i pozostaje otwarty.
  • XSN-60 wykonuje kolejną SELECT izolację 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 wykonywane UPDATE w tych transakcjach generują wersje wierszy, ponieważ opcje snapshotów w bazie danych to ON. To generowanie wersji powoduje przypisanie numerów sekwencyjnych transakcji. W tym przykładzie żadna z transakcji nie zawiera snapshotu, więc first_snapshot_sequence_num NULL jest taki.

  • XSN-59 i XSN-60 mają is_snapshot = 1. Ich wartość identyfikuje 57 najstarszą transakcję zarejestrowaną first_snapshot_sequence_num jako aktywną w momencie ustanowienia ich migawek.

  • Dla XSN-59 i XSN-60 maksymalna i średnia długość przejścia łańcucha wersji to .1 Każ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.