KILL (Transact-SQL)

Изменения: 14 апреля 2006 г.

Прерывает пользовательский процесс, определяемый идентификатором сеанса (SPID для SQL Server 2000 и более ранних версий) или единицей работы (UOW). Если для завершения процесса, указанного с помощью SPID или UOW, необходимо отменить большое количество операций, для выполнения инструкции KILL может понадобиться значительное время. Выполнение инструкции KILL особенно затягивается при отмене длительной транзакции.

В Microsoft SQL Server 2000 и более поздних версиях с помощью инструкции KILL можно завершить нормальное подключение, которое внутренне завершит транзакции, связанные с заданным идентификатором сеанса. Эту инструкцию также можно применить для завершения потерянных и сомнительных распределенных транзакций при использовании координатора распределенных транзакций Microsoft (MS DTC).

Синтаксис

KILL { session ID | UOW } [ WITH STATUSONLY ] 

Аргументы

  • session ID
    Идентификатор сеанса завершаемого процесса. Аргумент session ID представляет собой уникальное целое число (int), которое назначается каждому подключению пользователя при выполнении подключения. Значение идентификатора сеанса остается привязанным к соединению в течение всего времени соединения. По окончании соединения данное целое значение освобождается и может быть присвоено другому соединению.

    Используйте инструкцию KILL session ID для завершения обычных нераспределенных или распределенных транзакций, связанных с заданным идентификатором сеанса.

  • UOW
    Задает идентификатор единицы работы (UOW) распределенных транзакций. Аргумент UOW представляет собой идентификатор GUID, который может быть получен из столбца request_owner_guid динамического административного представления request_owner_guid. Также аргумент UOW может быть получен из журнала ошибок или из монитора MS DTC. Дополнительные сведения о слежении за распределенными транзакциями см. в руководстве пользователя MS DTC.

    Используйте инструкцию KILL UOW для завершения потерянных распределенных транзакций. Эти транзакции не связаны с идентификаторами реальных сеансов, но искусственно связаны с идентификатором сеанса -2. Этот идентификатор упрощает поиск потерянных транзакций с помощью запроса столбца идентификатора сеанса из динамических административных представлений sys.dm_tran_locks, sys.dm_exec_sessions или sys.dm_exec_requests.

  • WITH STATUSONLY
    Создает отчет о состоянии для конкретного session ID или UOW, который выполняет откат из-за выполненной ранее инструкции KILL. Инструкция KILL WITH STATUSONLY не завершает и не откатывает session ID или UOW. Команда только отображает текущее состояние отката.

Замечания

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

Инструкцию KILL необходимо использовать осторожно, особенно при выполнении критических процессов. Существует опасность прерывания собственного процесса. Не нужно прерывать следующие процессы:

  • AWAITING COMMAND
  • CHECKPOINT SLEEP
  • LAZY WRITER
  • LOCK MONITOR
  • SIGNAL HANDLER

Используйте функцию SPID, чтобы отобразить значение идентификатора текущего сеанса.

Чтобы получить отчет о значениях идентификаторов активных сеансов, можно запросить столбец session_id из динамических административных представлений sys.dm_tran_locks, sys.dm_exec_sessions и sys.dm_exec_requests. Также можно посмотреть столбец SPID, возвращаемый системной хранимой процедурой sp_who. Если откат выполняется для конкретного SPID, столбец cmd результирующего набора процедуры sp_who для этого SPID будет содержать значение KILLED/ROLLBACK.

Если какое-либо соединение имеет блокировку на ресурс базы данных и блокирует обработку остальных соединений, идентификаторы сеансов заблокированных соединений появятся в столбце blocking_session_id представления sys.dm_exec_requests, или в столбце blk, возвращенном хранимой процедурой sp_who.

Инструкцию KILL можно применять для решения проблем с сомнительными распределенными транзакциями. Эти транзакции представляют собой неразрешимые распределенные транзакции, возникшие в результате незапланированных повторных стартов сервера баз данных или координатора MS DTC. Дополнительные сведения о сомнительных транзакциях см. в подразделе «Двухфазная фиксация» раздела Использование помеченных транзакций (полная модель восстановления).

Использование предложения WITH STATUSONLY

Инструкция KILL WITH STATUSONLY создает отчет только в том случае, если в сеансе или UOW выполняется откат, вызванный введенной ранее инструкцией KILL session ID|UOW. Отчет о состоянии отображает процесс выполнения отката (в процентах), а также выводит ожидаемое время до окончания операции (в секундах) в следующей форме:

Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds

Если откат сеанса или UOW к моменту выполнения инструкции KILL session ID|UOW WITH STATUSONLY уже завершен либо процедура отката в данный момент не выполняется, выполнение инструкции KILL session ID|UOW WITH STATUSONLY возвращает следующую ошибку:

«Сообщение 6120, уровень 16, состояние 1, строка 1».

«Состояние выполнения отчета не может быть получено. Операция отката для процесса с идентификатором <session ID> не выполняется».

Аналогичный отчет о состоянии может быть получен при повторном выполнении инструкции KILL session ID|UOW без использования параметра WITH STATUSONLY, однако делать это не рекомендуется. Повторный вызов инструкции KILL session ID может вызвать завершение нового процесса в случае, если процесс отката был завершен, а значение идентификатора сеанса было присвоено другой задаче до запуска новой инструкции KILL. Указание параметра WITH STATUSONLY предотвращает указанные последствия.

Разрешения

Необходимо быть членом фиксированных ролей базы данных sysadmin и processadmin.

Примеры

А. Использование инструкции KILL для завершения сеанса

Следующий пример показывает завершение сеанса с идентификатором 53.

KILL 53;
GO

Б. Использование инструкции KILL SPID WITH STATUSONLY для получения отчета о состоянии

В данном примере создается отчет о состоянии процесса отката указанного сеанса.

KILL 54;
KILL 54 WITH STATUSONLY;
GO

--This is the progress report.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

В. Применение инструкции KILL для завершения потерянной распределенной транзакции

Следующий пример показывает, как завершить потерянную распределенную транзакцию (идентификатор сеанса = -2) с UOW, равной D5499C66-E398-45CA-BF7E-DC9C194B48CF.

KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';

См. также

Справочник

KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Функции (Transact-SQL)
SHUTDOWN (Transact-SQL)
@@SPID (Transact-SQL)
sys.dm_exec_requests
sys.dm_exec_sessions
sys.dm_tran_locks
sp_lock (Transact-SQL)
sp_who (Transact-SQL)

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

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

Журнал изменений

Версия Журнал

14 апреля 2006 г.

Измененное содержимое:
  • Ссылки на SPID заменены на идентификатор сеанса.