sys.dm_tran_version_store (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Retorna uma tabela virtual que exibe todos os registros de versão no repositório de versão. sys.dm_tran_version_store é ineficiente para ser executado porque consulta todo o repositório de versão e o repositório de versão 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 ordenações diferentes de bancos de dados diferentes. Use sys.dm_tran_version_store para localizar as versões anteriores das linhas na representação binária conforme elas existem no repositório 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 sequência da transação que gera a versão de registro. |
version_sequence_num | bigint | Número de sequê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. No Banco de Dados SQL do Azure, os valores são exclusivos em um único banco de dados ou em um pool elástico, mas não em um servidor lógico. |
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
No SQL Server e na Instância Gerenciada de SQL, requer a permissão VIEW SERVER STATE
.
Nos objetivos de serviço do Banco de Dados SQL Básico, S0 e S1 e para bancos de dados em pools elásticos, é necessário ter a conta do administrador do servidor, a conta do administrador do Microsoft Entra ou a associação à ##MS_ServerStateReader##
função de servidor. Em todos os outros objetivos de serviço do Banco de Dados SQL, a permissão VIEW DATABASE STATE
no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##
são necessárias.
Permissões do SQL Server 2022 e posteriores
É necessária a permissão VIEW SERVER PERFORMANCE STATE no servidor.
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 sequê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 em 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;
Veja a seguir 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.
Confira também
Exibições e funções de gerenciamento dinâmico (Transact-SQL)
Funções e exibições de gerenciamento dinâmico relacionadas à transação (Transact-SQL)