Spec-Zone.ru › MySQL 9.2

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.

  • Если поток ожидает освобождения дискового пространства в вызове записи, запись прерывается с сообщением об ошибке «диск заполнен».

  • EXPLAIN ANALYZE прерывается и выводит первую строку вывода.

Предупреждение

Прерывание операции REPAIR TABLE или OPTIMIZE TABLE над таблицей MyISAM приводит к тому, что таблица становится поврежденной и непригодной для использования. Все чтения или записи в такую таблицу завершаются ошибкой, пока вы не оптимизируете или не восстановите её (без прерывания).

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/kill.html

Spec-Zone.ru

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