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

Какво е задънена улица в база данни?

Като цяло безизходицата означава, че два или повече обекта блокират някои източници и нито един от тях не може да завърши, защото блокират източниците по цикличен начин.

Един пример:Да кажем, че имам таблица A и таблица B, трябва да направя някаква актуализация в A и след това в B и решавам да ги заключа в момента на използване (това е наистина глупаво поведение, но сега служи на целта си ). В същия момент някой друг прави същото в обратен ред - първо заключва B, след това заключва A.

Хронологично това се случва:

proc1:Заключване A

proc2:Заключване B

proc1:Lock B - започва да чака, докато proc2 освободи B

proc2:Lock A - започва да чака, докато proc1 освободи A

Никой от тях никога няма да завърши. Това е задънена улица. На практика това обикновено води до грешки при изчакване, тъй като не е желателно нито една заявка да виси вечно и основната система (напр. базата данни) ще унищожи заявките, които не завършват навреме.

Един пример за безизходица от реалния свят е, когато заключите ключовете от къщата си в колата си и ключовете от колата в къщата си.



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

  2. SSIS чете множество xml файлове от папка

  3. За да намерите следващия работен ден

  4. sp_dropserver и sp_addserver не работят

  5. Как да изчислим общите часове за пътуване между град x и y и обратно