sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor bruge et READ UNCOMMITTED isolationsniveau?

Dette isolationsniveau tillader beskidte aflæsninger. En transaktion kan se ikke-forpligtede ændringer foretaget af en anden transaktion.

For at opretholde det højeste niveau af isolation anskaffer et DBMS sædvanligvis låse på data, hvilket kan resultere i tab af samtidighed og høje låseomkostninger. Dette isolationsniveau afslapper denne egenskab.

Det kan være en god ide at tjekke Wikipedia-artiklen om READ UNCOMMITTED for et par eksempler og yderligere læsning.

Du kan også være interesseret i at tjekke Jeff Atwoods blogartikel om, hvordan han og hans team tacklede et dødvandeproblem i de tidlige dage af Stack Overflow. Ifølge Jeff:

Men er nolock farligt? Kan du ende med at læse ugyldige data med read uncommitted på? Ja, i teorien. Du vil ikke finde mangel på databasearkitektur-astronauter, der begynder at droppe ACID-videnskaben på dig og næsten trækker bygningens brandalarm, når du fortæller dem, at du vil prøve nolock .Det er sandt:teorien er skræmmende. Men her er, hvad jeg tænker:"I teorien er der ingen forskel mellem teori og praksis. I praksis er der."

Jeg vil aldrig anbefale at bruge nolock som en generel "god til, hvad der gør dig"-slangeolie-fix for eventuelle databaseproblemer, du måtte have. Du bør prøve at diagnosticere kilden til problemet først.

Men i praksis tilføjes nolock forespørgsler, som du absolut ved er enkle, ligefremme skrivebeskyttede anliggender, lader aldrig til at føre til problemer... Så længe du ved, hvad du laver.

Et alternativ til READ UNCOMMITTED niveau, som du måske vil overveje, er READ COMMITTED SNAPSHOT . Citerer Jeff igen:

Snapshots er afhængige af en helt ny metode til sporing af dataændringer ... mere end blot en lille logisk ændring, det kræver, at serveren håndterer dataene fysisk anderledes. Når denne nye metode til sporing af dataændringer er aktiveret, opretter den en kopi eller et øjebliksbillede af hver dataændring. Ved at læse disse øjebliksbilleder i stedet for live-data på tidspunkter af strid, er delte låse ikke længere nødvendige ved læsninger, og den samlede databaseydeevne kan øges.



  1. Hvad gør 'COLLATE SQL_Latin1_General_CP1_CI_AS'?

  2. Administrer adgangskode og ressourcer i Oracle ved hjælp af profil

  3. ST_DWithin tager parameter som grad, ikke meter, hvorfor?

  4. Hvordan programmerer man en MySQL-trigger til at indsætte række i en anden tabel?