Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O NOLOCK (dica do SQL Server) é uma prática ruim?


Antes de trabalhar no Stack Overflow, eu era contra NOLOCK no principal que você poderia executar um SELECT com NOLOCK e obter resultados com dados que podem estar desatualizados ou inconsistentes. Um fator a se pensar é quantos registros podem ser inseridos/atualizados ao mesmo tempo em que outro processo pode estar selecionando dados da mesma tabela. Se isso acontecer muito, há uma alta probabilidade de deadlocks, a menos que você use um modo de banco de dados como READ COMMITED SNAPSHOT .

Desde então, mudei minha perspectiva sobre o uso de NOLOCK depois de testemunhar como ele pode melhorar SELECT desempenho, bem como eliminar impasses em um SQL Server carregado massivamente. Há momentos em que você pode não se importar se seus dados não estão exatamente 100% comprometidos e você precisa de resultados de volta rapidamente, mesmo que estejam desatualizados.

Faça a si mesmo uma pergunta ao pensar em usar NOLOCK :

Minha consulta inclui uma tabela com um número alto de INSERT /UPDATE comandos e eu me importo se os dados retornados de uma consulta podem estar faltando essas alterações em um determinado momento?

Se a resposta for não, use NOLOCK para melhorar o desempenho.
Acabei de fazer uma busca rápida pelo NOLOCK palavra-chave na base de código do Stack Overflow e encontramos 138 instâncias, então a usamos em alguns lugares.