Efeito da dica do NOLOCK na selecção de instruções

Acho que a verdadeira questão é:

Se Eu não me importar com as leituras sujas, irá adicionar o com (NOLOCK) dica para uma instrução seleccionada afectar o desempenho de:

  1. a instrução de selecção actual
  2. outras transacções no quadro indicado

Exemplo:

Select * 
from aTable with (NOLOCK)
Author: Bob Probst, 2008-10-17

5 answers

1) Sim , uma selecção com NOLOCK irá terminar mais depressa do que uma selecção normal.

2) Sim , uma selecção com NOLOCK permitirá que as outras consultas contra a tabela efectuada terminem mais depressa do que uma selecção normal.

Porquê?

NOLOCK tipicamente (dependendo do seu motor DB) significa dar-me os seus dados, e eu não me importo em que estado ele está, e não se preocupe segurando-lo ainda enquanto você ler a partir dele. É tudo ao mesmo tempo mais rápido, menos com recurso intensivo, e muito perigoso.

Você deve ser avisado para nunca fazer uma atualização ou executar qualquer coisa crítica do sistema, ou onde a correção absoluta é necessária usando dados que se originaram de uma leitura NOLOCK. É absolutamente possível que estes dados contenham linhas que foram apagadas durante a execução da consulta ou que foram apagadas em outras sessões que ainda não foram finalizadas. É possível que estes dados incluam linhas que tenham sido parcialmente atualizadas. É possível que estes dados contêm registos que violam restrições de chave estrangeiras. É possível que estes dados excluam linhas que foram adicionadas à tabela, mas ainda não foram autorizadas.

Você realmente não tem como saber qual é o estado dos dados.

Se você está tentando obter coisas como uma contagem de linhas ou outros dados resumidos onde alguma margem de erro é aceitável, então {[[0]} é uma boa maneira de aumentar o desempenho para essas consultas e evitar que elas tenham impacto negativo desempenho da base de dados.

Utilize sempre a dica NOLOCK com grande precaução e trate todos os dados que retorna de forma suspeita.

 259
Author: tom.dietrich, 2015-04-15 17:44:59

O NOLOCK torna as declarações mais selectas mais rápidas, devido à falta de bloqueios partilhados. Além disso, a falta de emissão das fechaduras significa que os escritores não serão impedidos por Sua Seleção.

NOLOCK é funcionalmente equivalente a um nível de isolamento de leitura não autorizada. A principal diferença é que você pode usar NOLOCK em algumas tabelas, mas não em outras, se você escolher. Se você planeja usar NOLOCK em todas as tabelas de uma consulta complexa, então usando SET TRANSACTION ISOLATION lead UNCOMMITTED é mais fácil, porque não tens de aplicar a dica em todas as mesas.

Aqui está a informação sobre todos os níveis de isolamento à sua disposição, bem como dicas de tabela.

DEFINIR O NÍVEL DE ISOLAMENTO DA TRANSACÇÃO

Table Hint (Transact-SQL)

 59
Author: Pittsburgh DBA, 2008-10-16 21:53:05

Além do que é dito acima, você deve estar muito ciente de que nolock realmente impõe o risco de você não obter linhas que foram cometidas antes de a sua escolha.

Ver http://blogs.msdn.com/sqlcat/archive/2007/02/01/previously-committed-rows-might-be-missed-if-nolock-hint-is-used.aspx

 13
Author: , 2011-09-08 22:08:46
Será mais rápido porque não tem de esperar pelas Fechaduras.
 6
Author: StingyJack, 2008-10-16 20:32:12
  • A seleção atual começará mais cedo, porque não precisa esperar.

  • As outras transacções Irão abrandar, pois estão agora a partilhar o seu tempo de processamento com uma nova transacção.

Não o uses. O NOLOCK é muitas vezes explorado como uma forma mágica de acelerar a leitura de bases de dados, mas tento evitar usá-lo sempre que possível.

O conjunto de resultados pode conter linhas que ainda não foram comprometidas, que são frequentemente enroladas posteriormente volta.

Um conjunto de erros ou resultados pode estar vazio, faltar linhas ou mostrar a mesma linha várias vezes.

Isto é porque outras transacções estão a mover dados ao mesmo tempo que o estás a ler.

O READ commited adiciona um problema adicional onde os dados são corrompidos dentro de uma única coluna onde vários utilizadores mudam a mesma célula simultaneamente.

Há outros efeitos secundários também, que resultam em sacrificar o aumento de velocidade que esperava ganhar na primeira lugar. Agora sabes, nunca mais a uses.
 1
Author: Knickerless-Noggins, 2016-02-05 16:00:08