13.7.6.4 Заявление KILL
KILL [CONNECTION | QUERY] processlist_id
Каждое подключение к mysqld выполняется в отдельном потоке. Вы можете прервать поток с помощью заявления KILL
.processlist_id
Идентификаторы потоковых процессов можно определить из столбца ID таблицы INFORMATION_SCHEMA PROCESSLIST, столбца Id результата SHOW
PROCESSLIST и столбца PROCESSLIST_ID таблицы Performance Schema threads. Значение для текущего потока возвращается функцией CONNECTION_ID().
KILL допускает необязательные модификаторы CONNECTION или QUERY:
KILL CONNECTIONэквивалентноKILLбез модификатора: она прерывает подключение, связанное с заданнымprocesslist_id, после прерывания любого выполняемого подключения заявления.KILL QUERYпрерывает выполняемое в настоящее время подключение заявления, но оставляет само подключение без изменений.
Возможность просмотра доступных для прерывания потоков зависит от привилегии PROCESS:
Возможность прерывать потоки и заявления зависит от привилегии SUPER:
Вы также можете использовать команды mysqladmin processlist и mysqladmin kill для проверки и прерывания потоков.
Вы не можете использовать KILL с библиотекой Embedded MySQL Server, потому что встроенный сервер просто выполняется внутри потоков приложения-хоста. Он не создает собственных потоков подключений.
Когда вы используете KILL, устанавливается флаг прерывания, специфичный для потока. В большинстве случаев потоку может потребоваться некоторое время для завершения работы, так как флаг прерывания проверяется только через определенные интервалы:
Во время операций
SELECT, дляORDER BYиGROUP BYциклов флаг проверяется после чтения блока строк. Если флаг прерывания установлен, операция прерывается.-
Операции
ALTER TABLE, которые делают копию таблицы, периодически проверяют флаг прерывания для каждой скопированной строки, считанной из исходной таблицы. Если флаг прерывания установлен, операция прерывается, и временная таблица удаляется.Заявление
KILLвозвращает без ожидания подтверждения, но проверка флага прерывания прерывает операцию в разумно короткий срок. Прерывание операции для выполнения необходимой очистки также занимает некоторое время. Во время операций
UPDATEилиDELETEфлаг прерывания проверяется после каждого блока чтения и после каждой обновленной или удаленной строки. Если флаг прерывания установлен, операция прерывается. Если вы не используете транзакции, изменения не отменяются.GET_LOCK()прерывается и возвращаетNULL.Если поток находится в обработчике блокировки таблицы (состояние:
Locked), блокировка таблицы быстро прерывается.Если поток ожидает свободного места на диске в вызове записи, запись прерывается с сообщением об ошибке «диск заполнен».
Прерывание операции REPAIR TABLE или OPTIMIZE TABLE над таблицей MyISAM приводит к тому, что таблица становится поврежденной и непригодной для использования. Любые чтение или запись в такую таблицу терпят неудачу, пока вы снова не оптимизируете или не восстановите ее (без прерывания).
© 2025 Oracle
Licensed under the GPLv2 License.