Udostępnij za pomocą


sys.dm_tran_version_store (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Zwraca wirtualną tabelę, która wyświetla wszystkie rekordy wersji w magazynie wersji. sys.dm_tran_version_store jest nieefektywny w uruchomieniu, ponieważ zapytuje cały magazyn wersji, a magazyn wersji może być bardzo duży.

Każdy wersjonowany rekord jest przechowywany jako dane binarne wraz z informacjami o śledzeniu lub statusie. Podobnie jak rekordy w tabelach baz danych, rekordy przechowywania wersji są przechowywane na stronach o rozmiarze 8192 bajtów. Jeśli rekord przekroczy 8192 bajty, zostanie podzielony na dwa różne rekordy.

Ponieważ wersjonowany rekord jest przechowywany jako binarny, nie ma problemów z różnymi sortowaniami z różnych baz danych. Użyj sys.dm_tran_version_store , aby znaleźć poprzednie wersje wierszy w reprezentacji binarnej tak, jak istnieją w magazynie wersji.

Składnia

sys.dm_tran_version_store  

Zwracana tabela

Nazwa kolumny Typ danych Description
transaction_sequence_num bigint Numer sekwencyjny transakcji generującej wersję rekordu.
version_sequence_num bigint Numer sekwencyjny rekordu wersji. Ta wartość jest unikalna w ramach transakcji generującej wersje.
database_id int Identyfikator bazy danych rekordu wersjonalnego.

W usłudze Azure SQL Database wartości są unikatowe w ramach pojedynczej bazy danych lub elastycznej puli, ale nie w obrębie serwera logicznego.
rowset_id bigint Identyfikator wiersza rekordu.
stan tinyint Wskazuje, czy wersja rekordu została podzielona na dwa rekordy. Jeśli wartość wynosi 0, rekord jest przechowywany na jednej stronie. Jeśli wartość wynosi 1, rekord dzieli się na dwa zapisy przechowywane na dwóch różnych stronach.
min_length_in_bytes smallint Minimalna długość rekordu w bajtach.
record_length_first_part_in_bytes smallint Długość pierwszej części zapisu wersjonowanego w bajtach.
record_image_first_part varbinary(8000) Obraz binarny pierwszej części rekordu wersji.
record_length_second_part_in_bytes smallint Długość drugiej części zapisu wersji w bajtach.
record_image_second_part varbinary(8000) Obraz binarny drugiej części rekordu wersji.

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.

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

  • XSN-60 jest tym samym co XSN-59.

Wykonywane jest następujące zapytanie.

SELECT  
    transaction_sequence_num,  
    version_sequence_num,  
    database_id rowset_id,  
    status,  
    min_length_in_bytes,  
    record_length_first_part_in_bytes,  
    record_image_first_part,  
    record_length_second_part_in_bytes,  
    record_image_second_part  
  FROM sys.dm_tran_version_store;  

Oto zestaw wyników.

transaction_sequence_num version_sequence_num database_id  
------------------------ -------------------- -----------  
57                      1                    9             
57                      2                    9             
57                      3                    9             
58                      1                    9             
  
rowset_id            status min_length_in_bytes  
-------------------- ------ -------------------  
72057594038321152    0      12                   
72057594038321152    0      12                   
72057594038321152    0      12                   
72057594038386688    0      16                   
  
record_length_first_part_in_bytes  
---------------------------------  
29                                 
29                                 
29                                 
33                                 
  
record_image_first_part                                               
--------------------------------------------------------------------  
0x50000C0073000000010000000200FCB000000001000000270000000000          
0x50000C0073000000020000000200FCB000000001000100270000000000          
0x50000C0073000000030000000200FCB000000001000200270000000000          
0x500010000100000002000000030000000300F800000000000000002E0000000000  
  
record_length_second_part_in_bytes record_image_second_part  
---------------------------------- ------------------------  
0                                  NULL  
0                                  NULL  
0                                  NULL  
0                                  NULL  

Wynik pokazuje, że XSN-57 stworzył trzy wersje wiersza z jednej tabeli, a XSN-58 stworzył jedną wersję wierszową z innej tabeli.

Zobacz też

Dynamiczne widoki zarządzania i funkcje (Transact-SQL)
Dynamiczne widoki zarządzania i funkcje związane z transakcjami (Transact-SQL)