segunda-feira, 31 de agosto de 2015

Banco de Dados (SQL Server) - Utilizando NOLOCK para aumento de performance

O banco de dados SQL Server por padrão utiliza LOCK , uma espécie de mecanismo de segurança, com a finalidade de garantir a consistência e integridade de dados.

O que isso quer dizer na prática?

Na prática quer dizer que os comandos são executados um a cada vez e não simultaneamente.  Isso acontece para tentar garantir a integridade e a consistência de dados. Já que o banco "trava" a tabela, não podendo outras threads ou outros usuários poderem utilizar a tabela, até que o comando seja finalizado.



O comando NOLOCK evita esses bloqueios desnecessários e não acontece os deadlocks.
Sintaxe do Comando:
"Select * from table with (NOLOCK)"

Quais situações seria interessante o uso e porque utilizar o NOLOCK? 

Imagine em uma base de dados, que há bilhares de dados. O tempo que levaria para selecionar todos estes dados seria muito grande, inclusive com junções de várias tabelas. Agora imagine, uma rotina no banco que faz um update 2 - 3 vezes ao dia. Com o LOCK padrão , os comandos select seriam executados um a um , e logo depois o update a partir do select um a um. Podemos imaginar que o tempo gasto neste job seria muito alto. Em um sistema enterprise, o LOCK seria inviável, pelo fato que causaria lentidão e até mesmo acessos bloqueados para os usuários. Por isso utilizamos o NOLOCK , onde até a própria Microsoft recomenda o uso deste comando, para o aumento de performance.

Obs: Apesar do NOLOCK ser uma solução para vários casos, o seu uso pode gerar vários erros de inconsistência como poderemos ver nos próximos tópicos.

É isso ai galera, abraços e NOLOCK na cabeça haha.

Um comentário: