Para que serve o with nolock

SQL Server

26/09/2016

Às vezes no SQL Server, vejo algumas consultas que são feitas usando o termo "With nolock".

Gostaria de saber qual a real utilidade disso, se apresenta vantagens e quando o uso é aconselhável.
Calebe Menezes

Calebe Menezes

Curtidas 0

Melhor post

David Styveen

David Styveen

03/10/2016

Boa noite, Calebe.

Em tese é o que Diego Souza falou. Explicando um pouco mais a fundo, quando é utilizada transação no banco de dados, o registro não poderá ser acessado até que essa transação finalize seja confirmando a alteração (commit) ou desfazendo (rollback).
O que o With Nolock faz é pegar o valor anterior o início da transação não esperando ela finalizar para ter a informação.
De forma análoga imagine o seguinte cenário:
No caminho da escola você irá verificar se a luz da sala da sua casa está acesa.
Ao chegar em casa, a porta está trancada e você não tem a chave. Com isso, você precisa esperar alguém abrir a porta da casa para verificar se a luz está acesa. Esse processo leva um tempo e você poderia perder o horário da aula caso a demora fosse grande ou até mesmo corre o risco de não ter ninguém em casa.
O mesmo cenário com with nolock: você chega em casa e encontra a porta da sala trancada. Você então assume que ela está do mesmo jeito do dia anterior e vai para escola.
Note que você não perdeu tempo, porém não tem certeza se a informação está correta.
Portanto o cuidado que deve-se ter ao utilizar o with nolock em consultas que retornam valores, quantidades e etc, pois poderá afetar o resultado final. O uso recomendado são para tabelas base de cadastros que estão em constante alterações e assim não afetariam processos de faturamento, por exemplo.

Abraços e até mais.
GOSTEI 3

Mais Respostas

Calebe Menezes

Calebe Menezes

26/09/2016

Alguém pode me ajudar?
GOSTEI 0
Diego Silva

Diego Silva

26/09/2016

olha, pelo que entendo, o with nolock serviria para melhorar a performance da sua query.

O SQL SERVER usa mecanismo de bloqueio, para que a integridade dos seus dados seja mantida.

Então, uma execução da sua query no estado normal, vem com um lock (cadeado, bloqueio), o que impacta na hora de fazer consultas por exemplo. O problema é que o with nolock também não pode ser usado de maneira leviana, pois pode acabar te comprometendo em alguma circunstância. O with nolock tiraria esse bloqueio e melhoraria assim a sua performance.

Meu conselho é para que você use quando for realmente necessário
GOSTEI 2
Calebe Menezes

Calebe Menezes

26/09/2016

Muito obrigado Diego!
GOSTEI 0
Calebe Menezes

Calebe Menezes

26/09/2016

Explicação perfeita David :)
Muito clara!
GOSTEI 1
João Françozo

João Françozo

26/09/2016

Bom dia Calebe,

Nunca usar o Nolock.

Caso usar você vai conseguir ler dados sujos que podem causar decisões erradas.

Veja esses videos de um grande amigo, vai te ajudar a entender melhor.

http://www.youtube.com/playlist?list=PL70D92D06E08E6653&feature=plcp
GOSTEI 0
POSTAR