УБИТЬ [СОЕДИНЕНИЕ | ЗАПРОС]
Синтаксис
KILL [HARD | SOFT] { {CONNECTION|QUERY} thread_id | QUERY ID query_id | USER user_name }
Описание
Каждое соединение с mysqld выполняется в отдельном потоке. Вы можете увидеть работающие потоки с помощью оператора SHOW PROCESSLIST и убить поток с помощью оператора KILL thread_id. Оператор KILL позволяет использовать необязательный модификатор CONNECTION или QUERY:
-
KILL CONNECTIONэквивалентенKILLбез модификатора: он завершает соединение, связанное с данным идентификатором потока или запроса. -
KILL QUERYзавершает оператор, который в данный момент выполняет поток connection_id, но сохраняет само соединение. -
KILL QUERY IDзавершает запрос по идентификатору query_id, сохраняя соединение.
Если соединение завершается с активной транзакцией, транзакция будет откачена. Если убивается только запрос, текущая транзакция останется активной. См. также idle_transaction_timeout.
Если у вас есть привилегия PROCESS, вы можете увидеть все потоки. Если у вас есть привилегия SUPER или, начиная с MariaDB 10.5.2, привилегия CONNECTION ADMIN, вы можете убить все потоки и запросы. В противном случае вы можете увидеть и убить только свои собственные потоки и запросы.
Убийство запросов, которые ремонтируют или создают индексы для таблиц MyISAM и Aria, может привести к повреждению таблиц. Используйте опцию SOFT для предотвращения этого!
Опция HARD (по умолчанию) убивает команду как можно скорее. Если вы используете SOFT, критические операции, которые могут оставить таблицу в несогласованном состоянии, не будут прерваны. Такие операции включают REPAIR и INDEX создание для таблиц MyISAM и Aria (REPAIR TABLE, OPTIMIZE TABLE).
KILL ... USER username убьёт все соединения/запросы для данного пользователя. USER может быть указан одним из следующих способов:
- имя пользователя (убить без учёта имени хоста)
- имя_пользователя@имя_хоста
- CURRENT_USER или CURRENT_USER()
Если вы указываете идентификатор потока, а такого потока не существует, будет выдано следующее сообщение об ошибке:
ERROR 1094 (HY000): Unknown thread id: <thread_id>
Если вы указываете идентификатор запроса, который не существует, будет выдано следующее сообщение об ошибке:
ERROR 1957 (HY000): Unknown query id: <query_id>
Однако, если вы указываете имя пользователя, сообщение об ошибке не выдаётся для неподключенных (или даже несуществующих) пользователей. Для проверки того, было ли соединение/запрос убито, можно использовать функцию ROW_COUNT().
Клиент, чьё соединение было убито, получит следующую ошибку:
ERROR 1317 (70100): Query execution was interrupted
Для получения списка существующих сессий используйте оператор SHOW PROCESSLIST или запросите таблицу Information Schema PROCESSLIST.
Примечание: Вы не можете использовать KILL с библиотекой встраиваемого сервера MariaDB, так как встроенный сервер просто выполняется внутри потоков приложения-хоста. Он не создаёт собственных потоков соединений.
Примечание: Вы также можете использовать mariadb-admin kill thread_id [,thread_id...] для убийства соединений. Для получения списка выполняемых запросов используйте mariadb-admin processlist. См. mariadb-admin.
Percona Toolkit содержит программу pt-kill, которую можно использовать для автоматического убийства соединений, соответствующих определённым критериям. Например, она может использоваться для завершения неактивных соединений или соединений, которые были активны более 60 секунд.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/kill/