Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que usar um nível de isolamento READ UNCOMMITTED?


Este nível de isolamento permite leituras sujas. Uma transação pode ver alterações não confirmadas feitas por outra transação.

Para manter o mais alto nível de isolamento, um SGBD geralmente adquire bloqueios nos dados, o que pode resultar em perda de simultaneidade e uma alta sobrecarga de bloqueio. Este nível de isolamento relaxa esta propriedade.

Você pode querer conferir o artigo da Wikipédia sobre READ UNCOMMITTED para alguns exemplos e leitura adicional.

Você também pode estar interessado em conferir o artigo do blog de Jeff Atwood sobre como ele e sua equipe lidaram com um problema de impasse nos primeiros dias do Stack Overflow. De acordo com Jeff:

Mas é nolock perigoso? Você pode acabar lendo dados inválidos com read uncommitted em? Sim, em teoria. Você não encontrará falta de astronautas de arquitetura de banco de dados que começam a jogar ciência ACID em você e todos, mas acionam o alarme de incêndio do prédio quando você diz a eles que quer tentar nolock .É verdade:a teoria é assustadora. Mas é o que eu penso:"Na teoria não existe diferença entre teoria e prática. Na prática existe."

Eu nunca recomendaria usar nolock como uma correção geral de óleo de cobra "bom para o que o aflige" para quaisquer problemas de bloqueio de banco de dados que você possa ter. Você deve tentar diagnosticar a origem do problema primeiro.

Mas na prática adicionando nolock para consultas que você sabe que são simples e diretas, assuntos somente leitura nunca parecem levar a problemas... Desde que você saiba o que está fazendo.

Uma alternativa ao READ UNCOMMITTED O nível que você pode querer considerar é o READ COMMITTED SNAPSHOT . Citando Jeff novamente:

Os instantâneos contam com um método de rastreamento de alterações de dados totalmente novo... mais do que apenas uma pequena alteração lógica, ele exige que o servidor lide com os dados fisicamente de maneira diferente. Depois que esse novo método de rastreamento de alterações de dados é ativado, ele cria uma cópia ou instantâneo de cada alteração de dados. Ao ler esses instantâneos em vez de dados ao vivo em momentos de contenção, os bloqueios compartilhados não são mais necessários nas leituras, e o desempenho geral do banco de dados pode aumentar.