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

Co to jest impas w bazie danych?

Ogólnie rzecz biorąc, zakleszczenie oznacza, że ​​dwie lub więcej jednostek blokuje niektóre źródła i żaden z nich nie jest w stanie zakończyć, ponieważ blokują źródła w sposób cykliczny.

Jeden przykład:powiedzmy, że mam tabelę A i tabelę B, muszę zrobić jakąś aktualizację w A, a potem w B i postanawiam zablokować obie w momencie użycia (to naprawdę głupie zachowanie, ale teraz spełnia swoje zadanie ). W tym samym momencie ktoś inny robi to samo w odwrotnej kolejności - najpierw blokuje B, potem blokuje A.

Chronologicznie dzieje się tak:

proc1:Zablokuj A

proc2:Zablokuj B

proc1:Lock B - zaczyna czekać, aż proc2 zwolni B

proc2:Lock A - zaczyna czekać, aż proc1 zwolni A

Żaden z nich nigdy się nie skończy. To impas. W praktyce zwykle skutkuje to błędami przekroczenia limitu czasu, ponieważ nie jest pożądane, aby jakiekolwiek zapytanie było zawieszone na zawsze, a system bazowy (np. baza danych) zabije zapytania, które nie kończą się na czas.

Jednym z przykładów impasu w prawdziwym świecie jest zamknięcie kluczyków do domu w samochodzie i kluczyków do samochodu w domu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj zmiennej z TOP w instrukcji select w SQL Server bez robienia jej dynamicznej

  2. Jak działa funkcja RIGHT() w SQL Server (T-SQL)

  3. Połącz wiele wyników w podzapytanie w jedną wartość oddzieloną przecinkami

  4. Jak szybko edytować wartości w tabeli w SQL Server Management Studio?

  5. Czy powinienem zaprojektować tabelę z kluczem podstawowym varchar czy int?