Nem sempre é ruim.
Obviamente, ele permite a leitura de valores não confirmados (que podem ser revertidos e, portanto, nunca existiram logicamente), além de permitir fenômenos como a leitura de valores várias vezes ou não.
Os únicos níveis de isolamento que garantem que você não encontrará essas anomalias são serializáveis / instantâneos. Em valores de leitura repetíveis, pode ser perdida se uma linha for movida (devido a uma atualização de chave) antes da varredura chegar a essa linha, em valores confirmados de leitura poderão ser lidos duas vezes se uma atualização de chave fizer com que uma linha lida anteriormente avance.
nolock
No entanto, é mais provável que esses problemas ocorram porque, por padrão, nesse nível de isolamento, ele usará uma verificação ordenada de alocação quando estima que há mais de 64 páginas para serem lidas . Assim como a categoria de problemas que surgem quando as linhas se movem entre as páginas devido às atualizações da chave de índice, essas verificações ordenadas de alocação também são vulneráveis a problemas com divisões de página (onde as linhas podem ser perdidas se a página recém-alocada estiver mais cedo no arquivo que o ponto) já digitalizados ou lidos duas vezes se uma página já digitalizada for dividida em uma página posterior do arquivo).
Pelo menos para consultas simples (tabela única), é possível desencorajar o uso dessas verificações e obter uma verificação ordenada por chave nolock
, simplesmente adicionando um ORDER BY index_key
à consulta para que a Ordered
propriedade da IndexScan
seja true
.
Mas se o seu aplicativo de relatórios não precisar de números absolutamente precisos e puder tolerar a maior probabilidade de tais inconsistências, isso poderá ser aceitável.
Mas certamente você não deve jogar todas as perguntas na esperança de que seja um botão "turbo" mágico. Além da maior probabilidade de encontrar resultados anômalos nesse nível de isolamento ou de nenhum resultado (erro "Não foi possível continuar a varredura com o NOLOCK devido ao movimento dos dados"), existem casos em que o desempenho nolock
pode ser muito pior .