Spec-Zone.ru › MySQL 5.7

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:

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

  • С PROCESS вы можете видеть все потоки.

Возможность прерывать потоки и заявления зависит от привилегии SUPER:

  • Без SUPER вы можете прерывать только свои собственные потоки и заявления.

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

Spec-Zone.ru

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