Eu uso SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
na maioria das minhas consultas SQL gerais, principalmente porque isso foi aprofundado para mim quando originalmente aprendi o idioma.
Pelo meu entendimento, esse nível de isolamento age da mesma maneira que, WITH (NO LOCK)
no entanto, só tenho a tendência de usar SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
.
- Existe sempre um tempo que eu deveria estar usando
WITH (NO LOCK)
maisSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
. - Impede
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
que outros usuários sejam bloqueados nas tabelas que estou lendo? - Se
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
for usado para interromper bloqueios, mas estou apenas lendo dados, qual é o sentido de usá-los? É apenas consultas intensivas do sistema que gerariam bloqueios? Vale a pena usá-lo ao executar consultas que retornariam em, digamos, 5 a 10 segundos? - Foi-me dito para não usar
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
ao ler dados que seriam usados em atualizações, presumivelmente para evitar a atualização de dados sujos. Essa seria a única razão? - Com o tipo de banco de dados em que estou trabalhando, há um ambiente de produção e teste. Raramente, consultaremos o ambiente de produção, mas, quando necessário, geralmente o utilizarei
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
na minha consulta. Entendo que leituras sujas são possíveis com isso. Além de receber dados de volta que podem não acabar sendo comprometidos com o banco de dados (e, portanto, jogar fora meus resultados), que outros tipos de 'leituras sujas' poderiam ser possíveis?
Desculpe pelas perguntas em massa.
READ UNCOMMITTED
toda parte, na exata mesma maneira que eu não iria usar WITH (NOLOCK)
em todos os lugares (que são essencialmente a mesma coisa) blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere