Tutoriales

6 herramientas CLI para monitorear consultas, subprocesos y registros lentos de MySQL

MySQL viene con buenos diagnósticos incorporados, pero cuando su base de datos se ralentiza bajo carga, necesita herramientas de línea de comandos para mostrarle exactamente qué está sucediendo: qué consultas se están ejecutando, cuánto tiempo tardan y dónde están los cuellos de botella.

Esta guía cubre 6 herramientas de línea de comandos de código abierto para monitorear el tiempo de actividad, la carga, las consultas lentas y el rendimiento general de MySQL en Linux. Estas herramientas están probadas ubuntu y RHELpero se ejecutarán en cualquier distribución moderna de Linux que ejecute MySQL 8.0 o Base de datos María 10.6+.

Obtener estadísticas de consultas y tiempo de actividad de servidores MySQL en vivo alguna vez significó una excavación manual SHOW STATUS resultados, pero estas herramientas convierten estos datos en una vista legible en tiempo real, lo que le ayuda a detectar problemas de rendimiento antes de que destruyan su sitio.

Si desea obtener más información sobre la supervisión del rendimiento de Linux además de MySQL, Herramienta de monitoreo del rendimiento de Linux Los cursos de Pro TecMint cubren métricas a nivel de sistema de un extremo a otro.

1.mi cima

Maitop Es una herramienta de monitoreo MySQL basada en consola, similar al comando superior de Linux, que proporciona vistas de terminal en tiempo real de subprocesos, consultas por segundo, consultas lentas y tiempo de actividad del servidor.

original Maitop El proyecto fue abandonado en 2009 y los paquetes de distribución antiguos ya no funcionan con mysql 8. existir ubuntu, apt install mytop Falló completamente, por lo que deberías usar una bifurcación comunitaria mantenida activamente lanzada en 2026 y soporte. MySQL 8.0 y MariaDB 10.3+.

En Ubuntu/Debian:

Publicaciones relacionadas
sudo apt install libdbi-perl libdbd-mysql-perl libterm-readkey-perl
cd ~/
git clone 
cd mytop
chmod +x mytop
sudo cp mytop /usr/local/sbin/

En RHEL/Rocky Linux:

sudo dnf install perl-DBI perl-DBD-MySQL perl-TermReadKey
cd ~/
git clone 
cd mytop
chmod +x mytop
sudo cp mytop /usr/local/sbin/

luego corre mytop y conéctese a su servidor MySQL:

mytop -u root -p
OR
mytop -u root -p'YourPassword'

producción:

MySQL on localhost (8.0.36)                up 5+12:03:44 [12:45:01]
 Queries: 2.5M   qps:   87   Slow:    14   Se/In/Up/De(%):  62/18/14/06
             qps now:   92   Slow qps: 0.3  Threads:    9 (   8/  1)
 Key Efficiency: 98.6%  Bps in/out:  1.2k/140k   Now in/out:  1.4k/168k

      Id    User       Host/IP         DB      Time    Cmd Query or State
       --    ----       -------         --      ----    --- ----------
      112    app_user   192.168.1.45    mydb       0    Query SELECT * FROM orders WHERE...
      113    root       localhost       mysql      0    Sleep

La sección superior es lo que estás viendo.

  • Slow: 14 Le indica que se han ejecutado 14 consultas lentas desde que se inició el servidor.
  • qps now: 92 es la tasa de consultas en tiempo real. Si este número aumenta y su aplicación se ralentiza al mismo tiempo, tiene un problema de carga que vale la pena investigar.
  • de acuerdo a ? Ver todos los atajos de teclado en mytop.
  • de acuerdo a k Elimina hilos específicos por ID.

Si esto le ayuda a comprender finalmente lo que sucede dentro de un servidor MySQL ocupado, [share]Comparte con tu equipo[/share]porque la mayoría de los administradores de sistemas desconocen la existencia de mytop.

2. Creación

Innotop es un monitoreo más detallado en tiempo real de servidores que ejecutan MySQL base de datos Motor de almacenamiento, que es el motor predeterminado en cada instalación de MySQL 8.

