Pergunta

Eu acho que a verdadeira questão é:

Se eu não se preocupam com sujo lê, irá adicionar o com (NOLOCK) dica para uma instrução SELECT afetar o desempenho de:

  1. a instrução SELECT atual
  2. outras transações contra a tabela dada

Exemplo:

Select * 
from aTable with (NOLOCK)
Foi útil?

Solução

1) Sim , um seleto com NOLOCK vai completar mais rápido do que a normal de select.

2) Sim , um seleto com NOLOCK permitirá que outras consultas contra a tabela afetada para completar mais rápido do que a normal de select.

Por que isso seria?

NOLOCK normalmente (dependendo do seu motor DB) os meios dar-me seus dados, e eu não me importo o estado em que se encontra, e não se preocupam segurando-o ainda quando você ler a partir dele. É tudo ao mesmo tempo mais rápido, menos uso intensivo de recursos, e muito, muito perigoso.

Você deve ser avisado para não fazer uma atualização do sistema ou executar qualquer coisa crítica, ou onde exatidão absoluta é necessária utilizando os dados que deram origem a partir de uma leitura NOLOCK. É absolutamente possível que esses dados contém linhas que foram excluídos durante a execução da consulta ou que foram excluídos em outras sessões que ainda têm de ser finalizado. É possível que esses dados incluem linhas que foram parcialmente atualizados. É possível que esses dados contém registros que violam restrições de chave estrangeira. É possível que isto exclui dados linhas que foram adicionadas à mesa, mas ainda têm de ser cometido.

Você realmente não têm nenhuma maneira de saber o que o estado dos dados é.

Se você está tentando fazer as coisas como uma contagem de linha ou outros dados de resumo onde alguns margem de erro é aceitável, então NOLOCK é uma boa maneira de aumentar o desempenho para essas consultas e evitar que eles negativamente o desempenho do banco de dados de impacto.

Always use a dica NOLOCK com grande cautela e tratar todos os dados que ele retorna com desconfiança.

Outras dicas

NOLOCK faz declarações mais seleto mais rápido, por causa da falta de bloqueios compartilhados. Além disso, a falta de emissão das fechaduras meios que os escritores não vai ser impedida por seu SELECT.

NOLOCK é funcionalmente equivalente a um nível de isolamento de LEITURA NÃO. A principal diferença é que você pode usar NOLOCK em algumas mesas, mas não outros, se você escolher. Se você planeja usar NOLOCK em todas as tabelas em uma consulta complexa, em seguida, usando SET TRANSACTION ISOLATION LEVEL LEIA UNCOMMITTED é mais fácil, porque você não tem que aplicar a dica para cada mesa.

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

SET TRANSACTION ISOLATION LEVEL

Tabela Hint (Transact-SQL)

Além do que foi dito acima, você deve ser muito consciente de que nolock na verdade impõe o risco de você não recebendo linhas que tenham sido cometidos antes a sua escolha.

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

Ele será mais rápido porque ele não tem que esperar por bloqueios

  • SELECT corrente começará mais cedo, porque ele não tem que esperar.

  • As outras transações vai abrandar como eles estão agora compartilhando seu tempo de processamento com uma nova transação.

Não usá-lo.

NOLOCK é frequentemente explorado como uma forma mágica para acelerar banco de dados lê, mas eu tento evitar usá-lo whever possível.

O conjunto de resultados pode conter linhas que ainda não foram comprometidos, que são muitas vezes mais tarde revertida.

Um erro ou conjunto de resultados pode estar vazio, seja linhas ausentes ou exibir a mesma linha várias vezes.

Isto é porque outras transações estão se movendo dados ao mesmo tempo que você está lendo.

READ COMMITTED acrescenta um problema adicional onde os dados são corrompidos dentro de uma única coluna onde vários usuários mudar a mesma célula ao mesmo tempo.

Existem outros efeitos colaterais também, o que resultará em sacrificar o aumento da velocidade que você estava esperando para ganhar em primeiro lugar.

Agora você sabe, nunca usá-lo novamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top