sys.dm_tran_version_store (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Returnerar en virtuell tabell som visar alla versionsposter i versionslagret. sys.dm_tran_version_store är ineffektivt att köra eftersom det frågar hela versionslagret, och versionsmagasinet kan vara mycket stort.

Varje versionerad post lagras som binär data tillsammans med viss spårnings- eller statusinformation. Liknande poster i databastabeller lagras versionslagringsposter på sidor på 8192 byte. Om en post överstiger 8192 byte kommer posten att delas upp mellan två olika poster.

Eftersom den versionerade posten lagras som binär finns det inga problem med olika sorteringar från olika databaser. Använd sys.dm_tran_version_store för att hitta tidigare versioner av raderna i binär representation så som de finns i versionslagret.

Syntax

sys.dm_tran_version_store  

Tabell returnerad

Kolumnnamn Datatyp Description
transaction_sequence_num bigint Sekvensnummer för transaktionen som genererar postversionen.
version_sequence_num bigint Versionspostens sekvensnummer. Detta värde är unikt inom versionsgenererande transaktionen.
database_id int Databas-ID för den versionerade posten.

I Azure SQL Database är värdena unika i en enskild databas eller en elastisk pool, men inte inom en logisk server.
rowset_id bigint Radset-ID för posten.
status tinyint Indikerar om en versionerad post har delats upp mellan två poster. Om värdet är 0 lagras posten på en sida. Om värdet är 1 delas posten upp i två poster som lagras på två olika sidor.
min_length_in_bytes smallint Minsta längd på posten i bytes.
record_length_first_part_in_bytes smallint Längden på den första delen av den versionerade posten i bytes.
record_image_first_part varbinär(8000) Binärbild av första delen av versionsinspelningen.
record_length_second_part_in_bytes smallint Längden på den andra delen av versionen i bytes.
record_image_second_part varbinär(8000) Binärbild av den andra delen av versionsposten.

Permissions

På SQL Server och SQL Managed Instance kräver VIEW SERVER STATE behörighet.

I SQL Database Grundläggande, S0och S1 tjänstmål och för databaser i elastiska pooler, serveradministratör konto, Microsoft Entra-administratör konto eller medlemskap i ##MS_ServerStateReader##serverrollen krävs. För alla andra SQL Database-tjänstmål krävs antingen VIEW DATABASE STATE behörighet för databasen eller medlemskap i ##MS_ServerStateReader## serverrollen.

Behörigheter för SQL Server 2022 och senare

Kräver BEHÖRIGHET FÖR VISNINGSSERVERNS PRESTANDATILLSTÅND på servern.

Examples

Följande exempel använder ett testscenario där fyra samtidiga transaktioner, var och en identifierad med ett transaktionssekvensnummer (XSN), körs i en databas där ALLOW_SNAPSHOT_ISOLATION och READ_COMMITTED_SNAPSHOT alternativen är inställda på ON. Följande transaktioner körs:

  • XSN-57 är en uppdateringsoperation under serialiserbar isolering.

  • XSN-58 är samma som XSN-57.

  • XSN-59 är en select-operation under snapshot-isolering.

  • XSN-60 är samma som XSN-59.

Följande fråga exekveras.

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;  

Här är resultatet.

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  

Resultatet visar att XSN-57 har skapat tre radversioner från en tabell och XSN-58 har skapat en radversion från en annan tabell.

Se även

Vyer och funktioner för dynamisk hantering (Transact-SQL)
Transaktionsrelaterade dynamiska hanteringsvyer och funktioner (Transact-SQL)