sql >> Databasteknik >  >> RDS >> Sqlserver

Varför använda en LÄS UNENGÅNGAD isoleringsnivå?

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 med read 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 prova nolock .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.



  1. IN vs OR för Oracle, vilket snabbare?

  2. Vad är det bästa sättet att migrera en Django DB från SQLite till MySQL?

  3. Referensalias (beräknat i SELECT) i WHERE-satsen

  4. Läs och importera XLSX (Excel)-fil i Oracle