Опис обробки тупикових ситуацій (deadlock) в SQL Server, Інші СУБД, Бази даних, статті

Тупик – це стан, коли два (або більше) процесу намагаються звернутися до ресурсу, який заблокований іншим процесом. Оскільки кожен процес запитує ресурс іншого процесу, жоден з них не може бути завершений. Коли SQL Server виявляє глухий кут, він відкатує транзакцію, яка має найменшу тривалість обробки і повертає в додаток повідомлення про помилку 1205. Повідомлення про помилку 1205 перериває виконання поточного пакету і відкатує поточну транзакцію.
Деталі


В деяких випадках стан безвиході буде викликати команду бібліотеки DB-Library (DB-Lib) типу dbsqlexec, dbsqlok або dbresults, щоб повернути FAIL (збій). Програма завжди відповідальна за перевірку кодів повернення з кожної команди DB-Lib. Якщо одна з цих команд DB-Lib повертає FAIL, програма повинна скасувати виконання пакета, а не спробувати його продовжити. В деяких випадках можливе продовження виконання наступних команд в пакеті. Однак оскільки сталася тупикова ситуація, і для команди, яка її викликала, був виконаний відкат, наступні команди в пакеті будуть, ймовірно, викликати більш серйозні помилки, наприклад, “об’єкт не
В інших випадках стан тупика не буде змушувати команду DB-Lib повертати FAIL. Щоб обробити таку ситуацію, програма повинна перевірити повідомлення 1205 в обробнику повідомлень і використовувати функцію dbsetuserdata, щоб повідомити про це вашому додатком (приклад може бути знайдений у Розділі 4 “DB-Library Functions” довідника програміста С в пункті dbsetuserdata). Таким чином, програма повинна перевіряти індикатор тупика після кожного виклику DB-Library та скасовувати виконання пакета в разі виявлення тупика.


Хоча може здатися необов’язковою скасування пакета після отримання повідомлення про тупику 1205, це необхідно, тому що сервер не завжди перериває виконання пакета в тупиковій ситуації. Якщо виконання пакета не скасовано, будь-яка інша спроба прийняти новий пакет може привести до помилки DB-Library 10038 “Results Pending” (затримка результатів).


Ви можете знайти опис проблеми тупика і приклад того, як виявити стан безвиході в Додатку E “максимізації узгодженості і паралелізму” в “Довіднику програміста C” SQL Server для Windows NT


Застосовується до


Microsoft Corp (Оригінал: Description of handling deadlock conditions in SQL Server)
Переклад: Моісеєнко С.І.
Оригінал перекладу 


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*