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 comread 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 tentarnolock
.É 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 usarnolock
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 adicionandonolock
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.