Eu li muitas, muitas tomadas diferentes sobre como o NOLOCK ou os níveis de isolamento não confirmados de leitura funcionam em termos de travas / travas tomadas.
Ao usar um SELECT com NOLOCK ou no nível Read Uncommitted Isolation, o único bloqueio é retirado um Schema Stability Lock ou os bloqueios compartilhados são obtidos continuamente à medida que a consulta funciona nas linhas? (Obviamente, esses bloqueios precisariam ser descartados imediatamente)
E as travas? Como as páginas na memória são tratadas, pois suponho que fazer referência a um objeto na memória que está no meio de ser modificado não é permitido?
As leituras
READ UNCOMMITTED
isoladas levam apenasSch-S
. Nenhum bloqueio compartilhado é adquirido (há algumas raras exceções ).As leituras sob bloqueio
READ COMMITTED
recebemS
bloqueios que geralmente são liberados assim que o processador de consulta passa para a próxima linha (novamente, há algumas exceções ).As páginas são sempre travadas durante a leitura ou escrita para garantir a consistência física, geralmente uma trava compartilhada na leitura e uma trava exclusiva na gravação. Para obter detalhes, consulte Inside SQL Server Latches por Bob Ward via PASStv.
Os bloqueios são um detalhe de implementação usado pelo SQL Server para fornecer as garantias fornecidas pelo nível de isolamento .