Gostaria de entender se a seguinte instrução de seleção muito simples levaria algum bloqueio
É um equívoco comum que uma SELECT
consulta em execução no READ 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.