O artigo online do MSDN " Escolhendo níveis de isolamento baseados em controle de versão de linha " declara:
- " tempdb deve ter espaço em disco suficiente para o armazenamento de versão. Se houver transações de execução muito longa, todas as versões geradas pelas transações de atualização durante o tempo devem ser mantidas em
tempdb
. Setempdb
ficar sem espaço, as operações de atualização não falharão, mas lerão operações usando controle de versão de linha podem falhar"
Você pode me explicar por quê?
tendo em conta que (citando o mesmo artigo):
- "Quando as opções
READ_COMMITTED_SNAPSHOT
ou doALLOW_SNAPSHOT_ISOLATION
banco de dados estão ATIVADAS, as transações de atualização e exclusão de um determinado banco de dados devem manter as versões de linha mesmo quando não há transações usando um nível de isolamento baseado em versão de linha... Porque as versões de registro são armazenadas em tempdb "
ou seja, as operações de atualização (mas não de leitura) requerem espaço para o controle de versão de linha deve ter falhado no IMO devido à falta de espaço.
E por que as operações de leitura falham se não exigem armazenamento de versão em tempdb ?
(Convertendo meu comentário em uma resposta. Não sei se isso é definitivo, mas faz sentido para mim. Se você puder provar que está errado, deixe-me saber nos comentários.)
As versões de linha não são realmente necessárias para concluir uma operação de gravação; eles são exigidos apenas pelos leitores que chegam e precisam dessas versões das linhas. Se eles precisam deles.
Se
tempdb
ficar sem espaço durante a geração da versão, embora não esteja tudo bem, pode acabar dando certo se nenhum leitor precisar dessas versões. Uma operação de leitura falharia apenas se precisasse de uma versão de uma linha que não estivesse emtempdb
.Além disso, qualquer operação de gravação é considerada mais importante que um
SELECT
, por razões óbvias (mesma ideia de quando o Deadlock Monitor descobre qual processo eliminar se houver um impasse), portanto, é preferível falhar a,SELECT
se possível.