Estou aguardando por bloqueios compartilhados ( LCK_M_S
) ao usar o RCSI. Meu entendimento é que isso não deveria acontecer, pois SELECTs
não exige bloqueios compartilhados ao usar o RCSI.
Como posso ver bloqueios compartilhados? É por causa de chaves estrangeiras?
sql-server
sql-server-2008
locking
snapshot-isolation
grassbl8d
fonte
fonte
Respostas:
Sim. O SQL Server reverte para a implementação de bloqueio do nível de isolamento confirmado pela leitura ao acessar uma tabela com a finalidade de validar restrições de chave estrangeira. Isso é necessário para correção , e não pode ser desativado.
O comportamento se aplica apenas a instruções de modificação de dados. Bloqueios compartilhados são realizados apenas ao verificar os dados relacionados à chave estrangeira. Outros acessos a dados no mesmo plano de execução podem continuar usando o controle de versão de linha.
Se o SQL Server não fizer isso, as instruções de modificação de dados
RCSI
poderão acabar violando a restrição de chave estrangeira, porque a verificação de integridade usava dados desatualizados (com versão).Infelizmente, atualmente não há uma maneira suportada de ver essa alteração no comportamento de bloqueio em um plano de execução. É possível ver as dicas de travamento interno quando o sinalizador de rastreamento 8607 está ativo.
fonte