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

SQL Server:forhindrer dirty reads i en lagret procedure

Du kan ikke forhindre beskidte læsninger. Forfattere tager eksklusive låse for at forhindre ærlige, læse engagerede, læser. Men der er intet du kan gøre for at forhindre snavsede læsninger. Den beskidte læser skal holde op med at læse beskidte, punktum.

Hvis du antager, at koden, der poller kundetabellen, er under din kontrol, er løsningen at fjerne det beskidte læsehint fra forespørgslen. Dette vil formentlig skabe uenighed, da afstemningen nu vil blokere for skriverierne. Den bedste løsning til det er at aktivere rækkeversionering :

ALTER DATABASE [<DBNAME>] SET ALLOW_SNAPSHOT_ISOLATION ON; 
ALTER DATABASE [<DBNAME>] SET READ_COMMITTED_SNAPSHOT ON;

Derefter skal du blot foretage en afstemning fra Kunden som en normal forespørgsel, uden nogen tip. Din meningsmåling vil ikke blokere bag skrivninger, da rækkeversionering vil starte og omdirigere forespørgselsscanningen til en præ-opdatering, ikke-låst version af rækken.

Endnu en bemærkning:polling hver 500 ms? Måske skulle du bruge en forespørgselsmeddelelsesmekanisme til at ugyldiggøre dine caches, se The Mysterious Notifikation .



  1. Hvilken MySQL-datatype skal bruges til en IP-adresse?

  2. Gruppér efter specificeret kolonne i PostgreSQL

  3. Hvordan får jeg MySQL's NOW()- og CURDATE()-funktioner til at bruge UTC?

  4. NEXT_DAY() Funktion i Oracle