Delen via


sys.dm_tran_version_store (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Geeft een virtuele tabel terug die alle versierecords in de versieopslag toont. sys.dm_tran_version_store is inefficiënt uit te voeren omdat het de hele versieopslag zoekt, en de versieopslag kan erg groot zijn.

Elke versiegefilterde record wordt opgeslagen als binaire gegevens, samen met wat tracking- of statusinformatie. Net als records in databasetabellen worden versieopslagrecords opgeslagen op pagina's van 8192 bytes. Als een record meer dan 8192 bytes is, wordt het record verdeeld over twee verschillende records.

Omdat het versiegekleurde record als binair wordt opgeslagen, zijn er geen problemen met verschillende collaties uit verschillende databases. Gebruik sys.dm_tran_version_store om de vorige versies van de rijen in binaire representatie te vinden zoals ze bestaan in de versiewinkel.

Syntaxis

sys.dm_tran_version_store  

Tabel geretourneerd

Kolomnaam Gegevenstype Description
transaction_sequence_num bigint Volgnummer van de transactie die de recordversie genereert.
version_sequence_num bigint Versierecord-sequentienummer. Deze waarde is uniek binnen de versiegenererende transactie.
database_id int Database-ID van het versiegekleurde record.

In Azure SQL Database zijn de waarden uniek binnen één database of een elastische pool, maar niet binnen een logische server.
rowset_id bigint Rijset-ID van het record.
status tinyint Geeft aan of een versiegeschilderd record is verdeeld over twee records. Als de waarde 0 is, wordt het record op één pagina opgeslagen. Als de waarde 1 is, wordt het record opgesplitst in twee records die op twee verschillende pagina's worden opgeslagen.
min_length_in_bytes smallint Minimale lengte van het record in bytes.
record_length_first_part_in_bytes smallint Lengte van het eerste deel van het versiegenoteerde record in bytes.
record_image_first_part varbinair (8000) Binaire afbeelding van het eerste deel van het versierecord.
record_length_second_part_in_bytes smallint Lengte van het tweede deel van de versie registreert in bytes.
record_image_second_part varbinair (8000) Binaire afbeelding van het tweede deel van het versierecord.

Permissions

Voor SQL Server en SQL Managed Instance is een machtiging vereist VIEW SERVER STATE .

Voor servicedoelstellingen van SQL Database Basic, S0 en S1 en voor databases in elastische pools is het serverbeheerdersaccount , het Microsoft Entra-beheerdersaccount of het lidmaatschap van de ##MS_ServerStateReader##serverrol vereist. Voor alle andere SQL Database-servicedoelstellingen is de VIEW DATABASE STATE machtiging voor de database of het lidmaatschap van de ##MS_ServerStateReader## serverfunctie vereist.

Machtigingen voor SQL Server 2022 en hoger

Vereist de machtiging PRESTATIESTATUS VAN DE WEERGAVESERVER op de server.

Voorbeelden

Het volgende voorbeeld gebruikt een testscenario waarin vier gelijktijdige transacties, elk geïdentificeerd door een transactiesequentienummer (XSN), draaien in een database met de ALLOW_SNAPSHOT_ISOLATION en READ_COMMITTED_SNAPSHOT opties op ON. De volgende transacties draaien:

  • XSN-57 is een update-operatie onder serialiseerbare isolatie.

  • XSN-58 is hetzelfde als XSN-57.

  • XSN-59 is een select-operatie onder snapshot-isolatie.

  • XSN-60 is hetzelfde als XSN-59.

De volgende query wordt uitgevoerd.

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;  

Hier is het resultatenoverzicht.

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  

De output toont aan dat XSN-57 drie rijversies heeft gemaakt van één tabel en XSN-58 één rijversie van een andere tabel.

Zie ook

Dynamische beheerweergaven en -functies (Transact-SQL)
Transactiegerelateerde dynamische beheerweergaven en -functies (Transact-SQL)