¿Debería deshabilitarse el registro de consultas de Mysql? ¿Qué son los "registros del servidor" y cómo ver los registros del servidor? ¿Qué es un registro de consultas lento en MySQL?

La creación de perfiles de consultas MySQL es una técnica útil para analizar el rendimiento general de las aplicaciones basadas en bases de datos. Cuando se desarrollan aplicaciones medianas y grandes, normalmente hay cientos de solicitudes repartidas en una base de código grande y la base de datos procesa muchas solicitudes por segundo. Sin un perfil de consulta, resulta muy difícil determinar la ubicación y las causas de la ocurrencia. cuellos de botella aplicaciones. Este tutorial describe algunas técnicas útiles de creación de perfiles de consultas utilizando las herramientas integradas de MySQL.

Registro de consultas lentas de MySQL

El registro de consultas lentas de MySQL (o registro de consultas lentas) es un registro donde MySQL envía consultas lentas y potencialmente problemáticas.

Esta característica viene con MySQL pero está deshabilitada de forma predeterminada. MySQL determina qué consultas deben incluirse en este registro utilizando variables especiales que le permiten perfilar la consulta según los requisitos de rendimiento de la aplicación. Normalmente, las consultas que tardan más en procesarse y las consultas que tienen índices incorrectos se ingresan en este registro.

Variables de perfilado

Las variables básicas del servidor para configurar el registro de consultas lentas de MySQL son:

slow_query_log global
slow_query_log_file global
long_query_time global/sesión
log_queries_not_using_indexes globales
min_examined_row_limit global/sesión

slow_query_log: una variable lógica para habilitar o deshabilitar el registro de consultas lentas.

slow_query_log_file: ruta absoluta del archivo de registro de consultas. El directorio de archivos debe ser propiedad del usuario mysqld y tener los permisos de lectura y escritura adecuados. Lo más probable es que el demonio mysql se inicie como mysql, pero para estar seguro, ejecute el comando en una terminal de Linux:

ps -ef | grepbin/mysqld | cortar -d" " -f1

La salida mostrará el usuario actual y el usuario mysqld.

cd/var/log
mkdir mysql
chmod 755 mysql
chown mysql:mysql mysql

  • long_query_time: tiempo en segundos para verificar la longitud de la consulta. Si el valor es 5, se registrarán todas las solicitudes que tarden más de 5 segundos en procesarse.
  • log_queries_not_using_indexes: un valor booleano que determina si se deben registrar las consultas que no utilizan índices. Al analizar, estas consultas son importantes.
  • min_examined_row_limit: define el número mínimo de filas que se analizarán. Con un valor de 1000, se ignorarán todas las consultas que analicen menos de 1000 filas.

Las variables del servidor MySQL se pueden configurar en el archivo de configuración de MySQL o dinámicamente usando interfaz de usuario o línea de comando MySQL. Si se establecen variables en el archivo de configuración, persistirán cuando se reinicie el servidor, pero se debe reiniciar el servidor para activarlas. El archivo de configuración de MySQL generalmente se encuentra en /etc/my.cnf o /etc/mysql/my.cnf. Para encontrar el archivo de configuración, ingrese (es posible que deba expandir su búsqueda a otros directorios raíz):

buscar /etc -nombre mi.cnf
buscar /usr -nombre mi.cnf

Una vez que haya encontrado el archivo de configuración, agregue las variables requeridas a la sección:


….
registro de consultas lentas = 1
archivo-registro-consulta-lenta = /var/log/mysql/localhost-slow.log
tiempo_consulta_largo = 1
consultas-de-registro-que-no-utilizan-índices

Para que los cambios surtan efecto, debe reiniciar el servidor. Si los cambios deben activarse inmediatamente, configure las variables dinámicamente:

mysql> SET GLOBAL slow_query_log = "ON";
mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log";
mysql> SET GLOBAL log_queries_not_using_indexes = "ON";
mysql>ESTABLECER SESIÓN long_query_time = 1;
mysql> ESTABLECER SESIÓN min_examined_row_limit = 100;

Para comprobar los valores de las variables:

mysql> MOSTRAR VARIABLES GLOBALES COMO "slow_query_log";
mysql> MOSTRAR VARIABLES DE SESIÓN COMO "long_query_time";

Una de las desventajas de cambiar dinámicamente las variables MySQL es que las variables se perderán cuando se reinicie el servidor. Por lo tanto, todas las variables importantes que deban guardarse deben agregarse al archivo.

Generar una consulta de perfiles

Ahora está familiarizado con la configuración del registro de consultas lentas. Intente generar datos de consulta para la elaboración de perfiles.

