Books and articles about SQL Rambler's Top100 Сменить язык на: Русский 29 March 2024 16:17:17


www.sql-ex.ru
Skip Navigation Links  

 

Print  Версия для печати

На главную страницу

Описание обработки тупиковых ситуаций (deadlock) в SQL Server

Microsoft Corp (оригинал: Description of handling deadlock conditions in 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

Применимо к

o Microsoft SQL Server 4.21a Standard Edition
o Microsoft SQL Server 2000 Standard Edition
o Microsoft SQL Server 2005 Standard Edition
o Microsoft SQL Server 2005 Developer Edition
o Microsoft SQL Server 2005 Enterprise Edition
o Microsoft SQL Server 2005 Express Edition
o Microsoft SQL Server 2005 Workgroup Edition

05/06/2006

На главную страницу

Print  Версия для печати


Usage of any materials of this site is possible
only under condition of mandatory allocation of the direct link to a site
http://www.sqlbooks.ru
on each page where used materials are placed.

 Main   Articles    Books 
Рейтинг@Mail.ru Rambler's Top100 Alt Упражнения по SQL: обучение, тестирование, сертификация по языку SQL Copyright c 2002-2006. All rights reserved.