Udostępnij za pomocą


sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w Microsoft Fabric

W instancji SQL Server ten dynamiczny widok zarządzania zwraca wirtualną tabelę dla wszystkich aktywnych transakcji, które generują lub potencjalnie mają dostęp do wersji wierszy. Transakcje są uwzględniane pod jednym lub więcej z następujących warunków:

  • Gdy oba ALLOW_SNAPSHOT_ISOLATION i READ_COMMITTED_SNAPSHOT opcje bazy danych są ustawione na ON:

    • Istnieje jeden wiersz dla każdej transakcji działającej na poziomie izolacji snapshotów lub poziomie read-commitowanego izolowania wykorzystującym wersowanie wiersza.

    • Dla każdej transakcji jest jeden wiersz, który powoduje utworzenie wersji wiersza w bieżącej bazie danych. Na przykład transakcja generuje wersję wiersza poprzez aktualizację lub usunięcie wiersza w bieżącej bazie danych.

  • Gdy wyzwalacz jest uruchamiany, istnieje jeden wiersz transakcji, w ramach którego wyzwalacz jest wykonywany.

  • Gdy procedura indeksowania online jest uruchomiona, istnieje jeden wiersz dla transakcji, która tworzy indeks.

  • Gdy sesja Multiple Active Results Sets (MARS) jest włączona, dla każdej transakcji uzyskującej dostęp do wersji wiersza jest jeden wiersz.

Ten dynamiczny widok zarządzania nie obejmuje transakcji systemowych.

Uwaga / Notatka

Aby wywołać to z Azure Synapse Analytics lub Analytics Platform System (PDW), 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 do transakcji. ID transakcji służy głównie do identyfikacji transakcji podczas operacji blokowania.
transaction_sequence_num bigint Numer sekwencyjny transakcji. Jest to unikalny numer sekwencyjny, który jest przypisywany transakcji na jej początku. Transakcje, które nie generują rekordów wersji i nie używają skanów migawkowych, nie otrzymają numeru sekwencyjnego transakcji.
commit_sequence_num bigint Numer sekwencyjny wskazujący, kiedy transakcja się kończy (zatwierdza lub zatrzymuje się). Dla aktywnych transakcji wartość wynosi NULL.
is_snapshot int 0 = Nie jest transakcją izolacji migawki.

1 = Jest transakcją izolacji migawki.
session_id int Identyfikator sesji, która rozpoczęła transakcję.
first_snapshot_sequence_num bigint Najniższy numer sekwencyjny transakcji z aktywnych transakcji w momencie wykonania snapshotu. Podczas wykonania transakcja migawkowa wykonuje migawkę wszystkich aktywnych transakcji w danym momencie. Dla transakcji niesnapshotowych ta kolumna pokazuje 0.
max_version_chain_traversed int Maksymalna długość łańcucha wersji, którą przechodzimy, aby znaleźć transakcyjnie spójną wersję.
average_version_chain_traversed prawdziwy Średnia liczba wersów wierszy w łańcuchach wersji, które są przechodzine.
elapsed_time_seconds bigint Czas od momentu uzyskania numeru sekwencyjnego transakcji.
pdw_node_id int Dotyczy do: Azure Synapse Analytics, Analytics Platform System (PDW)

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 uprawnienie.

W przypadku celów usługi SQL Database Basic, S0 i S1 oraz baz danych w elastycznych pulach wymagane jest konto administratora serwera , konto administratora firmy Microsoft Entra lub członkostwo w ##MS_ServerStateReader##roli serwera . We wszystkich innych celach usługi SQL Database wymagane VIEW DATABASE STATE jest uprawnienie do bazy danych lub członkostwo w ##MS_ServerStateReader## roli serwera.

Uprawnienia dla programu SQL Server 2022 i nowszych

Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI SERWERA na serwerze.

Uwagi

sys.dm_tran_active_snapshot_database_transactions raportuje transakcje, którym przypisany jest numer sekwencyjny transakcji (XSN). XSN jest przypisywany w momencie, gdy transakcja po raz pierwszy wchodzi do magazynu wersji. W bazie danych włączonej do izolacji migawek lub zadeklarowanej izolacji odczytu z wykorzystaniem wersjonowania wiersza, przykłady pokazują, kiedy do transakcji przypisany jest XSN:

  • Jeśli transakcja jest wykonywana na poziomie izolacji serializowalnej, XSN jest przypisywany w momencie, gdy transakcja po raz pierwszy wykona polecenie, takie jak operacja UPDATE, które powoduje utworzenie wersji wiersza.

  • Jeśli transakcja jest wykonywana w izolacji snapshot, XSN jest przypisywany przy wykonywaniu dowolnego polecenia języka manipulacji danymi (DML), w tym operacji SELECT.

Numery sekwencji transakcji są stopniowo zwiększane dla każdej transakcji rozpoczętej w instancji silnika bazy danych.

Przykłady

Poniższy przykład wykorzystuje scenariusz testowy, w którym cztery równoległe transakcje, każda oznaczona numerem sekwencji transakcji (XSN), są uruchamiane w bazie danych, w której opcje ALLOW_SNAPSHOT_ISOLATION i READ_COMMITTED_SNAPSHOT są ustawione na ON. Następujące transakcje są w trakcie:

  • XSN-57 to operacja aktualizacji w izolacji serializowanej.

  • XSN-58 jest tym samym co XSN-57.

  • XSN-59 to operacja selekcyjna w izolacji migawkowych

  • XSN-60 jest taki sam jak XSN-59.

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;  

Oto zestaw wyników.

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  

Poniższe informacje oceniają wyniki sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57: Ponieważ ta transakcja nie jest prowadzona w izolacji snapshotów, is_snapshot wartości i first_snapshot_sequence_num są .0 transaction_sequence_num pokazuje, że do tej transakcji przypisano numer sekwencyjny transakcji, ponieważ jedna lub obie opcje ALLOW_SNAPSHOT_ISOLATION lub READ_COMMITTED_SNAPSHOT bazy danych są WŁĄCZONE.

  • XSN-58: Ta transakcja nie jest prowadzona w izolacji snapshot i te same informacje dotyczą XSN-57.

  • XSN-59: To pierwsza aktywna transakcja działająca w izolacji snapshotów. Ta transakcja odczytuje dane zatwierdzone przed XSN-57, co wskazuje .first_snapshot_sequence_num Wynik tej transakcji pokazuje również maksymalną liczbę przejścia łańcucha wersji dla wiersza i 1 przeszedł średnią 1 wersji dla każdego wiersza, do którego się uchodzi. Oznacza to, że transakcje XSN-57, XSN-58 i XSN-60 nie zmodyfikowały wierszy ani nie zostały zatwierdzone.

  • XSN-60: To druga transakcja przeprowadzana w izolacji snapshotów. Wyjście pokazuje te same informacje co XSN-59.

Zobacz też

USTAWIĆ POZIOM IZOLACJI TRANSAKCJI (Transact-SQL)
Dynamiczne widoki zarządzania i funkcje (Transact-SQL)
Dynamiczne widoki zarządzania i funkcje związane z transakcjami (Transact-SQL)