¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí

Herramientas de supervisión

Introducción

Cuando una aplicación pasa a producción, una nueva tarea atañe al administrador: la de supervisar que la base de datos funciona de forma correcta. Esta responsabilidad implica ser capaz de detectar lo antes posible que se produce un error, para asegurarse de que el sistema esté siempre disponible, y también comprobar que el aumento de la carga de la aplicación es tolerado por la base de datos. En caso de que la aplicación funcione de forma satisfactoria y aumente de forma progresiva en tamaño, es preferible que el administrador sea capaz de saber si la base de datos puede soportar la carga y cuánto tiempo podrá la configuración actual satisfacer las demandas de la aplicación.

La supervisión de la base de datos se articula, por lo tanto, en torno a dos dominios: un sistema de alerta que se activa tan pronto como la base de datos deje de funcionar según lo previsto o deje de funcionar del todo y un sistema de gráfico que permita ver la evolución a lo largo del tiempo de indicadores relacionados con la salud de la base de datos.

Veremos en este capítulo los datos que MySQL pone a nuestra disposición para realizar estas tareas, así como algunas herramientas existentes que nos permitirán ahorrar tiempo.

Acceso a los metadatos

1. Comandos específicos de MySQL

a. Comandos SHOW

Podemos tener acceso a los metadatos, es decir, a la información sobre la forma en que se estructuran en particular las bases de datos, las tablas o columnas, con una serie de comandos específicos que usan la palabra clave SHOW. Entre los comandos SHOW más útiles, encontraremos:

  • SHOW SCHEMAS/SHOW DATABASES: lista las bases de datos de la instancia.

  • SHOW TABLES: lista las tablas de una base de datos.

  • SHOW COLUMNS: proporciona información sobre la estructura de una tabla.

  • SHOW KEYS (o SHOW INDEX): proporciona los índices de una tabla.

Para SHOW COLUMNS y SHOW KEYS, deberemos especificar la tabla de la cual deseamos obtener información mediante una cláusula FROM:


mysql> USE sakila 
Database changed 
 
mysql> SHOW COLUMNS FROM film_text; 
+-------------+--------------+------+-----+---------+-------+  
| Field       | Type         | Null | Key | Default | Extra |  
+-------------+--------------+------+-----+---------+-------+  
| film_id     | smallint(6)  | NO   | PRI | NULL    |       |  
| title       | varchar(255) | NO   | MUL | NULL    |       |  
| description | text         | YES  | MUL | NULL    |       |  
+-------------+--------------+------+-----+---------+-------+
 

SHOW FULL COLUMNS es una variante de SHOW COLUMNS que indica, además del juego de caracteres, la interclasificación (ver el capítulo Optimización para una explicación de estos conceptos) y los privilegios posibles de cada columna. 


mysql> SHOW COLUMNS FROM City LIKE 'C%'\G  
*************************** 1. row ***************************  
  Field: CountryCode  
   Type: char(3)  
   Null: NO  
    Key:  
Default:  
  Extra:  
  
mysql> SHOW FULL COLUMNS FROM City LIKE 'C%'\G  ...

Herramientas básicas para la supervisión

1. SHOW PROCESSLIST

SHOW PROCESSLIST permite que cualquier usuario que tenga el derecho SUPER vea la actividad de todos los clientes conectados al servidor. Este comando ofrece mucha información sobre el tráfico que recibe el servidor. Veremos cuáles son los clientes conectados en el momento de la ejecución de SHOW PROCESSLIST, las peticiones en curso de ejecucción y las peticiones bloqueadas. También encontraremos el número de identificación de cada conexión (columna ID), lo que nos permitirá utilizar el comando KILL si necesitamos detener con urgencia la ejecución de una petición.

La visualización se realiza en columnas, como muestra el siguiente ejemplo:


mysql> SHOW PROCESSLIST;  
+----+------+-----------+-------+---------+------+--------  
+---------------------------+  
| Id | User | Host      | db    | Command | Time | State  | Info 
|  
+----+------+-----------+-------+---------+------+--------  
+---------------------------+  
| 56 | root | localhost | world | Sleep   |   19 |        | NULL 
|  
| 57 | root | localhost | world | Query   |   12 | Locked | select 
count(*) from City |  
| 58 | root | localhost | NULL  | Query   |    0 | NULL   | SHOW 
PROCESSLIST          |  
+----+------+-----------+-------+---------+------+--------  
+---------------------------+
 

Si no tiene el derecho SUPER, SHOW PROCESSLIST no le mostrará la actividad de los demás clientes.

Podemos usar la opción SHOW PROCESSLIST FULL, cuya única diferencia es que no se trunca la pantalla si las líneas son demasiado largas.

También podemos usar la tabla PROCESSLIST de la BBDD information_schema en lugar de SHOW PROCESSLIST:


mysql> SELECT * FROM information_schema.PROCESSLIST;  
+----+------+-----------+-------+---------+------+-----------  
+----------------------------------------------+  
| ID | USER | HOST      | DB    | COMMAND | TIME | STATE     | 
INFO                                      ...

Performance Schema

1. Rol