Nota: El ejemplo proporcionado aquí se ejecutó en una instancia de MySQL en ejecución sin ningún registro de consultas lentas configurado. Estas consultas de prueba se pueden ejecutar a través de GUI o línea de comando MySQL.

Al monitorear el registro de solicitudes lentas, es útil abrir dos ventanas de terminal: una conexión para enviar Declaraciones de MySQL y el segundo es para ver el registro de solicitudes.

Inicie sesión en el servidor MySQL usando la consola como usuario con privilegios de SUPER ADMIN. Para comenzar, cree una base de datos y una tabla de prueba, agrégueles datos ficticios y habilite el registro de consultas lento.

Nota: Idealmente, este ejemplo se ejecuta mejor en un entorno sin otras aplicaciones que utilicen MySQL para evitar saturar el registro de consultas.

$> mysql -u -p
mysql> CREAR BASE DE DATOS perfil_sampling;

mysql> USAr perfil_sampling;


mysql> CREATE TABLE usuarios (id TINYINT PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(255));


mysql> INSERT INTO usuarios (nombre) VALORES ("Walter"),("Skyler"),("Jesse"),("Hank"),("Walter Jr."),("Marie"),("Saul "),("Gustavo"),("Héctor"),("Mike");


mysql>ESTABLECER GLOBAL slow_query_log = 1;


mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log";


mysql> SET GLOBAL log_queries_not_using_indexes = 1;


mysql> SET long_query_time = 10;


mysql> SET min_examined_row_limit = 0;

Ahora tienes una base de datos de prueba y una tabla con algunos datos. El registro de consultas lento está habilitado. Deliberadamente establecimos el tiempo de procesamiento de la solicitud en alto y deshabilitamos la verificación del recuento de filas. Para ver el registro, ingrese:

CD /var/log/mysql
ls-l

Por ahora, no debería haber un registro de solicitudes lentas en la carpeta, ya que este momento no hubo solicitudes. Si dicho registro ya existe, esto significa que la base de datos ya ha encontrado consultas lentas desde que habilitó la compatibilidad con el registro de consultas lentas. Esto puede sesgar los resultados de este ejemplo. Regrese a la pestaña MySQL y ejecute:

mysql> USAr perfil_sampling;
mysql> SELECCIONAR * DE usuarios DONDE id = 1;

La consulta ejecutada simplemente recupera los datos y utiliza el índice de la primera clave de la tabla. Esta consulta fue rápida y utilizó un índice, por lo que no se registra en el registro de consultas lentas. Regrese al directorio y asegúrese de que no se haya creado ningún registro de consultas. Ahora regresa a la ventana de MySQL y ejecuta:

mysql>

Esta consulta no utiliza un índice. Ahora algo como esto debería aparecer en el registro /var/log/mysql/localhost-slow.log:

# Hora: 140322 13:54:58

utilizar perfil_muestreo;
ESTABLECER marca de tiempo = 1395521698;

Un ejemplo más. Aumente el número mínimo de filas para analizar y enviar una solicitud como esta:

mysql> SET min_examined_row_limit = 100;
mysql> SELECCIONAR * DE usuarios DONDE nombre = "Walter";

Los datos no se agregarán al registro porque se analizaron menos de 100 filas durante la solicitud.

Nota: Si los datos no se han agregado al registro, es necesario verificar varios factores. Primero verifique los permisos del directorio en el que se crea el registro. Debe ser propiedad del usuario/grupo mysqld y tener privilegios chmod 755. Luego debe verificar si hay otras configuraciones de consulta lenta en el servidor que anulan su configuración. Restablezca los valores predeterminados para eliminar todas las variables de solicitud lenta del archivo de configuración y reinicie el servidor. También puede establecer dinámicamente variables globales en sus valores predeterminados. Si está realizando cambios dinámicamente, cierre sesión y vuelva a iniciar sesión en MySQL para actualizar la configuración.

Análisis de datos de perfiles de consultas

Considere los siguientes datos:

# Hora: 140322 13:54:58
#Usuario@Host: raíz@localhost
# Tiempo_query: 0.000303 Tiempo_bloqueo: 0.000090 Filas_enviadas: 1 Filas_examinadas: 10
utilizar perfil_muestreo;
ESTABLECER marca de tiempo = 1395521698;
SELECCIONE * DE usuarios DONDE nombre = "Jesse";

Esta entrada muestra:

  • Tiempo de ejecución de la consulta
  • Quien lo envió
  • ¿Cuánto tiempo tomó procesar la solicitud?
  • Longitud
  • ¿Cuántas filas se devolvieron?
  • ¿Cuántas filas se analizaron?

