Нещодавно в одному з наших програм ASP.NET з'явилася помилка в тупиковій базі даних, і мені було запропоновано перевірити та виправити помилку. Мені вдалося знайти причину тупику - це збережена процедура, яка суворо оновлювала таблицю в межах курсору.
Це перший раз, коли я бачив цю помилку і не знав, як її ефективно відстежувати та виправляти. Я спробував усі можливі способи, які я знаю, і, нарешті, виявив, що таблиця, яка оновлюється, не має первинного ключа! на щастя, це була стовпчик ідентичності.
Пізніше я знайшов розробника, який написав базу даних для розгортання. Я додав первинний ключ, і проблема була вирішена.
Я почував себе щасливим і повернувся до свого проекту, і провів кілька досліджень, щоб з'ясувати причину цього тупика ...
Мабуть, саме круговий стан очікування спричинив тупик. Оновлення, мабуть, тривають довше без первинного ключа, ніж із первинним ключем.
Я знаю, що це не чітко визначений висновок, тому я публікую тут ...
- Чи проблема з відсутнім первинним ключем?
- Чи є інші умови, які спричиняють тупик, окрім (взаємне виключення, затримка та чекання, відсутність попередження та кругового очікування)?
- Як запобігти та відстежити тупикові місця?