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


KILL (Transact-SQL)

Applies to:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

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

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

Соглашения о синтаксисе Transact-SQL

Syntax

Синтаксис для SQL Server, базы данных SQL Azure или управляемого экземпляра SQL Azure:

KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]

Синтаксис Для Azure Synapse Analytics, системы платформы аналитики (PDW) и Microsoft Fabric:

KILL 'session_id'
[ ; ]

Arguments

session_id

Идентификатор сеанса завершения процесса. session_id is a unique int that is assigned to each user connection when the connection is made. Значение идентификатора сеанса остается привязанным к соединению в течение всего времени соединения. По окончании соединения данное целое значение освобождается и может быть присвоено другому соединению.

Следующий запрос может помочь выявить session_id, который требуется удалить:

 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;

UOW

Определяет единицу рабочего идентификатора (UOW) распределенных транзакций. UOW is a GUID that might be obtained from the request_owner_guid column of the sys.dm_tran_locks dynamic management view. UOW also can be obtained from the error log or through the MS DTC monitor. Дополнительные сведения о наблюдении за распределенными транзакциями см. в руководстве пользователя MS DTC.

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

WITH STATUSONLY

Used to generate a progress report for a specified UOW or session_id that is being rolled back because of an earlier KILL statement. KILL WITH STATUSONLY не завершает или не откатывает идентификатор UOW или сеанса. Команда только отображает текущее состояние отката.

WITH COMMIT

Используется для убийства неразрешенной распределенной транзакции с фиксацией. Only applicable to distributed transactions, you must specify a UOW to use this option. For more information, see distributed transactions.

WITH ROLLBACK

Используется для убийства неразрешенной распределенной транзакции с откатом. Only applicable to distributed transactions, you must specify a UOW to use this option. For more information, see distributed transactions.

Remarks

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

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

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

Используется @@SPID для отображения значения идентификатора сеанса (SPID) для текущего сеанса.

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

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

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

Использование WITH STATUSONLY

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

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

Если откат идентификатора сеанса или UOW завершается до KILL <session ID> WITH STATUSONLYKILL <UOW> WITH STATUSONLY выполнения инструкции, KILL ... 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."

Эта ошибка также возникает при откате идентификатора сеанса или отката UOW.

Один и тот же отчет о состоянии можно получить, повторяя одну и ту же KILL инструкцию без использования WITH STATUSONLY параметра. Однако не рекомендуется повторно выполнять эту инструкцию таким образом. Если повторить KILL <session_id> инструкцию, новый процесс может остановиться, если откат завершится, и идентификатор сеанса переназначен новой задаче перед запуском новой KILL инструкции. Предотвратить остановку нового процесса путем указания WITH STATUSONLY.

Permissions

SQL Server: Requires the ALTER ANY CONNECTION permission. ALTER ANY CONNECTION is included with membership in the sysadmin or processadmin fixed server roles.

SQL Database: Requires the KILL DATABASE CONNECTION permission. Имя входа субъекта на уровне сервера имеет KILL DATABASE CONNECTION разрешение.

Хранилище данных Microsoft Fabric: Требуется разрешение элемента монитора или членство в роли администраторов рабочей области.

База данных SQL в Microsoft Fabric:KILL DATABASE CONNECTION Требуется разрешение в ядре СУБД SQL или разрешение на запись элемента в рабочей области Fabric.

Azure Synapse Analytics: требуются разрешения администратора.

Examples

A. Использование KILL для остановки сеанса

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

KILL 53;
GO

B. Получение отчета о ходе выполнения с помощью идентификатора сеанса KILL WITH STATUSONLY

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

KILL 54;
KILL 54 WITH STATUSONLY;
GO

Вот результирующий набор.

spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

C. Использование KILL для остановки потерянных распределенных транзакций

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';