Esto es útil porque cualquier solicitud que viole los requisitos de rendimiento especificados en las variables termina en el registro. Esto permite a un desarrollador o administrador rastrear rápidamente las solicitudes que no funcionan. Además, los datos de creación de perfiles de consulta pueden ayudarle a determinar qué circunstancias están provocando que su aplicación tenga un rendimiento deficiente.

Usando mysqldumpslow

La creación de perfiles se puede incluir en aplicaciones basadas en bases de datos para garantizar un flujo de datos moderado.

A medida que crece el tamaño del registro, resulta difícil analizar todos los datos y las consultas problemáticas pueden perderse fácilmente en ellos. MySQL ofrece una herramienta llamada mysqldumpslow, que ayuda a evitar este problema al dividir el registro de consultas lentas. El binario está vinculado a MySQL (en Linux), por lo que simplemente puedes ejecutar el comando:

mysqldumpslow -t 5 -s en /var/log/mysql/localhost-slow.log

El comando puede aceptar varios parámetros para personalizar su salida. El ejemplo anterior mostrará las 5 consultas principales ordenadas por tiempo promedio de consulta. Estas cadenas son más legibles y también se agrupan por solicitud.

Recuento: 2 Tiempo = 68,34 s (136 s) Bloqueo = 0,00 s (0 s) Filas = 39892974,5 (79785949), root@localhost
SELECCIONE PL.pl_title, P.page_title
DE la página P
Enlaces de página INNER JOIN PL
EN PL.pl_namespace = P.page_namespace
DONDE P.page_namespace = N

El resultado muestra los siguientes datos:

  • Recuento: cuántas veces se registró la solicitud.
  • Tiempo: tiempo promedio y total de la solicitud (entre paréntesis).
  • Bloqueo: tiempo de bloqueo de la mesa.
  • Filas: el número de filas devueltas.

El comando excluye valores numéricos y de cadena, por lo que consultas idénticas con diferentes condiciones WHERE se tratan como iguales. La herramienta mysqldumpslow elimina la necesidad de revisar constantemente el registro de consultas lentas y, en su lugar, le permite realizar consultas periódicas. controles automáticos. Las opciones del comando mysqldumpslow le permiten ejecutar expresiones complejas.

Desglose de la solicitud

Otra herramienta de creación de perfiles a tener en cuenta es la herramienta de desglose de consultas complejas. Le permite identificar consultas problemáticas en el registro de consultas lentas y ejecutarlas en MySQL. Primero debe habilitar la creación de perfiles y luego ejecutar la consulta:

mysql> ESTABLECER perfil de SESIÓN = 1;
mysql> USAr perfil_sampling;
mysql> SELECCIONAR * DE usuarios DONDE nombre = "Jesse";
mysql>MOSTRAR PERFILES;

