Evaluar y finalizar procesos de MySQL

Cuando el servidor se encuentra con mucha carga de CPU, podemos analizar los procesos en ejecución con el comando top en Linux o mediante el administrador de tareas en Windows.

En caso de que el servicio de Mysql sea el que está consumiendo principalmente los recursos, tenemos la posibilidad de ver en detalle lo que está sucediendo.

Para obtener los procesos que se están ejecutando en el servidor Mysql, abrimos una conexión e introducimos el comando:

mysql> SHOW PROCESSLIST;

    Id   User Host            db     Command   Time State  Info 
------ ------ --------------- ------ ------- ------ ------ ----------------
   130   root localhost:51094 (NULL) QUERY        0 (NULL) SHOW PROCESSLIST
   131   root localhost:51095 (NULL) Sleep     1143 (NULL)

En los resultados, se muestran los procesos asociados a la cuenta con la que nos encontramos conectados. Si esta cuenta tiene el privilegio “Process” entonces verá los procesos de TODAS las cuentas (se puede consultar con SHOW PRIVILEGES).

Esta consulta presenta solamente los primeros 100 caracteres de la consulta en la columna Info. Para ver la consulta completa, se debe agregar el parámetro FULL:

mysql> SHOW FULL PROCESSLIST;

Si vemos que alguno de los procesos está bloqueando todo el resto y queremos terminarlo, utilizamos:

mysql> KILL <ID>;

donde ID es el identificador del proceso mostrado en el resultado del PROCESSLIST.

Anuncios

Controlar los procesos de línea de comandos en Linux

Detallaremos a continuación la forma de manejar los procesos de línea de comandos (jobs) de Linux. Un proceso normalmente, se ejecuta en primer plano. Durante el tiempo que se esté ejecutando bloquea el uso de esa consola.

Detener un proceso en ejecución

Mientras un proceso esté ejecutándose, podremos detenerlo estando en la consola y presionando:

Ctrl + Z

Por lo general, esto es necesario cuando tarda más de lo necesario y necesitamos seguir usando la consola.

Ejecutar un proceso directamente en segundo plano

Para que el proceso sea ejecutado en segundo plano, sin atarlo a la consola en uso, debemos agregarle ‘&’ al final de su invocación:

$ proceso &

Ver los procesos detenidos y en ejecución (en segundo plano)

Mediante el comando jobs podremos ver el listado de jobs y para cada uno de ellos:

  • número de job (entre corchetes) que lo identifica
  • indicador de job
    • + actual
    • – previo
  • estado
    • Detenido
    • Ejecutando
  • proceso

Solo puede haber un job actual (y uno previo). El job actual tambien se puede referenciar por el indicador % o directamente sin especificar ningún número de job.

El número de job y los indicadores de job se pueden preceder por un %, enfatizando la naturaleza de que se trata de un job. Por lo tanto, es lo mismo ‘%1’ que ‘1’ y ‘%+’ que ‘+’.

Continuar con un proceso en segundo plano (background)

Teniendo un proceso detenido podemos continuar su ejecución en segundo plano, manteniendo el control de la consola, ingresando el comando bg. Como no se especifica un argumento, se utiliza el job actual por lo que es lo mismo bg + o bg %

Si conocemos el número de job podemos indicarlo como argumento para actuar sobre el mismo: bg job-num o bg %job-num

Utilizar directamente el número de job con & detrás lo envía a segundo plano, pero para que funcione obligatoriamente debemos precederlo con %. Por lo tanto %1 & es lo mismo que bg %1

Continuar con un proceso en primer plano (foreground)

Teniendo un proceso detenido o ejecutándose en segundo plano podemos continuar su ejecución en primer plano ingresando el comando fg. Como no se especifica un argumento, se utiliza el job actual por lo que es lo mismo fg + o fg %

Si conocemos el número de job podemos indicarlo como argumento para actuar sobre el mismo: fg job-num o fg %job-num

Utilizar directamente el número de job también lo trae a primer plano, pero para que funcione obligatoriamente debemos precederlo con %. Por lo tanto %1 es lo mismo que fg %1

Cambiar la prioridad de un proceso en Windows

Cuando ya tenemos un proceso en ejecución y notamos que nos está ralentizando el uso de la computadora (por ejemplo, la importación de un respaldo de una base de datos) o necesitamos que termine más rápido (por ejemplo el procesamiento de una cola de mails para enviar) podemos cambiar la prioridad del mismo:

  1. Abrir el Administrador de tareas
  2. Abrir la solapa Procesos
  3. Click derecho sobre el proceso
  4. Elegir la opción “Establecer prioridad” y seleccionar alguna de las disponibles:
    • para mayor prioridad: Por encima de lo normal, Alta o Tiempo Real
    • para menor prioridad: Por debajo de lo normal o Baja

 

Distintas formas de abrir el Administrador de tareas en Windows

Para abrir el Administrador de tareas podemos optar por cualquiera de estas formas:

  • Presionar Ctrl + Shift + Escape
  • Presionar Ctrl + Alt + Supr y elegir la última opción “Iniciar el Administrador de tareas”
  • Presionar Win + R (Ejecutar…) y tipear “taskmgr”
  • Click derecho sobre la barra de tareas y seleccionar la opción “Iniciar el Administrador de tareas”

Ejecutar procesos indicando la prioridad en Linux

Cuando ejecutamos un proceso, es el sistema operativo quien determina la prioridad para asignarle recursos. Se basa en una combinación de valores y datos para hacerlo. En particular, para Linux y cuando el recurso es la cantidad de CPU concedida, podemos indicar el valor de “niceness” (bondad o amabilidad) del proceso. Para poder hacerlo, debemos ser un superusuario (root).

El valor de niceness por defecto para un proceso es heredado de su padre, y por lo general, es 0. Cuanto mayor sea su valor (hasta 19), menor será la prioridad resultante, y al ser menor (hasta -20), el proceso tendrá menos prioridad.

Si queremos entonces lanzar un comando con cierto valor de niceness:

# nice -n<valor> <comando>

Por ejemplo, para dar mayor prioridad de CPU a nuestro script test.pl:

# nice -n-10 ./test.pl

También podés Ejecutar procesos indicando la prioridad en Windows