Denna isoleringsnivå tillåter smutsavläsning. En transaktion kan se oengagerade ändringar gjorda av någon annan transaktion.
För att upprätthålla den högsta nivån av isolering, förvärvar ett DBMS vanligtvis lås på data, vilket kan resultera i en förlust av samtidighet och en hög låsningsoverhead. Denna isoleringsnivå slappnar av den här egenskapen.
Du kanske vill kolla in Wikipedia-artikeln om READ UNCOMMITTED
för några exempel och ytterligare läsning.
Du kanske också är intresserad av att kolla in Jeff Atwoods bloggartikel om hur han och hans team tacklade ett dödläge under de första dagarna av Stack Overflow. Enligt Jeff:
Men är
nolock
farligt? Kan du sluta läsa ogiltiga data medread uncommitted
på? Ja, i teorin. Du kommer inte att finna någon brist på databasarkitekturastronauter som börjar släppa ACID-vetenskap på dig och bara drar byggnadens brandlarm när du säger till dem att du vill provanolock
.Det är sant:teorin är skrämmande. Men det här är vad jag tycker:"I teorin är det ingen skillnad mellan teori och praktik. I praktiken finns det."Jag skulle aldrig rekommendera att använda
nolock
som en allmän "bra för vad som krånglar dig" ormolja fix för eventuella databaslåsningsproblem du kan ha. Du bör försöka diagnostisera källan till problemet först.Men i praktiken lägger man till
nolock
för frågor som du absolut vet är enkla, okomplicerade skrivskyddade frågor verkar aldrig leda till problem... Så länge du vet vad du gör.
Ett alternativ till READ UNCOMMITTED
nivå som du kanske vill överväga är READ COMMITTED SNAPSHOT
. Citerar Jeff igen:
Snapshots förlitar sig på en helt ny metod för spårning av dataändringar ... mer än bara en liten logisk förändring, det kräver att servern hanterar data fysiskt annorlunda. När den här nya spårningsmetoden för dataändring har aktiverats skapar den en kopia eller ögonblicksbild av varje dataändring. Genom att läsa dessa ögonblicksbilder snarare än livedata vid tider av konflikter behövs inte längre delade lås vid läsningar, och den totala databasprestanda kan öka.