Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server:предотвратяване на мръсни четения в съхранена процедура

Не можете да предотвратите мръсни четения. Писателите приемат ексклузивни ключалки, за да предотвратят честно, ангажирано с четене, четене. Но няма нищо можете да направите, за да предотвратите мръсни четения. Мръсният четец трябва да спре да прави мръсни четения, точка.

Ако приемем, че кодът, който анкетира таблицата Customer, е под ваш контрол, решението е да премахнете подсказката за мръсно четене от заявката. Това вероятно ще предизвика спор, тъй като анкетата сега ще блокира записите. Най-доброто решение за това е да активирате версия на ред :

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

След това просто анкета от клиента като нормална заявка, без никакви подсказки. Вашата анкета няма да блокира зад писанията, тъй като ще се задейства управлението на версии на ред и ще се пренасочи сканирането на заявката към предварително актуализирана, незаключена версия на реда.

Още една забележка:запитване на всеки 500 ms? Може би трябва да използвате механизъм за известяване на заявки, за да обезсилите кешовете си, вижте The Mysterious Известие .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е ползата от актуализирането, вместо да правите изтриване и след това Вмъкване в същата таблица

  2. Избор на процесор за SQL Server 2012

  3. Как да използвам разделяне по и подреждане по във функцията over?

  4. Шестнадесетичната стойност 0x00 е невалиден знак

  5. Конкатениране на редове от изчислена колона с псевдоним