MySql

Mytop es una herramienta de línea de comandos de código abierto utilizada para monitorear el rendimiento de MySQL. Se inspiró en la herramienta de monitoreo del sistema Linux llamada top y es similar en apariencia. Mytop se conecta a un servidor MySQL y ejecuta periódicamente la lista de procesos show y los comandos de estado global. Luego resume la información en un formato útil. Usando mytop, podemos monitorear (en tiempo real) subprocesos, consultas y tiempo de actividad de MySQL, así como ver qué usuario está ejecutando consultas en qué base de datos, cuáles son las consultas lentas y más. Toda esta información se puede utilizar para optimizar el rendimiento del servidor MySQL.

En este tutorial, discutiremos cómo instalar, configurar y usar mytop.

Prerrequisitos
Antes de comenzar con este tutorial, debe tener lo siguiente:

CentOS 7 de 64 bits (también funciona con CentOS 6)
Usuario no root con privilegios de sudo. Para configurar un usuario de este tipo, siga el tutorial Configuración inicial del servidor con CentOS 7. Todos los comandos se ejecutarán como este usuario.
Tener MySQL instalado en el servidor

Paso 1 – Instalar Mytop

Permítanos instalar los paquetes necesarios para mytop.

Primero, necesitamos instalar el repositorio yum EPEL (Paquetes adicionales para Enterprise Linux) en el servidor. EPEL es un grupo de interés especial de Fedora que crea, mantiene y gestiona un conjunto de paquetes de software complementario de código abierto de alta calidad para Enterprise Linux. Ejecute el siguiente comando para instalar y habilitar el repositorio EPEL en su servidor:

En CentOS 7:

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

On CentOS 6:

sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Antes de continuar, verifique que el repositorio EPEL esté habilitado usando:

sudo yum repolist

Si está habilitado, verá el siguiente repositorio enumerado en la salida:

epel/x86_64                Extra Packages for Enterprise Linux 7 - x86_64

A continuación, protejamos los paquetes base de EPEL utilizando el complemento yum protectbase.

sudo yum install yum-plugin-protectbase.noarch -y

El propósito del complemento protectbase es proteger ciertos repositorios yum de las actualizaciones de otros repositorios. Los paquetes en los repositorios protegidos no serán actualizados ni reemplazados por paquetes en repositorios no protegidos, incluso si el repositorio no protegido tiene una versión posterior.

Ahora estamos listos para instalar el paquete mytop. Ejecute el siguiente comando para instalarlo:

sudo yum install mytop -y

Paso 2 – Configurando Mytop

Antes de usar mytop, cree un archivo de configuración personalizado para mytop llamado .mytop. Ejecute el comando:

sudo nano /root/.mytop

agregue el siguiente contenido en el archivo, guarde y salga

ruta: /root/.mytop.

host=localhost
db=mysql
delay=5
port=3306
socket=
batchmode=0
color=1
idle=1

Este archivo de configuración se usará cuando ejecute mytop directamente como root y cuando lo ejecute con el comando sudo frente a él como un usuario sudo no root.

Puede realizar cambios en este archivo de configuración según sus necesidades. Por ejemplo, la opción de retraso especifica la cantidad de tiempo en segundos entre actualizaciones de pantalla. Si desea actualizar la pantalla mytop cada 3 segundos, puede editar el archivo /root/.mytop usando

sudo nano /root/.mytop

y cambia lo siguiente:

delay=3

El parámetro inactivo especifica si permitir que aparezcan hilos inactivos (inactivos) en la lista en la pantalla de visualización de mytop. El valor predeterminado es mostrar hilos inactivos. Si se omiten los subprocesos inactivos, el orden de clasificación predeterminado se invierte para que las consultas de mayor duración aparezcan en la parte superior de la lista. Si desea hacer esto, edite el archivo /root/.mytop y cambie lo siguiente:

idle=0

Puede consultar las páginas del manual de mytop para obtener información sobre todos los parámetros en el archivo de configuración; contiene una descripción de cada parámetro. Para acceder a la página del manual, use el comando:

man mytop

Puede escribir q para salir del manual.

Paso 3 – Conectando a Mytop

En esta sección, discutiremos cómo conectarse a mytop y usarlo para ver consultas MySQL.

Mytop requiere credenciales para acceder a la base de datos, que se puede proporcionar a través de un indicador, en la línea de comando o almacenado en el archivo de configuración. Para mayor seguridad, usaremos la opción –prompt para mytop, que siempre solicita la contraseña.
Vamos a conectarnos a mytop usando:

