KILL (Transact-SQL)KILL (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure даAzure Synapse Analytics (хранилище данных SQL) даParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Завершает пользовательский процесс, определяемый идентификатором сеанса или единицей работы (UOW).Ends a user process that is based on the session ID or unit of work (UOW). Если для завершения процесса, указанного с помощью идентификатора сеанса или UOW, необходимо отменить большое количество операций, для выполнения инструкции KILL может понадобиться значительное время.If the specified session ID or UOW has much work to undo, the KILL statement may take some time to complete. Процесс особенно затягивается при откате длительной транзакции.The process takes longer to complete particularly when the process involves rolling back a long transaction.

Инструкция KILL завершает нормальное подключение, которое внутренне прерывает транзакции, связанные с заданным идентификатором сеанса.KILL ends a normal connection, which internally stops the transactions that are associated with the specified session ID. В некоторых случаях используется координатор распределенных транзакций MicrosoftMicrosoft (MS DTC).At times, MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC) might be in use. Когда он используется, эту инструкцию также можно применять для завершения потерянных и сомнительных распределенных транзакций.If MS DTC is in use, you can also use the statement to end orphaned and in-doubt distributed transactions.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

-- Syntax for SQL Server  
  
KILL { session ID | UOW } [ WITH STATUSONLY ]   
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
KILL 'session_id'  
[;]   

АргументыArguments

session IDsession ID
Идентификатор сеанса завершаемого процесса.Is the session ID of the process to end. session ID является уникальным целым числом (int), которое при подключении присваивается каждому соединению пользователя.session ID is a unique integer (int) that is assigned to each user connection when the connection is made. Значение идентификатора сеанса остается привязанным к соединению в течение всего времени соединения.The session ID value is tied to the connection for the duration of the connection. По окончании соединения данное целое значение освобождается и может быть присвоено другому соединению.When the connection ends, the integer value is released and can be reassigned to a new connection.
Следующий запрос может помочь выявить session_id, который требуется удалить:The following query can help you identify the session_id that you want to kill:

SELECT conn.session_id, host_name, program_name,
    nt_domain, login_name, connect_time, last_request_end_time 
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
   ON sess.session_id = conn.session_id;

