Eu sou muito novo no SQL Server e gostaria de entender se a seguinte select
declaração muito simples levaria algum bloqueio.
Select * from Student;
Por favor, considere o caso em que a instrução não seria executada dentro de um begin tran
bloco.
sql-server
sql-server-2008
locking
Novo desenvolvedor
fonte
fonte
Respostas:
Sim, ele usa um bloqueio compartilhado nas linhas que lê por padrão (ele também usa um bloqueio compartilhado por intenção em todas as páginas do índice clusterizado que ele lerá); isso é feito para impedir leituras sujas. No entanto, existem maneiras de contornar isso (o SQL Server tem a dica nolock). Se a instrução não estiver em um BEGIN TRAN, o bloqueio será liberado após a execução da instrução SELECT.
Mais informações podem ser encontradas aqui:
http://msdn.microsoft.com/en-us/library/ms184286(v=sql.105).aspx http://www.sqlteam.com/article/introduction-to-locking-in-sql-server
fonte
É um equívoco comum que uma
SELECT
consulta em execução noREAD COMMITTED
nível de isolamento de transação padrão sempre use bloqueios compartilhados para impedir leituras sujas.O SQL Server pode evitar a execução de bloqueios compartilhados no nível da linha quando não houver perigo de ler dados não confirmados sem eles (embora os bloqueios de intenção compartilhada (IS) de nível superior ainda sejam utilizados).
Mesmo se os bloqueios de linha compartilhados forem executados (talvez porque outra transação simultânea tenha modificado a página em que a linha está), eles poderão ser liberados muito antes da
SELECT
conclusão da instrução.Na maioria dos casos, a linha é 'desbloqueada' imediatamente antes do servidor processar a próxima linha. Há circunstâncias em que os bloqueios compartilhados obtidos no nível de isolamento padrão são mantidos no final da instrução atual, mas não no final da transação .
Substituir o nível de isolamento atual pela
NOLOCK
dica da tabela é quase sempre uma má idéia .O bloqueio é um detalhe de implementação. O SQL Server bloqueia quando necessário para garantir que atenda às garantias semânticas fornecidas pelo nível de isolamento atual . Certamente, há momentos em que é útil saber um pouco sobre por que os bloqueios são executados, mas tentar prevê-los é muitas vezes contraproducente.
O SQL Server fornece uma ampla variedade de níveis de isolamento; escolha aquele que forneça as garantias e comportamentos de que seus consumidores de dados precisam.
fonte