Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server:zapobieganie brudnym odczytom w procedurze składowanej

Nie możesz zapobiec brudnym odczytom. Pisarze stosują ekskluzywne blokady, aby uniemożliwić uczciwe, popełnione czytanie, czytanie. Ale nie ma nic możesz zrobić, aby zapobiec brudnym odczytom. Brudny czytelnik musi przestać robić brudne odczyty, kropka.

Zakładając, że kod, który sonduje tabelę Customer, znajduje się pod Twoją kontrolą, rozwiązaniem jest usunięcie wskazówki dotyczącej brudnego odczytu z zapytania. Spowoduje to prawdopodobnie spory, ponieważ odpytywanie będzie teraz blokować zapisy. Najlepszym rozwiązaniem jest włączenie wersjonowania wierszy :

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

Następnie po prostu odpytaj klienta jako zwykłe zapytanie, bez żadnych wskazówek. Twoja sonda nie zablokuje się za zapisami, ponieważ rozpocznie się wersjonowanie wierszy i przekieruje skanowanie zapytania do niezablokowanej wersji wiersza sprzed aktualizacji.

Jeszcze jedna uwaga:odpytywanie co 500 ms? Być może powinieneś użyć mechanizmu powiadamiania o zapytaniach, aby unieważnić swoje pamięci podręczne, zobacz Tajemnica Powiadomienie .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak napisać zapytanie, aby wyodrębnić poszczególne zmiany z migawek danych?

  2. Jaka jest różnica między skanowaniem tabeli a skanowaniem indeksu klastrowego?

  3. Wkładka zbiorcza, nie można ładować zbiorczo. Nieznana wersja pliku formatu

  4. Jak znaleźć trzecią lub nᵗʰ maksymalną pensję z tabeli wynagrodzeń?

  5. Czy JPA 2.0 obsługuje zmienne tabeli SQL Server?