UOWUOW
Применимо к: SQL Server 2008SQL Server 2008 и вышеApplies to: (SQL Server 2008SQL Server 2008 and later

Задает идентификатор единицы работы (UOW) распределенных транзакций.Identifies the Unit of Work ID (UOW) of distributed transactions. UOW представляет собой идентификатор GUID, который можно получить из столбца request_owner_guid динамического административного представления sys.dm_tran_locks.UOW is a GUID that may be obtained from the request_owner_guid column of the sys.dm_tran_locks dynamic management view. UOW также может быть получен из журнала ошибок или из монитора транзакций MS DTC.UOW also can be obtained from the error log or through the MS DTC monitor. Дополнительные сведения о наблюдении за распределенными транзакциями см. в руководстве пользователя MS DTC.For more information about monitoring distributed transactions, see the MS DTC documentation.

Чтобы прервать потерянные распределенные транзакции, используйте инструкцию KILL UOW.Use KILL UOW to stop orphaned distributed transactions. Эти транзакции не связаны с идентификаторами реальных сеансов, но искусственно связаны с идентификатором сеанса -2.These transactions aren't associated with any real session ID, but instead are associated artificially with session ID = '-2'. Этот идентификатор упрощает поиск потерянных транзакций с помощью запроса столбца идентификатора сеанса из динамических административных представлений sys.dm_tran_locks, sys.dm_exec_sessions или sys.dm_exec_requests.This session ID makes it easier to identify orphaned transactions by querying the session ID column in sys.dm_tran_locks, sys.dm_exec_sessions, or sys.dm_exec_requests dynamic management views.

WITH STATUSONLYWITH STATUSONLY
Создает отчет о состоянии для сеанса с конкретным ИД или единицы работы, которые отменяются из-за выполненной ранее инструкции KILL.Generates a progress report about a specified session ID or UOW that is being rolled back because of an earlier KILL statement. Инструкция KILL WITH STATUSONLY не завершает и не откатывает сеанс с определенным идентификатором или единицу работы.KILL WITH STATUSONLY doesn't end or roll back the session ID or UOW. Команда только отображает текущее состояние отката.The command only displays the current progress of the rollback.

RemarksRemarks

Инструкция KILL обычно используется для прерывания процессов, блокирующих другие важные процессыKILL is commonly used to end a process that is blocking other important processes with locks. или выполняющих запросы, занимающие необходимые системные ресурсы.KILL can also be used to stop a process that is executing a query that is using necessary system resources. Системные процессы и процессы, выполняющие расширенные хранимые процедуры, не могут быть прерваны.System processes and processes running an extended stored procedure can't be ended.

Инструкцию KILL необходимо использовать осторожно, особенно при выполнении критических процессов.Use KILL carefully, especially when critical processes are running. Существует опасность прерывания собственного процесса.You can't kill your own process. Не следует также прерывать следующие процессы:You also shouldn't kill the following processes:

  • AWAITING COMMANDAWAITING COMMAND
  • CHECKPOINT SLEEPCHECKPOINT SLEEP
  • LAZY WRITERLAZY WRITER
  • LOCK MONITOR;LOCK MONITOR
  • SIGNAL HANDLERSIGNAL HANDLER

Аргумент @@SPID позволяет отобразить идентификатор текущего сеанса.Use @@SPID to display the session ID value for the current session.

Чтобы получить отчет о значениях идентификаторов активных сеансов, можно запросить столбец session_id из динамических административных представлений sys.dm_tran_locks, sys.dm_exec_sessions и sys.dm_exec_requests.To obtain a report of active session ID values, query the session_id column of the sys.dm_tran_locks, sys.dm_exec_sessions, and sys.dm_exec_requests dynamic management views. Можно также посмотреть столбец SPID, возвращаемый системной хранимой процедурой sp_who.You can also view the SPID column that the sp_who system stored procedure returns. Если откат выполняется для конкретного SPID, столбец cmd результирующего набора процедуры sp_who для этого SPID будет содержать значение KILLED/ROLLBACK.If a rollback is in progress for a specific SPID, the cmd column in the sp_who result set for that SPID indicates KILLED/ROLLBACK.

Если какое-либо соединение имеет блокировку на ресурс базы данных и блокирует обработку остальных соединений, идентификаторы сеансов заблокированных соединений появятся в столбце blocking_session_id представления sys.dm_exec_requests или в столбце blk, возвращенном хранимой процедурой sp_who.When a particular connection has a lock on a database resource and blocks the progress of another connection, the session ID of the blocking connection shows up in the blocking_session_id column of sys.dm_exec_requests or the blk column returned by sp_who.

Инструкцию KILL можно применять для решения проблем с сомнительными распределенными транзакциями.The KILL command can be used to resolve in-doubt distributed transactions. Эти транзакции представляют собой неразрешимые распределенные транзакции, возникшие в результате незапланированных повторных стартов сервера баз данных или координатора MS DTC.These transactions are unresolved distributed transactions that occur because of unplanned restarts of the database server or MS DTC coordinator. Дополнительные сведения о сомнительных транзакциях см. в разделе "Двухфазная фиксация" в статье Использование помеченных транзакций для согласованного восстановления связанных баз данных (модель полного восстановления).For more information about in-doubt transactions, see the "Two-Phase Commit" section in Use Marked Transactions to Recover Related Databases Consistently (Full Recovery Model).

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

Инструкция KILL WITH STATUSONLY создает отчет, если для сеанса или UOW выполняется откат, вызванный введенной ранее инструкцией KILL ИД сеанса|единица работы.KILL WITH STATUSONLY generates a report if the session ID or UOW rolls back because of a previous KILL session ID|UOW statement. Отчет о состоянии отображает процесс выполнения отката (в процентах), а также выводит ожидаемое время до окончания операции (в секундах).The progress report states the amount of rollback completed (in percent) and the estimated length of time left (in seconds). В отчете это отображается в следующей форме:The report states it in the following form:

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

Если откат единицы работы или сеанса по ИД завершается до выполнения инструкции KILL ИД сеанса|UOW WITH STATUSONLY, выполнение инструкции KILL ИД сеанса|UOW WITH STATUSONLY возвращает следующую ошибку:If the rollback of the session ID or UOW finishes before the KILL session ID|UOW WITH STATUSONLY statement runs, KILL session ID|UOW WITH STATUSONLY returns the following error:

"Msg 6120, Level 16, State 1, Line 1"  
"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."

Эта ошибка также возникает, если откат сеанса по ИД или UOW не выполняется,This error also occurs if no session ID or UOW is being rolled back

Аналогичный отчет о состоянии может быть получен при повторном выполнении инструкции KILL ИД сеанса|UOW без использования параметра WITH STATUSONLY.The same status report can be obtained by repeating the same KILL session ID|UOW statement without using the WITH STATUSONLY option. Однако не рекомендуется повторно выполнять эту инструкцию таким образом.However, we don't recommend repeating the option this way. Повторный вызов инструкции KILL ИД сеанса может прервать новый процесс в случае, если процесс отката был завершен, а значение идентификатора сеанса было присвоено другой задаче до запуска новой инструкции KILL.If you repeat a KILL session ID statement, the new process might stop if the rollback finishes and the session ID is reassigned to a new task before the new KILL statement runs. Указание параметра WITH STATUSONLY предотвращает указанные последствия.Prevent the new process from stopping by specifying WITH STATUSONLY.

РазрешенияPermissions

SQL ServerSQL Server: Необходимо разрешение ALTER ANY CONNECTION.SQL ServerSQL Server: Requires the ALTER ANY CONNECTION permission. Разрешение ALTER ANY CONNECTION включено с членством в предопределенных ролях сервера sysadmin или processadmin.ALTER ANY CONNECTION is included with membership in the sysadmin or processadmin fixed server roles.

База данных SQLSQL Database: необходимо разрешение KILL DATABASE CONNECTION.База данных SQLSQL Database: Requires the KILL DATABASE CONNECTION permission. Имя входа субъекта серверного уровня имеет разрешение KILL DATABASE CONNECTION.The server-level principal login has the KILL DATABASE CONNECTION.

ПримерыExamples

A.A. Использование инструкции KILL для остановки сеансаUsing KILL to stop a session

В следующем примере показана остановка сеанса с идентификатором 53.The following example shows how to stop session ID 53.

KILL 53;  
GO  

Б.B. Использование инструкции KILL SPID WITH STATUSONLY для получения отчета о состоянииUsing KILL session ID WITH STATUSONLY to obtain a progress report

В данном примере создается отчет о состоянии процесса отката указанного сеанса.The following example generates a status of the rollback process for the specific session ID.

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.  

В.C. Применение инструкции KILL для прерывания потерянной распределенной транзакцииUsing KILL to stop an orphaned distributed transaction

Следующий пример показывает, как прервать потерянную распределенную транзакцию (идентификатор сеанса: -2) с UOW, равным D5499C66-E398-45CA-BF7E-DC9C194B48CF.The following example shows how to stop an orphaned distributed transaction (session ID = -2) with a UOW of D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

См. также:See Also

KILL STATS JOB (Transact-SQL) KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL) KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Встроенные функции (Transact-SQL) Built-in Functions (Transact-SQL)
SHUTDOWN (Transact-SQL) SHUTDOWN (Transact-SQL)
@@SPID (Transact-SQL) @@SPID (Transact-SQL)
sys.dm_exec_requests (Transact-SQL) sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL) sys.dm_exec_sessions (Transact-SQL)
sys.dm_tran_locks (Transact-SQL) sys.dm_tran_locks (Transact-SQL)
sp_lock (Transact-SQL) sp_lock (Transact-SQL)
sp_who (Transact-SQL)sp_who (Transact-SQL)