Описание обработки тупиковых ситуаций (deadlock) в SQL ServerИсточник: SQL Exercises
Тупик - это состояние, когда два (или больше) процесса пытаются обратиться к ресурсу, который заблокирован другим процессом. Поскольку каждый процесс запрашивает ресурс другого процесса, ни один из них не может быть завершен. Когда SQL Server обнаруживает тупик, он откатывает транзакцию, которая имеет наименьшую продолжительность обработки и возвращает в приложение сообщение об ошибке 1205. Сообщение об ошибке 1205 прерывает выполнение текущего пакета и откатывает текущую транзакцию. В некоторых случаях состояние тупика будет вызывать команду библиотеки DB-Library (DB-Lib) типа dbsqlexec, dbsqlok или dbresults, чтобы вернуть FAIL (сбой). Программа всегда ответственна за проверку кодов возврата из каждой команды DB-Lib. Если одна из этих команд DB-Lib возвращает FAIL, программа должна отменить выполнение пакета, а не попытаться его продолжить. В некоторых случаях возможно продолжение выполнения последующих команд в пакете. Однако поскольку произошла тупиковая ситуация, и для команды, которая ее вызвала, был выполнен откат, последующие команды в пакете будут, вероятно, вызывать более серьезные ошибки, например, "объект не Хотя может показаться необязательной отмена пакета после получения сообщения о тупике 1205, это необходимо, потому что сервер не всегда прерывает выполнение пакета в тупиковой ситуации. Если выполнение пакета не отменено, любая другая попытка принять новый пакет может привести к ошибке DB-Library 10038 "Results Pending" (задержка результатов). Вы можете найти описание проблемы тупика и пример того, как обнаружить состояние тупика в Приложении E "Максимизирование согласованности и параллелизма" в "Справочнике программиста C" SQL Server для Windows NT Применимо к
Microsoft Corp (оригинал: Description of handling deadlock conditions in SQL Server) |