Bloqueios compartilhados feitos em RCSI (Read Committed Snapshot Isolation)

9

Estou aguardando por bloqueios compartilhados ( LCK_M_S) ao usar o RCSI. Meu entendimento é que isso não deveria acontecer, pois SELECTsnão exige bloqueios compartilhados ao usar o RCSI.

Como posso ver bloqueios compartilhados? É por causa de chaves estrangeiras?

grassbl8d
fonte
posso perguntar também, o sql server coloca bloqueios compartilhados nos registros se não houver índice, mesmo se o read_committed_snapshot estiver ativado?
grassbl8d

Respostas:

13

Como posso ver bloqueios compartilhados? É por causa de chaves estrangeiras?

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 RCSIpoderã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.

Paul White 9
fonte