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

Optymistyczne vs. pesymistyczne blokowanie

Blokowanie optymistyczne to strategia, w której czytasz rekord, zapisujesz numer wersji (innymi metodami do tego są daty, znaczniki czasu lub sumy kontrolne/hashe) i sprawdzasz, czy wersja nie uległa zmianie przed ponownym zapisaniem rekordu. Kiedy zapisujesz rekord z powrotem, filtrujesz aktualizację według wersji, aby upewnić się, że jest niepodzielna. (tj. nie został zaktualizowany między sprawdzeniem wersji i zapisaniem rekordu na dysku) i zaktualizuj wersję jednym uderzeniem.

Jeśli rekord jest brudny (tj. Inna wersja niż twoja), przerywasz transakcję, a użytkownik może ją ponownie uruchomić.

Ta strategia jest najbardziej odpowiednia do systemów o dużej objętości i architektur trójwarstwowych, w których niekoniecznie utrzymujesz połączenie z bazą danych podczas sesji. W tej sytuacji klient nie może faktycznie utrzymywać blokad bazy danych, ponieważ połączenia są pobierane z puli i możesz nie używać tego samego połączenia z jednego dostępu do drugiego.

Blokowanie pesymistyczne ma miejsce, gdy blokujesz rekord do wyłącznego użytku, dopóki nie skończysz z nim. Ma znacznie lepszą integralność niż optymistyczne blokowanie, ale wymaga ostrożności przy projektowaniu aplikacji, aby uniknąć zakleszczeń. Aby użyć pesymistycznego blokowania, potrzebujesz albo bezpośredniego połączenia z bazą danych (jak to zwykle bywa w przypadku dwuwarstwowej aplikacji typu klient-serwer) lub dostępnego z zewnątrz identyfikatora transakcji, który może być używany niezależnie od połączenia.

W tym drugim przypadku otwierasz transakcję z TxID, a następnie ponownie łączysz się przy użyciu tego ID. DBMS utrzymuje blokady i pozwala na przywrócenie sesji poprzez TxID. W ten sposób działają transakcje rozproszone korzystające z protokołów zatwierdzania dwufazowego (takich jak transakcje XA lub COM+).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Porównanie maszyn wirtualnych w chmurze z zarządzaną bazą danych w chmurze

  2. SQL WHERE.. IN klauzula wiele kolumn

  3. Darmowe metody naprawy korupcji indeksu SQL Server

  4. SQL Server COALESCE() Objaśnienie

  5. Uzupełnij ciąg zerami na początku, aby miał 3 znaki w SQL Server 2008