No caso de várias atualizações do mesmo registro em uma única transação, quantas versões estão sendo armazenadas?

11

De acordo com o artigo do MSDN de Kimberly L. Tripp, " Isolamento de transação baseado em controle de versão de linha do SQL Server 2005 Row"

  • "... Todas as versões anteriores de um registro específico são encadeadas em uma lista vinculada; e no caso de transações baseadas em versionamento de linha de longa execução, o link deverá ser percorrido em cada acesso para alcançar a versão transacionalmente consistente de a fila"

que está na seção "Entendendo o controle de versão de linha", comum para seguir as seções "Controle de versão de linha na leitura confirmada usando controle de versão de linha" e "Controle de versão de linha no isolamento de captura instantânea".

Além disso, o exemplo de versão de linha devido a modificações é fornecido no contexto de várias atualizações do mesmo registro por várias transações (T1, T2, T3) apenas no INSTANTÂNEO.

Caso apenas uma transação atualize um registro várias vezes (por várias instruções), os armazenamentos de várias versões serão armazenados (vinculados) ou apenas a tomada no momento da "imagem" do INSTANTÂNEO obtida?

Bem, a resposta a esta pergunta deve responder imediatamente às minhas outras questões relacionadas pendentes:

Fulproof
fonte

Respostas:

11

No caso de várias atualizações do mesmo registro em uma única transação, quantas versões são armazenadas?

Apenas um.

A primeira atualização da linha gera uma versão de linha e bloqueia a linha exclusivamente. Atualizações posteriores na mesma linha da mesma transação não geram novas versões de linha.


Uma lista vinculada de versões de linha pode surgir da seguinte maneira:

  • A transação T1 em uma transação SNAPSHOT lê uma linha e vê o valor 'a'.

  • A transação T2 (em qualquer nível de isolamento) atualiza o valor de 'a' para 'b' e confirma. Isso gera uma versão de linha para o valor 'a'.

  • A transação T3 (em qualquer nível de isolamento) atualiza o valor de 'b' para 'c' e confirma. Isso gera uma versão de linha para o valor 'b'. Esta versão da linha é vinculada à versão da linha anterior para 'a'.

  • A transação T1 lê o valor da linha atravessando o link do valor armazenado na página atual ('c') até a versão da linha 'b' e, em seguida, retornando à versão da linha 'a'.

As versões de linha são geradas por alterações de dados, independentemente de haver uma transação de leitura existente (em qualquer nível de isolamento). As versões podem nunca ser necessárias, mas ainda são geradas - a mesma lista vinculada de versões é criada mesmo sem a transação T1.

Paul White 9
fonte