Spec-Zone.ru › MySQL 8.4

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:

  • Без PROCESS вы можете видеть только свои собственные потоки.

  • С 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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/kill.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API