Una vez habilitada la creación de perfiles, MOSTRAR PERFILES mostrará una tabla que asocia Query_ID con la expresión SQL. Busque el Query_ID correspondiente a la consulta en ejecución y ejecute la siguiente consulta (reemplace # con su Query_ID):

mysql> SELECCIONAR * DE INFORMACIÓN_SCHEMA.PROFILING WHERE QUERY_ID=#;

El comando devolverá una tabla:

SEQ ESTADO DURACIÓN
1 a partir de 0.000046
2 comprobando permisos 0.000005
3 mesas de apertura 0.000036

ESTADO es un paso en el proceso de ejecución de la consulta y DURACIÓN es el tiempo que lleva completar ese paso en segundos. no es muy Herramienta útil, pero puede ayudar a determinar qué parte de la ejecución de la consulta está provocando la mayor latencia.

Nota Nota: Esta herramienta no debe utilizarse en un entorno de producción.

Rendimiento lento del registro de consultas

Todo lo que queda es descubrir cómo el registro de consultas lento afecta el rendimiento. En general, es seguro ejecutar registros de consultas lentos en un entorno de producción; Ni la CPU ni las E/S deberían verse afectadas. Sin embargo, debe tener una estrategia para monitorear el tamaño del registro para garantizar que el registro no sea demasiado grande para el sistema de archivos. Además, cuando ejecute un registro de consultas lento en un entorno de producción, debe establecer long_query_time en 1 o superior.

Conclusión

Un registro de consultas lento puede ayudarle a identificar consultas problemáticas y evaluar el rendimiento general de las consultas. Al mismo tiempo, el desarrollador puede obtener una comprensión detallada de cómo funciona la aplicación. consultas MySQL. La herramienta mysqldumpslow le permite administrar registros de consultas lentas e incorporarlos fácilmente a su proceso de desarrollo. Al identificar consultas problemáticas, puede optimizar el procesamiento de consultas para mejorar el rendimiento.

Etiquetas:

Los registros de eventos son la primera y más sencilla herramienta para determinar el estado del sistema e identificar errores. Hay cuatro registros principales en MySQL:

  • Registro de errores— registro de errores estándar que se recopila mientras el servidor está en ejecución (incluido el inicio y la detención);
  • Registro binario— un registro de todos los comandos de modificación de la base de datos, necesarios para la replicación y las copias de seguridad;
  • Registro de consultas generales— registro de consultas principal;
  • Registro de consultas lento- registro de solicitudes lentas.

Registro de errores

Este registro contiene todos los errores que ocurrieron mientras el servidor estaba en ejecución, incluidos errores críticos, así como apagados, inicios y advertencias del servidor. Aquí es donde debes comenzar en caso de una falla del sistema. De forma predeterminada, todos los errores se envían a la consola (stderr); también puede registrar los errores en syslog (predeterminado en Debian) o en un archivo de registro separado:

Log_error=/var/log/mysql/mysql_error.log

# Los errores se escribirán en mysql_error.log

Recomendamos mantener este registro habilitado para identificar errores rápidamente. Y para entender qué significa tal o cual error, MySQL tiene la utilidad perror:

Shell> perror 13 64 Código de error del sistema operativo 13: Permiso denegado Código de error del sistema operativo 64: La máquina no está en la red

# Explica el significado de los códigos de error.

Registro binario (también conocido como binario)

Todos los comandos de modificación de la base de datos se registran en el registro binario, lo que es útil para la replicación y recuperación.

Se enciende así:

Log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 5 max_binlog_size = 500M

# Indica la ubicación, duración y talla máxima archivo

Tenga en cuenta que si no va a escalar el sistema e implementar la tolerancia a fallas, es mejor no habilitar el registro binario. Consume muchos recursos y reduce el rendimiento del sistema.

Solicitar registro

Este registro contiene todas las consultas SQL recibidas e información sobre las conexiones de los clientes. Puede resultar útil para el análisis y optimización de índices, así como para identificar consultas erróneas:

General_log_file = /var/log/mysql/mysql.log registro_general = 1

# Incluye el registro e indica la ubicación del archivo.

También puedes habilitarlo/deshabilitarlo mientras el servidor MySQL se está ejecutando:

ESTABLECER GLOBAL general_log = "ON"; ESTABLECER GLOBAL general_log = "DESACTIVADO";

# No es necesario reiniciar el servidor para usarlo

Registro de solicitudes lento

El registro es útil para identificar consultas lentas, es decir, ineficientes. Lea más en este artículo.

Ver registros

Para ver los registros en Debian (Ubuntu), debe ejecutar:

# Cola de registro de errores -f /var/log/syslog # Cola de registro de consultas -f /var/log/mysql/mysql.log # Registrar solicitudes lentas cola -f /var/log/mysql/mysql-slow.log

# Si los registros no se especifican por separado, se encuentran en /var/lib/mysql

Rotación de registros

No olvide comprimir (archivar, rotar) los archivos de registro para que ocupen menos espacio en el servidor. Para hacer esto, use la utilidad. logrotate editando el archivo de configuración /etc/logrotate.d/mysql-server:

# - Puse todo en un bloque y agregué scripts compartidos, de modo que mysql obtenga # Flush-logs"d solo una vez. # De lo contrario, los registros binarios aumentarían automáticamente n veces cada día. # - El registro de errores está obsoleto, los mensajes van ahora al syslog./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log(rotación diaria 7 falta ok crear 640 mysql adm comprimir scripts compartidos postrotar prueba -x /usr/bin/mysqladmin || salir 0 # ¡Si esto falla, verifique debian.conf! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" if [ -z "`$MYADMIN ping 2>/dev/null`" ]; entonces # ¿Realmente no hay mysqld o más bien falta un usuario debian-sys-maint? # Si esto ocurre y no es un error, informe un error. #si ps cax | grep -q mysqld; entonces si killall -q -s0 -umysql mysqld; luego salga 1 fi else $MYADMIN flush-logs fi endscript)

# Comprime y archiva los registros necesarios, limpia archivos

Registro DDL

MySQL también mantiene un registro de idioma de datos. Recopila datos de operaciones como DROP_TABLE y ALTER_TABLE. El registro se utiliza para recuperarse de fallas que ocurrieron durante dichas operaciones. DDL Log es un archivo binario y no está diseñado para que lo lea el usuario, por lo que no lo modifique ni lo elimine.

El más importante

Active siempre el registro de errores, utilice el registro de consultas para verificar la conexión de la aplicación a la base de datos, verificar las consultas y el funcionamiento. El registro de consultas lentas es útil para optimizar el rendimiento de MySQL.

Concepto

Registros del servidor (archivos de registro, registro del servidor)- archivos almacenados en el servidor que contienen información del sistema del servidor, así como el registro de todos los datos posibles sobre el visitante del recurso web.

Los administradores del sistema utilizan los registros para analizar a los visitantes., estudiando los patrones de comportamiento de determinados grupos de usuarios, así como obteniendo diversa información sobre ellos, como por ejemplo: el navegador utilizado, dirección IP, datos sobre la ubicación geográfica del cliente y mucho más. Además del análisis, de esta manera podrá conocer el acceso no autorizado al sitio, conocer con mayor precisión quién lo realizó exactamente y transferir datos sobre este caso a las autoridades correspondientes.

Los datos del archivo de registro, en su forma pura, no serán comprensibles para los usuarios comunes, quienes verán en todo esto solo un conjunto de caracteres en un orden incomprensible. Pero para administradores de sistemas y desarrolladores web, este es un texto muy legible y una información bastante útil.


Secuencia de eventos

Cada vez que un cliente accede a un recurso web, se activan varios eventos a la vez, de cuya secuencia hablaremos.

1. Realizar una solicitud de página. Cuando ingresa una dirección en la línea del navegador, o cuando sigue un enlace web activo, por ejemplo, desde la página de resultados de un motor de búsqueda, el navegador busca y se conecta al servidor en el que se encuentra la página y realiza una solicitud. Al mismo tiempo transmite la siguiente información al servidor:
- dirección IP del ordenador cliente que solicita la página (si utiliza un servidor proxy, la dirección IP de su proxy);
- dirección de la página de Internet solicitada por el usuario (dirección IP);
- la hora y fecha exactas en que se realizó la solicitud;
- datos sobre la ubicación real del cliente (si se utiliza un servidor proxy, entonces la dirección del proxy real);
- información sobre el navegador utilizado por el cliente (nombre, versión, etc.);
- datos sobre la página web desde la que el cliente realizó la transferencia.

2. Transferencia de los datos solicitados. Los datos solicitados (página web, archivos, cookies, etc.) se transfieren desde el servidor al ordenador del usuario.

3. Escriba en el registro del servidor. Después de todo, se produce una entrada de registro, que indica todos los datos que aparecieron en los dos últimos eventos. Esta es toda la información enviada en el primer párrafo, así como información sobre los datos transmitidos.

Cómo ver los registros del servidor

Los archivos de registro se almacenan en un archivo. acceso.log no importa qué tipo de servidor web utilice (Apache, Nginx, proxy squid, etc.) Este archivo es Documento de texto, en cada línea de la cual está escrita una apelación. Formatos de grabación en acceso.log bastantes, pero el más popular es el combinado, en el que la entrada tiene la siguiente forma y secuencia:

Código: %h %l %u %t \"%r\" %>s %b \"%(Referer)i\" \"%(User-Agent)i\"
Dónde:

%h- host/dirección IP desde la que se realizó la solicitud;
%t- hora de la solicitud al servidor y zona horaria del servidor;
%r- versión, contenido y tipo de solicitud;
%s- Código de estado HTTP;
%b- el número de bytes enviados por el servidor;
%(Referente)- URL fuente de la solicitud;
%(Agente de usuario)- encabezado HTTP, con información sobre la solicitud (aplicación cliente, idioma, etc.);
%(Anfitrión)- el nombre del Host Virtual al que se accede.

Cuando termine, esta línea se verá así:

127.0.0.1 - - "OBTENER /index.php HTTP/1..0 (compatible; MSIE 7.0; Windows NT 5.1)"

Leer registros manualmente requerirá mucho tiempo y esfuerzo. Por lo tanto, los webmasters experimentados utilizan un software especial llamado "Analizadores de archivos de registro". Analizan todos los datos, lo cual es bastante difícil de leer para los humanos, y producen datos estructurados. Estos son programas como: Analógico, WebAnalizer, Webalizer, Awstats, Webtrends, etc. tipos de especiales software bastantes, entre ellos hay como programas pagos, y gratis. Por eso, estoy seguro de que todos encontrarán algo de su agrado.

Dónde encontrar registros del sitio

Si tiene un alojamiento habitual, lo más probable es que tenga que escribirle a su proveedor de alojamiento y solicitarle registros. Además, muy a menudo, puedes solicitarlos a través del panel de hosting. Cada proveedor de hosting lo hace de forma diferente. Por ejemplo, para solicitar a mi proveedor de alojamiento, simplemente haga clic en pagina de inicio paneles:


Si tienes acceso a carpetas del sistema servidor, entonces puede encontrar los registros en /etc/httpd/logs/access_log en 99 casos de 100.

Registro de errores error.log

Registro de errores- un archivo en el que también se guardan los registros. Pero no visitantes, sino errores que ocurrieron en el servidor. Como es el caso de acceso.log, cada línea del archivo es responsable de un error ocurrido. La grabación se lleva a cabo teniendo en cuenta información como: la fecha y hora exactas en que ocurrió el error, la dirección IP a la que se emitió el error, el tipo de error, así como el motivo de su aparición.

Conclusión

Los registros son una herramienta bastante poderosa e informativa con la que necesitas trabajar. Pero hoy en día están siendo sustituidos por herramientas como Yandex.Metrica, Google Analytics, etc., haciéndonos la vida más fácil. Sin embargo, si planeas desarrollarte, crecer y aprender algo nuevo, sin duda te recomiendo que conozcas mejor este tema.

Consultas de perfilado en Mysql Se utiliza para evaluar el rendimiento de su aplicación. Al desarrollar aplicaciones medianas y grandes, debe lidiar con cientos de solicitudes distribuidas en todo su código que se ejecutan cada segundo. Sin técnicas de creación de perfiles de consulta, puede resultar muy difícil descubrir qué está provocando que el rendimiento de su aplicación se vea afectado.

¿Qué es el registro de consultas lento en MySQL?

Registro de consultas lentas de MySQL: un registro que señala consultas lentas y potencialmente problemáticas. MySQL admite esta funcionalidad de forma predeterminada, pero está deshabilitada. Al configurar ciertas variables del servidor, podemos especificar qué solicitudes nos interesan. La mayoría de las veces, necesitamos consultas que requieren una cierta cantidad de tiempo para completarse o consultas que no procesan los índices correctamente.

Configuración de variables de perfil

Variables principales para configurar el registro de consultas:

Slow_query_log G slow_query_log_file G long_query_time G / S log_queries_not_using_indexes G min_examined_row_limit G / S

Comentario: G - variables globales, S - variables del sistema

  • slow_query_log - valor booleano incluido el registro
  • slow_query_log_file: ruta absoluta al archivo de registro. El propietario del directorio debe ser un usuario. mysqld y el directorio debe tener los permisos de lectura y escritura correctos. La mayoría de las veces, el demonio mysql se ejecuta como usuario. MySQL.

Para comprobarlo, ejecute los siguientes comandos:

Ps-ef | grepbin/mysqld | cortar -d" " -f1

La salida del comando le dará el nombre del usuario actual y el usuario mysqld. Ejemplo de configuración del directorio /var/log/mysql:

Cd /var/log sudo mkdir mysql sudo chmod 755 mysql sudo chown mysql:mysql mysql

  • long_query_time: tiempo en segundos para verificar la duración de la consulta. Por ejemplo, con un valor de 5, se registrará cada solicitud que dure más de 5 segundos.
  • log_queries_not_using_indexes: valor booleano, permite guardar consultas que no utilizan índices. Estas consultas son muy importantes en el análisis.
  • min_examined_row_limit: especifica el valor mínimo para el número de filas de datos que se analizarán. Un valor de 1000 ignorará las consultas que devuelvan menos de 1000 filas de valores.

Estas variables se pueden configurar en el archivo de configuración de MySQL, dinámicamente a través de la GUI de MySQL o la línea de comando de MySQL. Si las variables se especifican en el archivo de configuración, el servidor las instalará la próxima vez que se inicie. Normalmente, este archivo se encuentra en /etc, /usr, /etc/my.cnf o /etc/mysql/my.cnf. Aquí están los comandos para buscar el archivo de configuración (a veces debes expandir la búsqueda a otros directorios raíz):

Buscar /etc -nombre mi.cnf buscar /usr -nombre mi.cnf

Cuando encuentre el archivo, agregue las variables requeridas en la sección:

; ... registro de consultas lentas = 1 archivo de registro de consultas lentas = /var/log/mysql/localhost-slow.log long_query_time = 1 consultas de registro que no utilizan índices; no se necesita significado aquí

Los cambios tendrán efecto sólo la próxima vez que inicie MySQL. Si necesita cambiar los parámetros dinámicamente, utilice otros métodos para configurar las variables:

Mysql> SET GLOBAL slow_query_log = "ON"; mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> SET GLOBAL log_queries_not_using_indexes = "ON"; mysql>ESTABLECER SESIÓN long_query_time = 1; mysql> ESTABLECER SESIÓN min_examined_row_limit = 100;

Puede comprobar los valores de las variables de la siguiente manera:

Mysql> MOSTRAR VARIABLES GLOBALES COMO "slow_query_log"; mysql> MOSTRAR VARIABLES DE SESIÓN COMO "long_query_time";

La principal desventaja de una instalación dinámica es que los valores se perderán cuando se inicie el sistema. Se recomienda especificar parámetros importantes en la configuración de MySQL.

La nota: Sintaxis para configurar parámetros dinámicamente mediante comando ESTABLECER y el uso del archivo de configuración es ligeramente diferente, por ejemplo slow_query_log / slow-query-log. Encontrará una descripción completa de la sintaxis en la documentación oficial del DBMS. El formato Option-File se utiliza para el archivo de configuración, Nombre de variable del sistema: nombres de variables al configurar valores dinámicamente.

Generación de datos para la creación de perfiles de consultas

Hemos repasado los puntos principales para configurar la creación de perfiles, ahora crearemos las consultas que nos interesen. Este ejemplo se utilizó en una carrera servidor mysql sin ninguna configuración de registro preliminar. Se pueden iniciar consultas de muestra tanto a través de la GUI de MySQL como a través de las herramientas de comando DBMS. Al monitorear el registro de consultas lentas, es común abrir dos ventanas con una conexión: una para ejecutar consultas y la otra para ver el registro.

$> mysql -u -p mysql> CREAR BASE DE DATOS perfil_sampling; mysql> USAr perfil_sampling; mysql> CREATE TABLE usuarios (id TINYINT PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(255)); mysql> INSERT INTO usuarios (nombre) VALORES ("Walter"),("Skyler"),("Jesse"),("Hank"),("Walter Jr."),("Marie"),("Saul "),("Gustavo"),("Héctor"),("Mike"); mysql>ESTABLECER GLOBAL slow_query_log = 1; mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> SET GLOBAL log_queries_not_using_indexes = 1; mysql> SET long_query_time = 10; mysql> SET min_examined_row_limit = 0;

Ahora tenemos una base de datos con datos de prueba. Lanzamos la creación de perfiles, pero deliberadamente establecimos que el tiempo de respuesta y el número de líneas fueran pequeños. Para ver el registro use el comando:

CD /var/log/mysql ls -l

En teoría, el archivo de registro no debería existir todavía, ya que no hemos realizado consultas a la base de datos. Si existe, significa que la creación de perfiles se configuró anteriormente y esto puede distorsionar los resultados del ejemplo. Ejecutar en la consola:

Mysql> USAr perfil_sampling; mysql> SELECCIONAR * DE usuarios DONDE id = 1;

Nuestra consulta utiliza el índice de clave principal de la tabla. La solicitud se procesó muy rápidamente utilizando el índice, por lo que no debería reflejarse en el registro. Tenga en cuenta que el archivo de registro no debería haberse creado.

Ahora haz lo siguiente:

Mysql> SELECCIONAR * DE usuarios DONDE nombre = "Jesse";

Aquí no utilizamos índices. Ahora deberíamos ver esta solicitud en el registro:

Sudo cat /var/log/mysql/localhost-slow.log # Hora: 140322 13:54:58 # Usuario@Host: root @ localhost # Tiempo_query: 0.000303 Tiempo_bloqueo: 0.000090 Filas_enviadas: 1 Filas_examinadas: 10 use perfil_sampling; ESTABLECER marca de tiempo = 1395521698; SELECCIONE * DE usuarios DONDE nombre = "Jesse";

Veamos otro ejemplo. Eleve el listón en el número de líneas en la respuesta y ejecute la siguiente consulta:

Mysql> SET min_examined_row_limit = 100; mysql> SELECCIONAR * DE usuarios DONDE nombre = "Walter";

La solicitud no se reflejará en el registro, ya que no superamos las 100 líneas en la respuesta a la solicitud.

La nota: Si los datos no se muestran en el registro, primero debe considerar los siguientes factores. El primero son los derechos sobre el directorio donde se almacena el archivo de registro. El grupo y el usuario deben corresponder al usuario mysqld, los derechos deben ser chmod 755. En segundo lugar, es posible que la creación de perfiles se haya configurado anteriormente. Elimine cualquier valor de variable de perfil existente del archivo de configuración y reinicie el servidor o configure las variables dinámicamente. Si utilizó el método dinámico, saldrá y volverá a iniciar sesión en la consola MySQL.

Análisis de datos de perfiles de consultas.

Considere el ejemplo anterior:

# Hora: 140322 13:54:58 # Usuario@Host: root @ localhost # Tiempo_query: 0.000303 Tiempo_bloqueo: 0.000090 Filas_enviadas: 1 Filas_examinadas: 10 use perfil_sampling; ESTABLECER marca de tiempo = 1395521698; SELECCIONE * DE usuarios DONDE nombre = "Jesse";

Aquí vemos:

  • Hora en que se inició la solicitud
  • El usuario que realizó la solicitud.
  • Solicitudes de horarios de apertura
  • Duración del bloqueo
  • Número de filas seleccionadas
  • Número de líneas analizadas

Estos datos son muy útiles, ya que con su ayuda podemos encontrar y eliminar la causa de la ralentización del sistema. Además, un desarrollador o administrador de MySQL siempre podrá ver consultas problemáticas y me gustaría señalar que encontrarlas aquí es mucho más rápido que estudiando el código de la aplicación. Con la creación de perfiles a largo plazo, puede monitorear las condiciones de operación a baja velocidad.

Usando mysqldumpslow

El registro registra datos constantemente; por regla general, escribe muchos más de los que se leen. En talla grande log, leerlo se vuelve problemático. MySQL incluye una herramienta llamada mysqldumpslow que ayuda a mantener la integridad del registro. El programa en sí se combina con MySQL (en sistemas linux). Para usarlo sigue el comando necesario y pásele la ruta al archivo de registro:

Sudo mysqldumpslow -t 5 -s en /var/log/mysql/localhost-slow.log

Hay una serie de parámetros que le ayudan a personalizar la salida del comando. En el siguiente ejemplo veremos las últimas cinco solicitudes ordenadas por duración promedio. Como resultado, leer el registro resulta mucho más cómodo. (salida modificada para mostrar los valores de registro reales):

Recuento: 2 Tiempo = 68,34 s (136 s) Bloqueo = 0,00 s (0 s) Filas = 39892974,5 (79785949), root@localhost SELECCIONE PL.pl_title, P.page_title DESDE la página P INNER JOIN enlaces de página PL ON PL.pl_namespace = P.page_namespace DONDE P.page_namespace = N ...

Lo que vemos:

  • Recuento: número de apariciones de la solicitud en el registro.
  • Tiempo: tiempo promedio y total de solicitud
  • Bloqueo: tiempo de bloqueo de la mesa
  • Filas: número de filas seleccionadas

El comando excluye datos de consulta numéricos y de cadenas, lo que significa que las consultas con la misma cláusula WHERE se considerarán iguales. Gracias a esta herramienta, no es necesario revisar constantemente el registro. Debido a la gran cantidad de parámetros de comando, puede ordenar la salida como desee. También existen desarrollos de terceros con funcionalidad similar, por ejemplo pt-query-digest.

Desglose de la solicitud

Debes prestar atención a otra herramienta que te permite desglosar consultas complejas. La mayoría de las veces hay que tomar una consulta del registro y luego ejecutarla directamente en la consola MySQL. Primero debe habilitar la creación de perfiles y luego ejecutar la consulta:

Mysql> ESTABLECER perfil de SESIÓN = 1; mysql> USAr perfil_sampling; mysql> SELECCIONAR * DE usuarios DONDE nombre = "Jesse"; mysql>MOSTRAR PERFILES;

Después de habilitar la creación de perfiles, MOSTRAR PERFILES mostrará una tabla que vincula Query_ID y la expresión SQL. Busque el Query_ID correspondiente y ejecute la siguiente consulta (reemplace # con su Query_ID):

Mysql> SELECCIONAR * DE INFORMACIÓN_SCHEMA.PROFILING WHERE QUERY_ID=#;

Salida de ejemplo:

DURACIÓN DEL ESTADO SEQ 1 inicio 0.000046 2 verificación de permisos 0.000005 3 apertura de tablas 0.000036

ESTADO- un paso en el proceso de ejecución de una solicitud, DURACIÓN- duración del paso en segundos. Esta herramienta no se utiliza con mucha frecuencia, pero a veces puede resultar extremadamente útil para determinar la causa del rendimiento lento de las consultas.

Descripción detallada de las columnas:

Descripción detallada de los pasos:

La nota: Esta herramienta no debe usarse en modo de producción del servidor, excepto para analizar consultas específicas.

Rendimiento lento del registro de consultas

La última pregunta es cómo afecta la creación de perfiles al rendimiento del servidor en su conjunto. En el modo de producción del servidor, puede utilizar dicho registro de forma bastante segura; no debería afectar ni a la CPU ni a la E/S. Sin embargo, vale la pena prestar atención al tamaño del archivo de registro: no debe ser prohibitivamente grande; También me gustaría señalar por experiencia que establecer el valor de la variable long_query_time en 1 segundo o más.

Importante: No debe utilizar la herramienta de creación de perfiles (SET profiling = 1) para registrar todas las solicitudes, es decir, No se recomienda utilizar la variable general_log en modo producto y bajo cargas pesadas.

Conclusión

La creación de perfiles de consultas puede ayudarle mucho a aislar la consulta problemática y evaluar el rendimiento general. El desarrollador también puede estudiar cómo funcionan las consultas MySQL de su aplicación. La herramienta mysqldumpslow le ayuda a ver y procesar registros de consultas. Después de identificar consultas problemáticas, todo lo que queda es ajustarlas para obtener el máximo rendimiento.




Arriba