mysql.h


KILL

KILL thread_id

Cada conexión a mysqld se ejecuta en un hilo separado. Se puede ver qué hilo se está ejecutando con el comando SHOW PROCESSLIST y matarlo un hilo con el comando KILL thread_id.

Si se posee el privilegio PROCESS, se pueden ver todos los hilos. Si se posee el privilegio SUPER, se pueden matar todos los hilos. En otro caso, sólo es posible ver y matar los hilos propios.

También se pueden usar los comandos mysqladmin processlist y mysqladmin kill par examinar y matar hilos.

Nota: actualmente no se puede usar el comando KILL con la biblioteca del Servidor MySQL embebido, porque el servidor embebido sencillamente se ejecuta dentro de los hilos en el ordenador de la aplicación, no crea hilos de conexiones por si mismo.

Cuando se hace un KILL, se activa un banderín de 'kill' específico para el hilo.

En la mayoría de los casos, matar el hilo puede tomar cierto tiempo ya que el flag 'kill' se verifica sólo cada cierto tiempo.

  • El bucles ORDER BY y GROUP BY del comando SELECT, el banderín se comprueba después de leer un bloque de filas. Si el banderín de 'kill' está activot, la sentencia se aborta.
  • Cuando se realiza un ALTER TABLE, el banderín 'kill' se comprueba antes de que cada bloque de filas se lea desde la tabla original. Si está activo el comando se aborta y la tabla temporal se borra.
  • Cuando se ejecutan sentencias UPDATE o DELETE, el banderín se comprueba después de cada lectura de bloque y después de cada actualización o borrado de fila. Si está activo, la sentencia se aborta. Si no se están usando transacciones, los cambios no podrán ser rebobinados.
  • GET_LOCK() abortará con NULL.
  • Un hilo INSERT DELAYED almacenará rápidamente todas las filas que tenga en memoria y morirá.
  • Si el hilo está en la table de manipuladores de bloqueo (estado: Locked), el bloqueo de la tabla será rápidamente abortado.
  • Si el hilo está esperando a que haya espacio libre en disco en una llamada de escritura, la escritura se aborta con un mensaje de error de disco lleno.