Cómo monitorizar las consultas SQL ejecutadas en un servidor de bases de datos MySQL Server 5.1. A veces determinadas consultas pueden ralentizar y afectar considerablemente al rendimiento de MySQL Server, con este recurso de MySQL Server podremos saber qué consultas son las que más tardan en ejecutarse, así podremos solucionar posibles problemas provocados por aplicaciones de terceros o las nuestras propias.

Situación inicial MySQL Server sobre GNU Linux Debian

Partiremos, para el ejemplo, de un servidor con MySQL Server 5.1 y con sistema operativo GNU Linux Debian 5. Es un servidor en producción con varios catálogos o bases de datos y varios usuarios de MySQL.

Cada catálogo de MySQL Server se corresponde con una aplicación de índole diversa: una base de datos para un servidor web dinámico, otra base de datos para un software de facturación, albaranes, almacén y presupuestos, Aviso Cambio de IP, contabilidad, recursos humanos:

Situación inicial MySQL Server sobre GNU Linux Debian

Cada aplicación (catálogo), por seguridad, tiene que tener sus propios usuarios de MySQL, de forma que cada usuario sólo tenga permisos sobre el catálogo de la aplicación para el que se creo. Incluso a veces cada catálogo o aplicación puede tener varios usuarios con varios niveles de permisos (un usuario para consultas en el caso de catálogos para sitios web y un usuario con permisos para inserciones y modificaciones):

Situación inicial MySQL Server sobre GNU Linux Debian

En este tipo de situaciones, donde tenemos un servidor con el motor de bases de datos gratuito MySQL Server y varios catálogos o bases de datos con diferentes aplicaciones que las usan o «atacan», a veces se producen cuellos de botella donde, puede que la red esté bien dimensionada, puede que los recursos hardware del servidor también estén bien dimensionados pero, aún asín, puede que a veces se produzca un mal rendimiento del servidor.

En este tipo de situaciones es conveniente averiguar si el problema puede estar en alguna consulta SQL de alguna de las aplicaciones que acceden al servidor MySQL Server. A continuación explicamos cómo activar la opción de auditoría o monitorización de consultas lentas de MySQL Server.

Cómo activar el seguimiento o auditoría de las consultas lentas en MySQL Server y Linux Debian

A continuación explicamos cómo activar la auditoría de consultas lentas (slow queries) de MySQL Server, realizaremos la operación en un servidor con el sistema operativo GNU Linux Debian 5, aunque para otras distribuciones es similar, incluso para equipos con Microsoft Windows (salvando algunos detalles).

En primer lugar añadiremos el siguiente parámetro al fichero my.cnf de configuración de MySQL en Linux, para ello podremos usar cualquier editor, como «nano», con el comando linux (desde una ventana de terminal):

sudo nano /etc/mysql/my.cnf

Cómo activar el seguimiento o auditoría de las consultas lentas en MySQL Server y Linux Debian

Añadiremos las siguientes líneas:

log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1

Donde:

  • log_slow_queries: indicamos con este parámetro la ubicación del fichero de log donde se guardarán las consultas lentas.
  • long_query_time: tiempo en segundos a partir del cual se añadirá la consulta SQL al fichero. Si la consulta tarda más en ejecutarse que el tiempo indicado en este parámetro será guardada en el fichero indicado en log_slow_queries.
Cómo activar el seguimiento o auditoría de las consultas lentas en MySQL Server y Linux Debian

Tras añadir estas líneas al fichero my.cnf, guardaremos pulsando Control + O y cerraremos pulsando Control + X.

Para que los cambios se apliquen hay que reiniciar el servicio de MySQL, teniendo en cuenta que si usamos un servidor en producción al reiniciar el servicio las conexiones actuales se cancelarán. Para reiniciar el servicio de MySQL ejecutaremos el comando linux:

sudo /etc/init.d/mysqld restart

Si queremos comprobar en algún momento si tenemos activada la opción log_slow_queries ejecutaremos el siguiente comando linux:

sudo mysqladmin -u root -p var |grep log_slow_queries

Devolverá ON si está activa la opción, OFF si está inactiva

Cómo activar el seguimiento o auditoría de las consultas lentas en MySQL Server y Linux Debian

A partir de ahora, si alguna consulta SQL de alguna de las aplicaciones que acceden a la base de datos tarda más de 1 segundo en ejecutarse se añadirá al fichero indicado. Para consultar el contenido de este fichero podremos ejecutar comando linux:

sudo nano /var/log/mysql/mysql-slow.log

Mostrará los datos básicos de las consultas SQL que tarden mucho en ejecutarse: puerto usado, tiempo empleado en ejecutarse la consulta, hora en la que se ejecutó, usuario MySQL que la ejecutó (y equipo), tiempo de bloqueo, registros enviados, registros examinados, catálogo (base de datos) usado, consulta SQL:

Cómo activar el seguimiento o auditoría de las consultas lentas en MySQL Server y Linux Debian

Con los datos anteriores nos será más fácil buscar y solucionar problemas de lentitud en consultas SQL.

Otras utilidades para obtener información de MySQL Server acerca de consultas SQL ejecutadas y conexiones

Existen otros comandos y utilidades de MySQL para averiguar el estado de ejecución de las consultas SQL. Por ejemplo, el siguiente comando:

mysqladmin -u root -p proc status

Otras utilidades para obtener información de MySQL Server acerca de consultas SQL ejecutadas y conexiones

Mostrará las conexiones actuales (en el momento de ejecutar el comando) que se están realizando al servidor de bases de datos MySQL Server. Mostrará datos de estado de estas conexiones: usuario MySQL, host, base de datos, comando, tiempo, estado, información, tiempo que está instalado el servidor, tareas ejecutadas, peticiones, consultas lentas, consultas totales abiertas, tablas abiertas, media de consultas por segundo, etc.

Otros comandos SQL para obtener información de las consultas SQL ejecutadas (de inserción, de selección, de actualización):

show global status where
Variable_name
like
‘Com_insert%’ or
Variable_name like ‘Com_select%’ or
Variable_name like ‘Com_update%’

Otras utilidades para obtener información de MySQL Server acerca de consultas SQL ejecutadas y conexiones

Con el siguiente comando:

SHOW session STATUS LIKE ‘Questions’

Mostrará el número de instrucciones ejecutadas por los equipos clientes:

Otras utilidades para obtener información de MySQL Server acerca de consultas SQL ejecutadas y conexiones