sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server:förhindrar smutsiga läsningar i en lagrad procedur

Du kan inte förhindra smutsiga läsningar. Författare tar exklusiva lås för att förhindra ärlig, läs engagerad, läser. Men det finns inget du kan göra för att förhindra smutsiga läsningar. Den smutsiga läsaren måste sluta göra smutsiga läsningar, punkt.

Förutsatt att koden som pollar kundtabellen är under din kontroll, är lösningen att ta bort den smutsiga lästipset från frågan. Detta kommer troligen att orsaka tvist, eftersom omröstningen nu kommer att blockera skrivningarna. Den bästa lösningen för det är att aktivera radversionering :

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

Sedan är det bara att fråga från kunden som en normal fråga, utan några tips. Din omröstning blockeras inte bakom skrivningar eftersom radversioner kommer att starta och omdirigera sökfrågan till en föruppdatering, olåst version av raden.

En anmärkning till:polling var 500:e ms? Du kanske borde använda en Query Notification-mekanism för att ogiltigförklara dina cacheminne, se The Mysterious Avisering .



  1. PostgreSQL Check Constraint i Liquibase

  2. Hur kontrollerar man om en parameter är tom eller null i SQL Server lagrad procedur i IF-satsen?

  3. Kan du använda auto-increment i MySql utan att det är den primära nyckeln

  4. Varför påverkas två rader i min `INSERT ... ON DUPLICATE KEY UPDATE`?