Dónde mytop Mostrar lista de hilos, innotop mostrarte base de datos Estadísticas del grupo de búfer, esperas de bloqueo, estado de transacciones y estadísticas de E/S. Desea este perfil cuando las consultas son lentas pero el número de subprocesos parece bueno.

Instalar Chuangtuo En Linux, utilice las siguientes instrucciones para su distribución de Linux específica.

sudo apt install innotop         [On Debian, Ubuntu and Mint]
sudo dnf install innotop         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add innotop             [On Alpine Linux]
sudo pacman -S innotop           [On Arch Linux]
sudo zypper install innotop      [On OpenSUSE]    
sudo pkg install innotop         [On FreeBSD]

Si no está en tu repositorio, clónalo desde GitHub y ejecútalo:

git clone 
cd innotop
innotop -u root -p

producción:

[RO] InnoDB Txns, InnoDB 8.0.36, up 5+12:04:11, 9 threads, 92.0 QPS

CXN     Timeouts  Deadlocks  Txns  MaxSQL  RollSegments  History  Queries
local          0          0     3      0%           128       42  1234567

ID  User        Host    DB      Time  Undo  Query
42  app_user    local   mydb       3    18  UPDATE inventory SET qty=qty-1 WHERE...

3.gestión de mysql

mysqladmin viene con cada instalación de MySQL y es la forma más rápida de verificar el tiempo de actividad, el estado de la conexión y las tasas de consultas en tiempo real con un solo comando sin abrir una sesión interactiva.

Verifique la versión del servidor y el tiempo de actividad:

mysqladmin -u root -p version

producción:

mysqladmin  Ver 10.0 Distrib 10.11.15-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version		10.11.15-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 5 days 12 hours 3 min 44 sec

Threads: 9  Questions: 2491823  Slow queries: 14  Opens: 412  Flush tables: 3  Open tables: 405  Queries per second avg: 5.287

este Slow queries: 14 La línea es a la que vale la pena prestar atención aquí. Este número sólo aumenta mientras el servidor está funcionando, no se reinicia. Si lo marca ahora y es 14, luego lo vuelve a verificar una hora más tarde y es 140, entonces vale la pena investigar los cambios que ocurrieron en la última hora.

Para ver actualizaciones de estado en vivo cada 2 segundos:

mysqladmin -u root -p -i 2 status

producción:

Uptime: 475424  Threads: 9  Questions: 2491823  Slow queries: 14  Opens: 412  ...
Uptime: 475426  Threads: 11  Questions: 2491985  Slow queries: 14  Opens: 412  ...

Eso Threads El salto de bits le indica picos de conexión instantáneos. si se arrastra hasta tu max_connections restricciones, nuevas conexiones comienzan a ser rechazadas.

4.Kit de herramientas de Percona

Kit de herramientas Percona es una colección de herramientas de línea de comandos de código abierto creadas por Percona para la producción mysql administrativo. Se pueden utilizar dos herramientas de esta suite directamente para monitorear el rendimiento: pt-query-digest para análisis de consultas lento y pt-mysql-summary Obtenga una instantánea completa del estado del servidor.

Kit de herramientas Percona no en default ubuntu o RHEL repos, por lo que primero debe unirse al repositorio de Percona y luego instalarlo.

En Ubuntu/Debian:

sudo apt update && sudo apt install curl
curl -O 
sudo apt install gnupg2 lsb-release ./percona-release_latest.generic_all.deb
sudo apt update
sudo percona-release enable pt release
sudo apt install percona-toolkit

En RHEL/Rocky Linux:

sudo yum install -y 
sudo percona-release enable pt release
sudo yum install percona-toolkit

resumen-pt-mysql

Comience aquí cuando inicie sesión por primera vez en un servidor o solucione un problema para el cual no tiene contexto. Vuelca un resumen legible por humanos de todo: versión de MySQL, configuración, tamaño de la tabla, estado de replicación, uso crítico del búfer:

pt-mysql-summary -- -u root -p

producción:

# Percona Toolkit MySQL Summary Report #######################
                   System time | 2025-05-14 12:45:01 UTC
