Поделиться через


Настройка времени ожидания блокировки

Если экземпляр компонента Microsoft SQL Server Database Engine не может предоставить блокировку транзакции из-за того, что другая транзакция уже владеет конфликтующей блокировкой на данном ресурсе, то первая транзакция блокируется, ожидая освобождения существующей блокировки. По умолчанию не существует обязательного периода ожидания и не существует способа выяснить, заблокирован ли ресурс до блокировки ресурса, за исключением попытки доступа к данным (с потенциальной возможностью блокировки).

ms177413.note(ru-ru,SQL.90).gifПримечание.
В SQL Server 2005 используйте динамическое административное представление sys.dm_os_waiting_tasks, чтобы определить, заблокирован ли процесс и кто его блокирует. В предыдущих версиях SQL Server используйте системную хранимую процедуру sp_who.

Параметр LOCK_TIMEOUT дает возможность приложению задать максимальное время ожидания инструкцией заблокированного ресурса. Если время ожидания инструкцией превышает значение, установленное LOCK_TIMEOUT, заблокированная инструкция автоматически отменяется и в приложение возвращается сообщение об ошибке 1222 (Lock request time-out period exceeded). Однако никакая транзакция, содержащая инструкцию, не будет откатана или отменена SQL Server. Следовательно, в приложении необходим обработчик ошибок, который может перехватить сообщение об ошибке 1222. Если приложение не перехватывает ошибку, то оно может продолжить свою работу и не будет осведомлено о том, что отдельная инструкция в транзакции была отмена. В будущем возможны ошибки, связанные с тем, что последующие инструкции в транзакции могут опираться на инструкцию, которая так и не была выполнена.

Реализация обработчика ошибок, который перехватывает сообщение об ошибке 1222, позволяет приложению обработать ситуацию, связанную с превышением времени ожидания, и предпринять повторную автоматическую передачу заблокированной инструкции или откат всей транзакции.

Чтобы определить текущую установку LOCK_TIMEOUT, выполните функцию @@LOCK_TIMEOUT:

SELECT @@lock_timeout;
GO

См. также

Основные понятия

Обработка ошибок и сообщений в приложениях

Другие ресурсы

@@LOCK_TIMEOUT (Transact-SQL)
SET LOCK_TIMEOUT (Transact-SQL)
sp_who (Transact-SQL)
sys.dm_os_waiting_tasks

Справка и поддержка

Получение помощи по SQL Server 2005