mysql.h


SHOW PROCESSLIST

SHOW [FULL] PROCESSLIST

SHOW PROCESSLIST muestra qué procesos están corriendo. También se puede obtener esta información usando el comando mysqladmin processlist. Si se posee el privilegio SUPER, se pueden ver todos los procesos. En caso contrario, sólo será posible ver los propios procesos (esto es, los procesos asociados con la cuenta MySQL que se está usando). Vero la sintaxis de KILL. Si no se usa la palabra clave FULL, sólo se muestran los 100 primeros caracteres de cada consulta.

A partir de MySQL 4.0.12, la sentencia informa sobre el nombre de la máquina para conexiones TCP/IP usando el formato host_name:client_port para hacer más sencillo determinar qué cliente está haciendo cada cosa.

Esta sentencia es muy práctica si se obtiene el mensaje de error "too many connections" y se quiere averiguar qué está pasando. MySQL reserva una conexión extra para ser usada por cuentas que tengan el privilegio SUPER, para asegurar que los administradores siempre tendrán la posibilidad de conectar y verificar el sistema (asumiendo que no se ha dado tal privilegio a todos los usuarios).

Algunos estados frecuentes en la salida de SHOW PROCESSLIST son:

Checking table El proceso está realizando una comprobación (automática) de la tabla.
Closing tables Significa que el proceso está enviando los datos modificados de la tabla al disco y cerrando las tablas usadas. Esto debe ser una operación rápida. Si no lo es, entonces se debe verificar que el disco no esté lleno y que el disco no está siendo muy usado.
Connect Out Esclavo conectando al maestro.
Copying to tmp table on disk El conjunto de resultados temporar era más grande que tmp_table_size y el proceso está cambiando la tabla temporal del formato en memoria al basado en disco, para ahorrar memoria.
Creating tmp table El proceso está creando una tabla temporal para almacenar una parte del resultado de una consulta.
deleting from main table El servidor está ejecutando la primera parte de un borrado multitabla y borrando sólo desde la primera tabla.
deleting from reference tables El servidor está ejecutando la segunda parte de un borrado multitabla y eliminando las filas coincidentes de otras tablas.
Flushing tables El proceso está ejecutando FLUSH TABLES y esperando a que todos los procesos cierren sus tablas.
Killed Alguien ha enviado un 'kill' al proceso y se abortará la vez siguiente que verifique la marca de 'kill'. La marca se verifica en cada bucle exterior en MySQL, pero en algunos casos podrá requerir un pequeño tiempo que el proceso se elimine. Si el proceso está bloqueado por otro, la finalización tendrá efecto tan pronto como el otro proceso retire el bloqueo.
Locked La consulta está bloqueada por otra consulta.
Sending data Esta procesando filas para una sentencia SELECT y también está enviando datos al cliente.
Sorting for group El proceso está haciendo un ordenamiento para satisfacer un GROUP BY.
Sorting for order El proceso está haciendo un ordenamiento para satisfacer un ORDER BY.
Opening tables El proceso está intentado abrir una tabla. Este debe ser un procedimiento muy rápido, a no ser que algo impida la apertura. Por ejemplo, una sentencia ALTER TABLE o una sentencia LOCK TABLES pueden impedir la apertura de una tabla hasta que la sentencia haya terminado.
Removing duplicates La consulta ha usado SELECT DISTINCT de tal modo que MySQL no puede optimizar la operación de distinción en una primera etapa. Debido a esto, MySQL necesita una etapa extra para eliminar todas las filas duplicadas antes de enviar el resultado al cliente.
Reopen table El proceso ha obtenido un bloqueo para la tabla, pero se ha notificado que después de obtenerlo la estructura de la tabla ha cambiado. Ha liberado el bloqueo, cerrado la tabla y ahora está intentando reabrirla.
Repair by sorting El código de reparado está usando un ordenamiento para crear los índices.
Repair with keycache El código de reparado está usando la creación de claves una a una a través del caché de claves. Esto es mucho más lento que 'Repair by sorting'.
Searching rows for update El proceso esá ejecutando una primera fase para encontrar todas las filas coincidentes antes de actualizarlas. Esto tiene que hacerse si el UPDATE está modificando el índice que se usa para encontrar las filas involucradas.
Sleeping El proceso está esperando a que el cliente le envíe una nueva sentencia.
System lock El proceso está esperando a obtener unbloque de sistema externo para la tabla. Si no se están usando varios servidores mysqld que estén accediendo a las mismas tablas, se pueden desactivar los bloqueos de sistema con la opción --skip-external-locking.
Upgrading lock El manipulador de INSERT DELAYED está intentando obtener un bloqueo para la tabla para insertar filas.
Updating El proceso está buscando filas para acutalizar y actualizándolas.
User Lock El proceso está esperando un GET_LOCK().
Waiting for tables El proceso tiene una notificación de que la estructura para una tabla subyacente ha cambiado y necesita reabrir la tabla para obtener la nueva estructura. Sin embargo, para que pueda reabrir la tabla, debe esperar hasta que otros procesos hayan cerrado la tabla en cuestión. Esta notificación se produce si otro proceso ha usado FLUSH TABLES o una de las siguientes sentencias para la tabla en cuestión: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE u OPTIMIZE TABLE.
waiting for handler insert El manipulador de INSERT DELAYED ha procesado todas las inserciones pendientes y está esperando por más.

Muchos estados corresponden con operaciones muy rápidas. Si un proceso permanece en cualquiera de esos estados por muchos segundos, probablemente existe un problema que necesita ser investigado.

Hay otros estados que no se mencionan en la lista anterior, pero muchos de ellos son útiles sólo para encontrar bugs en el servidor.