# Instances ##################################################
  Port  Data Directory             Nice OOM Socket
  ===== ========================== ==== === ======
  3306  /var/lib/mysql              0   0  /var/run/mysqld/mysqld.sock
# MySQL Executable ############################################
       Path to executable | /usr/sbin/mysqld
              Has symbols | Yes
# Processlist ################################################
  Command                        COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
  Query                                 3       3         4         3
  Sleep                                 6       0       840       420

Eso Sleep recuento alto SUM(Time) Valor significa que las conexiones que han estado inactivas durante mucho tiempo permanecen abiertas. Este es un problema de ajuste del grupo de conexiones, no un problema de consulta. pt-mysql-summary Muestra esta señal con precisión sin que sepas cuál SHOW STATUS variables a visualizar.

resumen de consulta pt

Esta es la herramienta de consulta lenta más útil de MySQL. Primero, habilite el registro de consultas lento (si aún no está habilitado):

mysql -u root -p -e "SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1;"

luego corre pt-query-digest Para registros de consultas lentos:

pt-query-digest /var/log/mysql/mysql-slow.log

producción:

# 450ms user time, 30ms system time, 28.00M rss, 220.15M vsz
# Current date: 2025-05-14 12:45:01
# Hostname: web01
# Files: /var/log/mysql/mysql-slow.log
# Overall: 184 total, 8 unique, 0.02 QPS, 0.14x concurrency
# Attribute          total     min     max     avg     95%  stddev  median
# ============     ======= ======= ======= ======= =======  ======  ======
# Exec time           512s      1s    143s     3s      9s      14s     1s
# Rows examine     1.02G      0    180M    5.7M   30M    18M    800k

# Profile
# Rank  Query ID           Response time  Calls  R/Call  Item
# ====  =================  =============  =====  ======  ====
#    1  0x813031B8BBC3B329  341s  66.6%    42  8.12s   SELECT orders items
#    2  0xA0CA1BBEDCD1B80D  108s  21.1%    89  1.21s   SELECT users sessions

Eso Rank 1 Las consultas representaron el 66% de todo el tiempo de consulta lento. Corrió 42 veces con un promedio de 8 segundos por carrera. Este es tu objetivo. Corrija la consulta, agregue los índices que faltan o reescriba JOIN y eliminará el 66% de la carga lenta de consultas de una sola vez.

La ruta de registro de consultas lenta en Ubuntu suele ser /var/log/mysql/mysql-slow.log. En RHEL suele ser /var/lib/mysql/hostname-slow.log. si ves Permission denied,correr sudo.

5.Tuner MySQL

Sintonizador MySQL es un script Perl que se conecta a un servidor MySQL, lee una serie de variables de estado y configuración y genera una lista priorizada de recomendaciones de ajuste.

Es la herramienta adecuada para ejecutar en un servidor MySQL recién configurado, o cuando sospecha que hay un problema con su configuración, o después de un aumento de tráfico.

Descárgalo y ejecútalo:

wget 
chmod +x mysqltuner.pl
perl mysqltuner.pl --user root --pass your-mysql-root-password

reemplazar your-mysql-root-password Utilice su contraseña raíz de MySQL real. este --pass la bandera lo pasa directamente; sin él, Sintonizador MySQL Se le solicitará.

>>  MySQLTuner 2.2.12 - Major Hayden [email protected]>
 >>  Bug reports, feature requests, and downloads at 
 >>  Run with '--help' for additional options and output filtering

[--] Skipping version check for MySQLTuner script
[OK] Logged in as root@localhost

-------- General Statistics --------------------------------------------------
[--] Performing tests on MySQL 8.0.36
[OK] Currently running supported MySQL version 8.0.36
[OK] Operating on 64-bit architecture

-------- Performance Metrics -------------------------------------------------
[OK] Query cache is disabled by default due to its known issues.
[!!] InnoDB buffer pool / data size: 128M / 2G
[!!] InnoDB buffer pool instances: 1 (recommended 2)
[!!] Slow queries: 14 (0% of 2491823 total queries)

