Condividi tramite


sys.dm_tran_version_store (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Restituisce una tabella virtuale in cui vengono visualizzati tutti i record di versione nell'archivio delle versioni. sys.dm_tran_version_store è inefficiente da eseguire perché esegue query sull'intero archivio delle versioni e l'archivio delle versioni può essere molto grande.

Ogni record con versione viene archiviato come dato binario con alcune informazioni di rilevamento o stato. Analogamente ai record nelle tabelle di database, i record inclusi nell'archivio delle versioni vengono archiviati in pagine da 8192 byte. In caso di dimensioni superiori a 8192 byte, il record verrà suddiviso in due record distinti.

Poiché il record con versione viene archiviato come dato binario, non si verificheranno problemi in presenza di diverse regole di confronto di database diversi. Usare sys.dm_tran_version_store per trovare le versioni precedenti delle righe nella rappresentazione binaria così come esistono nell'archivio delle versioni.

Sintassi

sys.dm_tran_version_store  

Tabella restituita

Nome colonna Tipo di dati Descrizione
transaction_sequence_num bigint Numero di sequenza della transazione che genera la versione del record.
version_sequence_num bigint Numero di sequenza del record con versione. Questo valore è univoco all'interno della transazione di generazione della versione.
database_id int ID di database del record con versione.

In database SQL di Azure i valori sono univoci all'interno di un database singolo o di un pool elastico, ma non all'interno di un server logico.
rowset_id bigint ID del set di righe del record.
status tinyint Indica se un record con versione è stato suddiviso in due record. Se il valore è 0, il record è archiviato in una pagina. Se è 1, il record è suddiviso in due record archiviati in due pagine diverse.
min_length_in_bytes smallint Lunghezza minima del record in byte.
record_length_first_part_in_bytes smallint Lunghezza della prima parte del record con versione, espressa in byte.
record_image_first_part varbinary(8000) Immagine binaria della prima parte del record con versione.
record_length_second_part_in_bytes smallint Lunghezza della seconda parte del record con versione, espressa in byte.
record_image_second_part varbinary(8000) Immagine binaria della seconda parte del record con versione.

Autorizzazioni

In SQL Server e Istanza gestita di SQL è richiesta l'autorizzazione VIEW SERVER STATE.

Negli obiettivi del servizio Basic del Database SQL, S0 e S1 e per i database nei pool elastici, è richiesto l'account amministratore del server, l'account amministratore di Microsoft Entra o l’adesione nel ##MS_ServerStateReader## al ruolo del server. Per tutti gli altri obiettivi di servizio database SQL, è necessaria l'autorizzazione VIEW DATABASE STATE per il database o l'adesione ruolo del server ##MS_ServerStateReader##.

Autorizzazioni per SQL Server 2022 e versioni successive

È richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE per il server.

Esempi

Nell'esempio seguente viene utilizzato uno scenario di test in cui quattro transazioni simultanee, ognuna identificata da un numero di sequenza della transazione (XSN), vengono eseguite in un database con le opzioni ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT impostate su ON. Vengono eseguite le transazioni seguenti:

  • XSN-57 è un'operazione di aggiornamento con isolamento serializzabile.

  • XSN-58 è uguale a XSN-57.

  • XSN-59 è un'operazione di selezione con isolamento dello snapshot.

  • XSN-60 è uguale a XSN-59.

Viene eseguita la query seguente.

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;  

Il set di risultati è il seguente.

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  

L'output indica che XSN-57 ha creato tre versioni di riga da una tabella e che XSN-58 ha creato una versione di riga da un'altra tabella.

Vedi anche

Funzioni a gestione dinamica e DMV (Transact-SQL)
Funzioni e viste DMV relative alle transazioni (Transact-SQL)