O Read Committed Snapshot Isolation (RCSI) é bem compreendido. A principal maneira pela qual ele pode causar gargalos de desempenho é se as cadeias de versão ficarem muito longas. Existe algum tipo de espera que indique esse problema específico? Ou ele é mostrado apenas por outros tipos de espera (e se sim, quais?).
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
Isso geralmente não é um problema tão grande com RCSI quanto com SI. Os snapshots de declaração para RCSI tendem a ser mais recentes por natureza. Dito isso, ainda pode acontecer com declarações RCSI de longa duração.
Um custo importante do RCSI é o trabalho administrativo extra e o armazenamento. Se você ainda não estava usando versões para outra finalidade (como compilações de índice on-line), os 14 bytes adicionais por linha são um custo que cada atualização e exclusão (e algumas inserções) devem suportar. Isso também pode causar divisões no meio da página (ou registros encaminhados para heaps), que são relativamente caros para executar e registrar.
Em todo caso, gerar e limpar versões não é gratuito. Uma fração das capacidades do seu servidor agora é dedicada ao trabalho administrativo. Naturalmente, há muitos benefícios no RCSI também, mas você não está perguntando sobre eles.
Supondo que seu tempdb não esteja com dificuldades, ou perto disso, os efeitos nessa área geralmente são exagerados.
Não. Localizar a versão correta pode ser um trabalho administrativo, mas ainda é um trabalho ativo: o servidor não está esperando que nenhum recurso fique disponível.
Consultas que atravessam cadeias longas podem ser mais lentas — talvez seriamente — mas isso aparece principalmente como aumento no consumo de CPU. Você pode ver
SOS_SCHEDULER_YIELD
'esperas' maiores, mas elas não são diretamente atribuíveis à travessia da cadeia de versões.Existem DMVs e contadores de desempenho que você pode monitorar para uso excessivo de armazenamento de versão e comprimento de cadeia. Estatísticas de espera são para monitorar esperas, não uma panaceia para diagnosticar todas as ineficiências.
Adicionando à resposta de Paul: Uma maneira de monitorar o armazenamento de versões saindo do controle é usando contadores PerfMon
\SQLServer:Transactions\Version Store Size (KB)
\SQLServer:Transactions\Longest Transaction Running Time
Eles geralmente estão relacionados: o armazenamento de versões não pode ser limpo enquanto houver uma transação aberta que possa acessar os dados.