KILL (Transact-SQL)

 

ПРИМЕНЯЕТСЯ К:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data Warehouse

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

С помощью инструкции KILL можно завершить нормальное соединение, которое внутренне завершит транзакции, связанные с заданным идентификатором сеанса. Инструкция может также использоваться для завершения потерянных и сомнительных распределенных транзакций при Microsoft координатора распределенных транзакций (MS DTC) уже используется.

Topic link icon Синтаксические обозначения в Transact-SQL

-- Syntax for SQL Server  
  
KILL { session ID | UOW } [ WITH STATUSONLY ]   

-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
KILL 'session_id'  
[;]   

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

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

UOW

Применяется к: (SQL Server 2008 через SQL Server 2016.

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

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

WITH STATUSONLY
Создает отчет о ходе выполнения о указанного идентификатор сеанса или UOW , который выполняет откат из-за выполненной ранее инструкции KILL. Инструкция KILL WITH STATUSONLY не завершает и откат идентификатор сеанса или 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. Дополнительные сведения о проблемных транзакций, см. в разделе «Двухфазная фиксация» использование помеченных транзакций для восстановления связанных баз данных постоянно (модель полного восстановления).

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

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

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

"Msg 6120, Level 16, State 1, Line 1"

"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."

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

SQL Server: Требуется разрешение ALTER ANY CONNECTION. Разрешение ALTER ANY CONNECTION включено с членством в предопределенных ролях сервера sysadmin или processadmin.

База данных SQL: Требуется разрешение KILL DATABASE CONNECTION. Имя входа участника уровня сервера имеет ПОДКЛЮЧЕНИЕ к базе данных KILL.

A. Использование инструкции 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 для завершения сеанса

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

KILL 'SID535';  

KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Встроенные функции (Transact-SQL)
Завершение работы (Transact-SQL)
@@SPID (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)
sys.dm_tran_locks (Transact-SQL)
sp_lock (Transact-SQL)
sp_who (Transact-SQL)

Добавления сообщества

ДОБАВИТЬ
Показ: