Compartilhar via


sys.dm_tran_version_store (Transact-SQL)

Retorna uma tabela virtual que exibe todos os registros de versão no armazenamento de versão. sys.dm_tran_version_store é ineficiente para execução, pois requer o armazenamento de toda a versão, e isso pode ser muito grande.

Cada registro com controle de versão é armazenado como dados binários juntamente com algumas informações de rastreamento ou de status. Semelhante a registros em tabelas de banco de dados, os registros de armazenamento de versão são armazenados em páginas de 8.192 bytes. Se um registro exceder 8.192 bytes, ele será dividido em dois registros diferentes.

Porque o registro com controle de versão é armazenado como binário, não há nenhum problema com agrupamentos diferentes de bancos de dados diferentes. Use sys.dm_tran_version_store para encontrar as versões anteriores das linhas em representação binária como existem no armazenamento de versão.

Sintaxe

sys.dm_tran_version_store

Tabela retornada

Nome da coluna

Tipo de dados

Descrição

transaction_sequence_num

bigint

Número de seqüência da transação que gera a versão de registro.

version_sequence_num

bigint

Número de seqüência da versão de registro. Este valor é exclusivo dentro da transação que gera a versão.

database_id

int

ID do banco de dados do registro com controle de versão.

rowset_id

bigint

ID do conjunto de linhas do registro.

status

tinyint

Indica se um registro com controle de versão foi dividido em dois registros. Se o valor for 0, o registro será armazenado em uma página. Se o valor for 1, o registro será dividido em dois registros armazenados em duas páginas diferentes.

min_length_in_bytes

smallint

Comprimento mínimo do registro em bytes.

record_length_first_part_in_bytes

smallint

Comprimento em bytes da primeira parte do registro com controle de versão.

record_image_first_part

varbinary(8000)

Imagem binária da primeira parte do registro com controle de versão.

record_length_second_part_in_bytes

smallint

Comprimento em bytes da segunda parte do registro com controle de versão.

record_image_second_part

varbinary(8000)

Imagem binária da segunda parte do registro com controle de versão.

Permissões

Requer a permissão VIEW SERVER STATE no servidor.

Para exibir as colunas record_image_first_part e record_image_second_part, é necessária a permissão CONTROL SERVER. Caso contrário, essas colunas retornarão NULL.

Exemplos

O exemplo a seguir usa um cenário de teste no qual quatro transações simultâneas, cada uma identificada por um XSN (número de seqüência de transação), estão sendo executadas em um banco de dados no qual as opções ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT estão definidas como ON. As seguintes transações estão sendo executadas:

  • XSN-57 é uma operação de atualização sob o isolamento serializável.

  • XSN-58 é o mesmo que XSN-57.

  • XSN-59 é uma operação de seleção sob o isolamento de instantâneo.

  • XSN-60 é o mesmo que XSN-59.

A consulta a seguir é executada.

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;

Aqui está o conjunto de resultados.

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

A saída mostra que XSN-57 criou três versões de linha de uma tabela e XSN-58 criou uma versão da linha de outra tabela.