sudo mytop --prompt

ingrese la contraseña de root de MySQL en el indicador. También puede usar varios argumentos de línea de comando con el comando mytop. Consulte la página del manual para ver la lista completa. Por ejemplo, si desea utilizar un usuario mysql diferente como sammy para conectarse a mytop, ejecute el comando:

sudo mytop -u sammy --prompt

Para conectar y monitorear solo una base de datos específica, puede usar el comando:

sudo mytop -d databasename --prompt

Para salir de mytop y volver al indicador de shell, escriba q.

Paso 4: ver e interpretar la pantalla Mytop

En esta sección, veremos cómo interpretar mytop display y las diferentes características que ofrece la herramienta.

Una vez que nos conectamos a mytop usando mytop –prompt, se nos llevará a la vista de subprocesos. Mostrará algo similar a:

Output of mytop
MySQL on localhost (5.5.41-MariaDB)                    up 0+00:05:52 [01:33:15]
 Queries: 148  qps:    0 Slow:     0.0         Se/In/Up/De(%):    09/00/00/00 
             qps now:    2 Slow qps: 0.0  Threads:    6 (   5/   0) 67/00/00/00 
 Key Efficiency: 2.0%  Bps in/out:  14.7/320.7k   Now in/out: 192.5/731.8k

      Id      User         Host/IP         DB      Time    Cmd Query or State
       --      ----         -------         --      ----    --- ----------
        2      root       localhost      mysql         0  Query show full processlist                          
       16      root       localhost                    0  Sleep
       17      root       localhost     testdb         0  Query SELECT * FROM dept_emp
       18      root       localhost     testdb         0  Query SELECT * FROM dept_emp
       19      root       localhost     testdb         0  Query SELECT * FROM dept_emp
       20      root       localhost     testdb         0  Query SELECT * FROM dept_emp

Puede volver a esta vista si está en otra vista escribiendo t.

La pantalla de visualización anterior se divide en dos partes. Las cuatro líneas superiores comprenden el encabezado que se puede activar o desactivar presionando SHIFT-H. El encabezado contiene información resumida sobre su servidor MySQL.

La primera línea identifica el nombre de host del servidor y la versión de MySQL que está ejecutando. El lado derecho muestra el tiempo de actividad del proceso del servidor MySQL en días + horas: minutos: formato de segundos, así como la hora actual.

La segunda línea muestra el número total de consultas que el servidor ha procesado (148 en nuestro caso), el número promedio de consultas por segundo, el número de consultas lentas y el porcentaje de consultas Seleccionar, Insertar, Actualizar y Eliminar.

La tercera línea muestra valores en tiempo real desde la última actualización de mytop. El tiempo normal de actualización (retraso) para mytop es de 5 segundos, por lo que si se ejecutaron 100 consultas en los últimos 5 segundos desde la actualización, entonces el número de qps ahora sería 20.

El primer campo es el número de consultas por segundo (qps ahora : 2).
El segundo valor es el número de consultas lentas por segundo.
El segmento Subprocesos: 6 (5/0) indica que hay un total de 6 subprocesos conectados, 5 están activos (uno está inactivo) y hay 0 subprocesos en la caché de subprocesos.
El último campo en la tercera línea muestra los porcentajes de consulta, como en la línea anterior, pero desde la última actualización de mytop.

La cuarta línea muestra la eficiencia del búfer de claves (con qué frecuencia se leen las claves del búfer en lugar del disco) y la cantidad de bytes que MySQL ha enviado y recibido, tanto en general como en el último ciclo de mytop.
Eficiencia clave: 2.0% muestra que 2% de las claves se leen desde el búfer, no desde el disco. Bps in / out: 14.7 / 320.7k muestra que desde el inicio, MySQL ha promediado 14.7kbps de tráfico entrante y 320.7kbps para tráfico saliente.
Ahora in / out muestra el tráfico nuevamente, pero desde la última actualización de mytop.

La segunda parte de la pantalla enumera los hilos actuales de MySQL, ordenados según su tiempo de inactividad (menos inactivo primero). Puede revertir el orden de clasificación presionando O si es necesario. El id del subproceso, el nombre de usuario, el host desde el que se conecta el usuario, la base de datos a la que está conectado el usuario, el número de segundos de inactividad, el comando que el subproceso está ejecutando (o el estado del subproceso) y la primera parte de la consulta toda la información se muestra aquí. Si el subproceso está en un estado de consulta (es decir, Cmd muestra consulta), la siguiente columna consulta o estado mostrará la primera parte de la consulta que se está ejecutando. Si el estado del comando es Suspender o Inactivo, la columna Consulta o Estado generalmente estará en blanco. En nuestro ejemplo de salida anterior, el hilo con id 2 en realidad está ejecutando mytop la consulta show processlist para recopilar información. El hilo con el ID 16 está inactivo (no procesa una consulta, pero aún está conectado). El hilo con id 17 está ejecutando una consulta SELECT en la base de datos testdb.

