Desculpe pelo meu inglês ruim :)
Preciso de ajuda para entender a limpeza do armazenamento de versões. Eu tenho a seguinte situação.
- 12:00 Inicie uma instrução select no nível de isolamento do instantâneo e não confirme.
- 12:01 Inicie uma instrução de atualização (atualize uma única linha) no nível de isolamento de confirmação de leitura e confirme.
- 12h02 Inicie uma instrução select no nível de isolamento do instantâneo e não confirme.
- 12:03 Inicie uma instrução de atualização (atualize uma única linha) no nível de isolamento de leitura confirmada e confirme.
Agora, se olharmos para o armazenamento de versão, como
SELECIONE * DE sys.dm_tran_version_store
veremos 2 linhas (uma linha para cada instrução de atualização).
Agora, se confirmarmos as primeiras transações que começam às 12:00, nenhuma linha será removida do armazenamento de versão (mesmo que passe um minuto).
A pergunta é POR QUE??? .
Na minha opinião, uma das linhas deve ser removida do armazenamento de versão, porque não há nenhuma transação ativa que tenha acesso a essa versão.
Tentei também atualizar não 1 linha, mas 100 linhas (Total mais de 100 KB), mas tenho a mesma situação, o armazenamento de versão não está sendo removido.
Por favor, ajude-me a entender quando o armazenamento de versões está sendo limpo. Muito obrigado pela ajuda.
A condição mínima para que uma linha de versão seja coletada como lixo é quando o SQL Server determina, com base nos estados transacionais, que essa versão não é mais necessária.
Além disso, referindo-se às minhas notas internas do SQL Server, para gerenciamento do armazenamento de versão, o SQL Server executará uma limpeza regular a cada minuto com um processo em segundo plano para recuperar todo o espaço reutilizável do armazenamento de versão.
Você pode monitorar
Version generation rate and version cleanup rate
noSQLServer:Transactions
contador perfmon para descobrir a taxa na qual o espaço é adquirido e liberado do armazenamento de versão em KB/s.Verifique: Gerenciando o TempDB no SQL Server: Noções básicas do TempDB (armazenamento de versão: exemplo simples)