Tentando entender melhor os isolamentos de transação baseados em versionamento de linha - RCSI (Read Committed Snapshot Isolation and SNAPSHOT) - no SQL Server...
O artigo online do MSDN " Escolhendo níveis de isolamento baseados em controle de versão de linha " declara:
- *"Para a maioria dos aplicativos, o isolamento de confirmação de leitura usando controle de versão de linha é recomendado em vez do isolamento de instantâneo pelos seguintes motivos:
- Consome menos espaço tempdb do que o isolamento de instantâneo"*
o que contradiz a declaração de Kimberly L. Tripp, " SQL Server 2005 Row Versioning-Based Transaction Isolation " de Neal Graves:
- "Versão de linha
em leitura confirmada usando controle de versão de linha Para consultas executadas sob leitura confirmada usando controle de versão de linha, as versões de linha são necessárias apenas durante cada instrução SELECT na transação. No entanto, as versões de linha são mantidas até o final da transação. Este é um ponto importante a ser considerado para o armazenamento tempdb. O impacto do armazenamento será o mesmo que seria para o isolamento de instantâneo. "
Então, por que o RCSI usa menos (ou o mesmo) espaço?
ATUALIZAÇÃO:
Provavelmente formulei mal a pergunta original, mas isso implica que existem explicações e confirmações RTFM para ambas as "teorias" contraditórias e gostaria de entender:
Qual é a correta?
Por que aquele é realmente correto?
e
Por que outro não está realmente correto (Por que outro está errado?)?
O isolamento de instantâneo confirmado por leitura (isolamento de instantâneo em nível de instrução) potencialmente usa menos armazenamento do que o isolamento de instantâneo (isolamento de instantâneo em nível de transação) porque geralmente as versões de linha não são necessárias por um longo período de tempo após terem sido geradas.
Para o isolamento do instantâneo no nível da transação, as versões precisam permanecer durante toda a duração de uma transação, o que pode ser bastante longo (ou muito longo, como visto aqui ). É claro que as instruções também podem ser executadas por um longo tempo, mas geralmente é o caso de uma transação demorar mais.
Para enfatizar o ponto: uma transação executada sob isolamento de instantâneo tem a garantia de ver os dados confirmados como existiam no início da transação. Isso significa que as versões de linha devem ser mantidas até que toda a transação seja concluída. Onde a mesma transação está sendo executada sob RCSI, as versões de linha podem potencialmente ser liberadas após cada instrução. No geral, o isolamento de instantâneo tende a resultar em um tamanho de armazenamento de versão maior do que
RCSI
na mesma carga de trabalho.As mesmas versões são geradas com uma ou ambas as configurações ativadas. Acredito que Kimberly estava se referindo ao impacto do armazenamento no sentido da taxa de gravação, não do armazenamento usado, então as duas declarações que você mencionou não são contraditórias; apenas um pouco obscuro ou inespecífico.