15.7.8.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:
Возможность прерывания потоков и заявлений зависит от привилегии CONNECTION_ADMIN и устаревшей привилегии SUPER:
Без
CONNECTION_ADMINилиSUPERвы можете прервать только свои собственные потоки и заявления.С
CONNECTION_ADMINилиSUPERвы можете прервать все потоки и заявления, за исключением потоков или заявлений, выполняемых с привилегиейSYSTEM_USER, для этого вашей сессии также должна быть предоставлена привилегияSYSTEM_USER.
Вы также можете использовать команды mysqladmin processlist и mysqladmin kill для проверки и прерывания потоков.
При использовании KILL, для потока устанавливается флаг прерывания. В большинстве случаев для завершения потока может потребоваться некоторое время, так как флаг прерывания проверяется только через определенные интервалы:
Во время операций
SELECT, дляORDER BYиGROUP BYциклов флаг проверяется после чтения блока строк. Если флаг прерывания установлен, операция прерывается.-
Операции
ALTER TABLEпо созданию копии таблицы периодически проверяют флаг прерывания для каждой нескольких скопированных строк, прочитанных из исходной таблицы. Если флаг прерывания установлен, операция прерывается, и временная таблица удаляется.Заявление
KILLвозвращает результат без ожидания подтверждения, но проверка флага прерывания прерывает операцию в разумно короткий промежуток времени. Прерывание операции для выполнения необходимой очистки также занимает некоторое время. Во время операций
UPDATEилиDELETEфлаг прерывания проверяется после каждого прочитанного блока и после каждой обновленной или удалённой строки. Если флаг прерывания установлен, операция прерывается. Если транзакции не используются, изменения не отменяются.GET_LOCK()прерывает выполнение и возвращаетNULL.Если поток находится в обработчике блокировки таблицы (состояние:
Locked), блокировка таблицы быстро прерывается.Если поток ожидает свободного места на диске в операции записи, запись прерывается с сообщением об ошибке “диск заполнен”.
EXPLAIN ANALYZEпрерывается и выводит первую строку результата.
Прерывание операции REPAIR TABLE или OPTIMIZE TABLE над таблицей MyISAM приводит к тому, что таблица повреждается и становится непригодной для использования. Любые чтение или запись в такую таблицу завершаются ошибкой, пока вы не оптимизируете или не восстановите её (без прерывания).
© 2025 Oracle
Licensed under the GPLv2 License.