sql >> Database >  >> RDS >> Sqlserver

SQL Server:vuile leesbewerkingen in een opgeslagen procedure voorkomen

Vuile reads kun je niet voorkomen. Schrijvers nemen exclusieve sloten om eerlijke, gelezen toegewijde, leest te voorkomen. Maar er is niets u kunt doen om vuile reads te voorkomen. De vuile lezer moet stoppen met het lezen van vuile teksten, punt uit.

Ervan uitgaande dat de code die de tabel Klant peilt onder uw controle is, is de oplossing om de vuile leeshint uit de query te verwijderen. Dit zal waarschijnlijk twist veroorzaken, aangezien de polling nu de schrijfacties blokkeert. De beste oplossing daarvoor is om rijversiebeheer in te schakelen :

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

Poll dan gewoon van de klant als een normale vraag, zonder enige hints. Uw peiling blokkeert niet achter schrijfbewerkingen, aangezien rijversies in werking treden en de queryscan omleiden naar een pre-update, niet-vergrendelde versie van de rij.

Nog een opmerking:elke 500 ms pollen? Misschien moet je een Query Notification-mechanisme gebruiken om je caches ongeldig te maken, zie The Mysterious Melding .



  1. Hiërarchische query's in SQL Server 2005

  2. Een rij inactief maken in MySQL

  3. Hibernate OnDelete Cascade werkt niet voor MySql maar werkt op postgres en Ms-Sql

  4. SQL Server, kan null niet in het primaire sleutelveld worden ingevoegd?