Condividi tramite


sys.dm_tran_version_store (Transact-SQL)

Restituisce una tabella virtuale in cui sono visualizzati tutti i record con versione nell'archivio delle versioni. L'esecuzione di sys.dm_tran_version_store non è efficiente poiché determina l'esecuzione di query sull'intero archivio delle versioni, che può presentare dimensioni estremamente elevate.

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. Utilizzare sys.dm_tran_version_store per individuare le versioni precedenti delle righe in rappresentazione binaria incluse 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.

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

È richiesta l'autorizzazione VIEW SERVER STATE nel server.

Per visualizzare le colonne record_image_first_part e record_image_second_part è richiesta l'autorizzazione CONTROL SERVER. In caso contrario, queste colonne restituiranno NULL.

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;

Set di risultati:

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.