sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:prevence nečistých čtení v uložené proceduře

Špinavému čtení nezabráníte. Spisovatelé berou exkluzivní zámky, aby zabránili čestnému, přečtenému, přečtenému. Ale není tam nic můžete udělat, abyste zabránili špinavému čtení. Špinavý čtenář musí přestat dělat nečisté čtení, tečka.

Za předpokladu, že kód, který se dotazuje na tabulku Customer, je pod vaší kontrolou, řešením je odstranit z dotazu nečistou nápovědu pro čtení. To pravděpodobně způsobí spory, protože dotazování bude nyní blokováno při zápisech. Nejlepším řešením je povolit verzování řádků :

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

Poté jednoduše dotazujte od zákazníka jako normální dotaz bez jakýchkoliv nápověd. Váš průzkum nebude blokovat zápisy, protože se spustí verzování řádků a přesměruje skenování dotazů na předaktualizovanou, nezamknutou verzi řádku.

Ještě jedna poznámka:dotazování každých 500 ms? Možná byste měli ke zneplatnění mezipaměti použít mechanismus Query Notification, viz The Mysterious Oznámení .



  1. Je provádění uložené procedury T-SQL „atomové“?

  2. MySQL SELECT MIN pro všechny časy, ale vrátit se pouze v případě, že data BETWEEN

  3. Výkonová hodnota vedení COMB

  4. Vyberte řádek s maximální hodnotou v jednom sloupci