Performance Schema es un mecanismo de instrumentación propuesto desde MySQL 5.5, que permite recoger mucha información sobre el comportamiento del servidor durante su funcionamiento. Los datos se almacenan en una base dedicada llamada performance_schema y pueden ser consultados por comandos SQL clásicos.

Performance Schema recibe novedades importantes en cada nueva versión de MySQL; por tanto, es importante tener las siguientes consideraciones en mente:

  • Con MySQL 5.5, desactivábamos en general Performance Schema (lo que era la opción por defecto), ya que la implementación era pobre, pero sobre todo tenía una significativa disminución de rendimiento.

  • A partir de MySQL 5.6, Performance Schema se activa por defecto. La disminución de rendimiento es mucho más limitada, y la instrumentación, mucho más rica. Las posibilidades son tan grandes que instalar el esquema sys (véase más adelante en esta sección) se recomienda para explotar con mayor fácilidad la información proporcionada. Sin embargo, si no pensamos utilizar las estadísticas de Performance Schema, es recomendable desactivar la característica para recuperar un poco de memoria y un poco de rendimiento.

  • A partir de MySQL 5.7, el esquema sys se instala por defecto, lo que hace mucho más simple la explotación de los datos de Performance Schema. Otra de las novedades destacadas es la aparición de tablas para supervisar la replicación, ya que el comando tradicional SHOW SLAVE STATUS se adapta cada vez menos a las nuevas posibilidades (replicación...

Identificación de los problemas de las peticiones

1. Peticiones lentas

Como era de esperar, la identificación de las peticiones lentas se efectúa en principio gracias al registro de peticiones lentas, en general capturando todas las peticiones durante cierto tiempo (una hora, por ejemplo) con la opción long_query_time = 0. La dificultad es poder interpretar luego la información de los datos capturados. La mejor herramienta para esta tarea es pt-query-digest, cuyas principales características veremos más adelante en esta sección.

Pero si está usando MySQL 5.6 o 5.7, existe una solución mucho más rápida: performance_schema o en concreto varias vistas de la base sys. Todas las vistas siguientes pueden ayudarnos a encontrar las peticiones mal optimizadas:


mysql> show tables like 'statement%'; 
+---------------------------------------------+   
| Tables_in_sys (statement%)                  |   
+---------------------------------------------+   
| statement_analysis                          |   
| statements_with_errors_or_warnings          |   
| statements_with_full_table_scans            |   
| statements_with_runtimes_in_95th_percentile |   
| statements_with_sorting                     |   
| statements_with_temp_tables                 |   
+---------------------------------------------+
 

El nombre de cada vista es explícito. Si por ejemplo intenta identificar las peticiones de creación de tablas temporales, mirará en la vista statements_with_temp_tables. Si buscamos las peticiones que recorren las tablas completas, las vemos del lado de la vista statements_with_full_table_scans. También será útil mirar statement_analysis, para que podamos ordenar las peticiones con la columna total_latency, lo que dará una lista de las peticiones más pesadas.

Verifique siempre que los consumidores siguientes están activados (lo están por defecto):


mysql> select * from performance_schema.setup_consumers where name 
like 'events%statement%' and enabled...

Herramientas de supervisión del sistema

1. Cacti

Cacti es una herramienta de supervisión disponible para UNIX/Linux y Windows, que permite obtener gráficos sobre diversos parámetros del servidor MySQL a través de una interfaz web. Cacti es muy simple de instalar y configurar, lo que es muy importante si necesitamos construir de forma rápida una solución gráfica que muestra la evolución en el tiempo del rendimiento del servidor.

Cacti funciona con un sistema de plantillas (templates) y podremos encontrar con facilidad en Internet las plantillas para MySQL. Una buena opción es descargar las plantillas facilitadas por Percona en la siguiente dirección: https://www.percona.com/software/mysql-tools/percona-monitoring-plugins

2. Grafana

Cacti es un proyecto antiguo; lo notaremos en particular en la interfaz de visualización de gráficos, que es totalmente obsoleta. Grafana (http://www.grafana.org) es mucho más moderna y permite visualizar cualquier tipo de series de datos. También podemos recoger gráficos en páginas especiales para, por ejemplo, visualizar directamente el consumo de CPU de todos los servidores.

3. Nagios

Nagios es un sistema de supervisión muy completo y usado con frecuencia. Permite supervisar múltiples parámetros en los servidores y puede desencadenar alertas sobre la interfaz, por SMS o correo electrónico, si un parámetro escapa de una gama de valores predeterminados. Una interfaz web permite consultar las pantallas de monitorización.

El principal escollo de la utilización de Nagios es su configuración, que desanima a más de un administrador de sistema. A pesar de ello, existen comunidades en torno a este software, lo que puede ser útil si tenemos dificultad para desplegar esta herramienta.

Observe que Nagios es modular y acepta el uso de plug-ins para enriquecer sus funcionalidades. Nagios Exchange es el sitio centralizando todos estos plugins (http://exchange.nagios.org).

4. Identificación de los problemas de sistema con Linux

a. vmstat

vmstat, instalada por defecto en la mayoría de los sistemas UNIX/Linux, proporciona información sobre la actividad...