Início > Performance > DICA do DIA: Usando NOLOCK

DICA do DIA: Usando NOLOCK

SQL Server utiliza mecanismos de bloqueio (LOCK) para garantir a  integridade de dados. O fato é que muitas vezes o bloqueio (LOCK) impacta diretamente na performance do sistema.

Por exemplo, veja os dois comandos:
1) SELECT COUNT(Nome) FROM TabelaPessoas
2) INSERT TabelaPessoas (Nome) VALUES (‘Fabricio’)

Se forem executados simultaneamente, os comandos efetuarão leitura (SELECT) e escrita (INSERT) contra a mesma tabela. Entretanto, o banco de dados garante a integridade e executa um comando por vez. Em outras palavras, o comando de SELECT não pode ocorrer no mesmo instante que o INSERT. Esse é um caso simples e inofensivo, mas pense agora nos sistemas de grande porte.

Um banco de dados que precisa executar 100 transações por segundo, mas precisa gerar alguns relatórios rápidos. As transações correspondem aos INSERTS, enquanto que os relatórios são SELECT. Como podemos melhorar a performance dos INSERT que concorrem com comandos SELECT?

Solução: Uso de NOLOCK
O comando SELECT permite o uso de uma opção denominada NOLOCK, evitando assim os bloqueios com os comandos de INSERT. O uso é simples, bastando adicionar algumas palavras após a declaração da tabela.

SELECT COUNT(Nome) FROM TabelaPessoas WITH (NOLOCK)

Dessa forma, o comando WITH (NOLOCK) indica que não será necessário bloquear a tabela durante a leitura dos dados.

Recomendação
O uso de NOLOCK indiscrinado pode causar problemas transitórios devido a movimentação de dados sem bloqueios. Veja os exemplos Efeitos colaterais do NOLOCK – Parte I e Efeitos colaterais do NOLOCK – Parte 2.

A partir do SQL Server 2005/2008, existe uma solução mais elegante que é o uso do READ COMMITTED SNAPSHOT no banco de dados. O melhor de tudo é que essa é uma configuração do banco de dados e não necessita alteração em código.

Fonte: Fabricio Catae


Sugiro a leitura dos Posts abaixo, do blog do Fabricio Catae, para um melhor entendimento desde assunto…

Como usar SELECT WITH NOLOCK para melhorar a Performance?

NOLOCK ou WITH (NOLOCK): Qual a sintaxe correta?

Problemas com NOLOCK (SQL Server)

Efeitos colaterais do WITH (NOLOCK) – Parte I

Efeitos Colaterais do WITH (NOLOCK) – Parte II

UPDATE WITH (NOLOCK): Como funciona?

Checklist: Performance do Servidor (Windows)

Checklist: Performance do Servidor (SQL)

Artigo: Perfmon- Falso Sentido de Monitoração

Artigo: Os 7 Grandes Mitos do Perfmon:

Artigo: Contadores do Perfmon

Desafio: Analisando Servidor com Perfmon

Artigo: Monitorando com o Perfmon

Fonte: Blog do Fabricio Catae


Leiam também:

Concorrência de Dados – SQL Server

Cuidado ao escrever queries

Anúncios
Categorias:Performance
  1. Nenhum comentário ainda.
  1. 05/08/2013 às 13:46

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: