Para que serve o with nolock
À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.
Gostaria de saber qual a real utilidade disso, se apresenta vantagens e quando o uso é aconselhável.
Calebe Menezes
Curtidas 0
Melhor post
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.
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
26/09/2016
Alguém pode me ajudar?
GOSTEI 0
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
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
26/09/2016
Muito obrigado Diego!
GOSTEI 0
Calebe Menezes
26/09/2016
Explicação perfeita David :)
Muito clara!
Muito clara!
GOSTEI 1
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
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