-------- Recommendations -----------------------------------------------------
General recommendations:
    Increase innodb_buffer_pool_size to 1.5G or more
    Add innodb_buffer_pool_instances = 2 to my.cnf
    Enable slow_query_log and set long_query_time = 2

Eso [!!] InnoDB buffer pool / data size: 128M / 2G Esta línea significa que su grupo de búfer está configurado en 128 MB predeterminados, pero sus datos reales son 2 GB. MySQL lee muchos más datos del disco de los que necesita. ambiente innodb_buffer_pool_size Aproximadamente un 70% de RAM libre y reiniciar MySQL suele ser el mayor aumento de rendimiento que puede obtener en un servidor nuevo.

si ves No se puede conectar al servidor MySQL local Por socket, esto significa que MySQLTuner no puede encontrar su archivo de socket MySQL. Intenta agregar --socket /var/run/mysqld/mysqld.sock al comando.

Si un amigo acaba de configurar su primer servidor MySQL y no sabe por dónde empezar a ajustarlo, [share]Enviar este artículo[/share] a su manera. MySQLTuner por sí solo puede ahorrarles tiempo.

6. mysqlslap

mysqlslap Disponible con MySQL, con mysqladmin. Es una herramienta de evaluación comparativa y pruebas de carga que simula conexiones simultáneas de clientes a un servidor y mide cómo maneja la carga. Puede usarlo para probar el rendimiento antes de los picos de tráfico, en lugar de durante ellos.

Realice una prueba comparativa básica con 50 conexiones simultáneas y 200 consultas en total:

mysqlslap -u root -p --concurrency=50 --iterations=1 --auto-generate-sql --auto-generate-sql-load-type=mixed --number-of-queries=200

producción:

Benchmark
        Average number of seconds to run all queries: 3.847 seconds
        Minimum number of seconds to run all queries: 3.847 seconds
        Maximum number of seconds to run all queries: 3.847 seconds
        Number of clients running queries: 50
        Average number of queries per client: 4

Eso 3.847 seconds 200 consultas de 50 clientes es su punto de referencia. Luego ejecútalo de nuevo increase innodb_buffer_pool_size O agregue un nuevo índice y compare. Si este número cae significativamente, entonces este cambio tendrá un impacto real.

Para probar una base de datos específica con consultas reales:

mysqlslap -u root -p --concurrency=25 --iterations=3 --query="SELECT * FROM mydb.orders WHERE status="pending"" --create-schema=mydb

producción:

Benchmark
        Average number of seconds to run all queries: 1.243 seconds
        Minimum number of seconds to run all queries: 1.198 seconds
        Maximum number of seconds to run all queries: 1.301 seconds
        Number of clients running queries: 25
        Average number of queries per client: 1

Tres iteraciones, que oscilan entre 1,198 y 1,301. Este es un resultado consistente. Ahora agregue un nuevo índice en la columna de estado y ejecútelo nuevamente. Si cae a 0,2 segundos, acaba de demostrar que vale la pena agregar el índice a la producción.

aprendí algo de eso pt-query-digest o Sintonizador MySQL ¿No sabías esto antes? [share]comparte esto con alguien[/share] Administrar un servidor MySQL en el que todavía se especula sobre problemas de rendimiento.

en conclusión

Entre estas 6 herramientas, puede utilizar las siguientes herramientas para el monitoreo de subprocesos en tiempo real mi cima, base de datos Utilice innotop para obtener visibilidad de las transacciones y las herramientas siguientes para comprobar rápidamente el tiempo de actividad administrador_mysqlanálisis de consultas lento resumen de consulta ptsugerencias de ajuste de configuración Sintonizador MySQLy cargar puntos de referencia mysqlslap.

Empezó con mysqladmin versión para verificar su tiempo de actividad base y el recuento de consultas lentas. luego corre pt-query-digest en su registro de consultas lentas. Este solo paso puede indicarle qué consultas realmente están dañando su servidor. usar Sintonizador MySQL Luego verifique si su configuración falla en estas consultas optimizadas.

¿Qué herramientas ya has utilizado y cuál planeas probar primero? Deja un comentario abajo.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba