Sintaxe de KILL
Cada conexão ao mysqld
executa em uma thread separada. Você pode ver quais threas estão em execução com o comando SHOW PROCESSLIST
e matar uma thread com o comando KILL thread_id
.
Se você tiver o privilégio PROCESS
, você pode ver todas as threads. Se você tiver o privilégio SUPER
, você pode matar todas as threads. Caso contrário, você pode ver e matar somente suas próprias threads.
Você também pode usar os comandos mysqladmin processlist
e mysqladmin kill
para examinar e matar threads.
Nota: Atualmente você não pode utilizar KILL
com a biblioteca do servidor MariaDB embutido, porque o servidor embutido apenas roda dentro das threads da aplicação, ela não cria threads de conexões por si própria.
Quando você utiliza um KILL
, um sinal (flag) kill
especifico é configurado para a thread.
Na maioria dos casos pode levar algum tempo para a thread morrer pois o sinal kill só é checado em intervalos específicos.
- Nos loops
SELECT
,ORDER BY
eGROUP BY
, o sinal é checado depois de ler um bloco de registros. Se o sinal kill está habilitado a instrução é abortada. - Na execução de um
ALTER TABLE
o sinal kill é conferido antes de cada bloco de registros ser lido da tabela original. Se o sinal kill foi habilitado, o comando é abortado e a tabela temporária apagada. - Ao fazer um
UPDATE TABLE
andDELETE TABLE
, o sinal de kill é conferido depois de que cada bloco é lido e depois de cada atualização ou remoção de registro. Se o sinal kill está habilitado, a instrução é abortada. Note que se você não estiver utilizando transações, as alterações não irão ser desfeitas! GET_LOCK()
irá aborar comNULL
.- Uma thread
INSERT DELAYED
irá rapidamente descarregar todos registros que estiverem em memória e morrer. - Se a thread estiver no manipulador de bloqueio de tabelas (status:
Locked
), o bloqueio de tabela será abortado rapidamente. - Se a thread estiver esperando por espaço livre em disco numa chamada
write
, a escrita é abortada com uma mensagem de espaço em disco insuficiente.