Ahora que hemos entendido la pantalla básica de mytop, veremos cómo usarla para recopilar más información sobre los hilos y consultas de MySQL. Echemos un vistazo a la siguiente pantalla de mytop:

[secondary_output Output of mytop]
MySQL on localhost (5.5.41-MariaDB)                    up 0+00:13:10 [23:54:45]
 Queries: 2.8k   qps:    4 Slow:    51.0         Se/In/Up/De(%):    45/00/00/00 
             qps now:   17 Slow qps: 0.0  Threads:   52 (  51/   0) 96/00/00/00 
 Key Efficiency: 100.0%  Bps in/out: 215.4/ 7.6M   Now in/out:  2.0k/16.2M

      Id      User         Host/IP         DB      Time    Cmd Query or State
       --      ----         -------         --      ----    --- ----------
       34      root       localhost     testdb         0  Query show full processlist
     1241      root       localhost                    1  Sleep
     1242      root       localhost     testdb         1  Query SELECT * FROM dept_emp
     1243      root       localhost     testdb         1  Query SELECT * FROM dept_emp
     1244      root       localhost     testdb         1  Query SELECT * FROM dept_emp
     1245      root       localhost     testdb         1  Query SELECT * FROM dept_emp
     1246      root       localhost     testdb         1  Query SELECT * FROM dept_emp
     1247      root       localhost     testdb         1  Query SELECT * FROM dept_emp

En la vista de subprocesos mytop (vista predeterminada) que se muestra arriba, las consultas se truncan. Para ver la consulta completa, puede presionar F y le preguntará:

Consulta completa para qué id de subproceso:

Full query for which thread id:

Ingrese la identificación del hilo para la consulta que desea ver. Por ejemplo, ingrese 1244. Luego mostrará lo siguiente:

Thread 1244 was executing following query:

SELECT * FROM dept_emp WHERE ...

-- paused. press any key to resume or (e) to explain --

Podemos escribir e para explicar la consulta. Esto explicará la consulta que se está ejecutando para que podamos determinar si la consulta está optimizada. EXPLAIN es una de las herramientas más poderosas para comprender y optimizar consultas MySQL problemáticas. Por ejemplo:

EXPLAIN SELECT * FROM dept_emp:

*** row 1 ***
          table:  dept_emp
           type:  ALL
  possible_keys:  NULL
            key:  NULL
        key_len:  NULL
            ref:  NULL
           rows:  332289
          Extra:  NULL
-- paused. press any key to resume --

Puede presionar cualquier tecla para salir de este modo o escribir t para volver a la vista de hilo predeterminada.

Otra vista útil disponible en mytop es la vista de comandos. Para acceder a la vista de comandos, escriba c. Se verá similar a lo siguiente:

  Command      Total  Pct  |  Last  Pct
           -------      -----  ---  |  ----  ---
            select       1782  55%  |   100   8%
       show status        723  22%  |   533  45%
  show processlist        708  22%  |   532  45%
         change db          2   0%  |     0   0%
    show variables          1   0%  |     0   0%
       Compression          0   0%  |     0   0%

La columna Comando muestra el tipo de comando o consulta que se está ejecutando. La columna Total representa el número total de ese tipo de comando ejecutado desde que se inició el servidor, y la columna Pct muestra lo mismo en porcentaje. En el otro lado de la línea vertical tenemos la última columna que nos dice el número de ese tipo de comando ejecutado desde la última actualización de mytop. Esta información nos da una idea de lo que está haciendo el servidor MySQL a corto y largo plazo.

Hemos discutido algunas de las características importantes y útiles de mytop en este tutorial. Hay muchos otros disponibles. Para ver una lista completa de opciones, puede presionar? tecla mientras mytop se está ejecutando.

Conclusión

Ahora debe tener una buena comprensión de cómo usar mytop para monitorear su servidor MySQL. También es un punto de partida para encontrar consultas SQL problemáticas y optimizarlas, aumentando así el rendimiento general del servidor. Puede obtener más información sobre cómo optimizar las consultas y tablas de MySQL en su servidor en este tutorial.