Site is under maintenance mode. Please wait few min!
Saltar al contenido

Cómo instalar Linux, Apache, MySQL, PHP (LAMP) en Debian

marzo 4, 2020

 

Introducción

MySQL consulta de perfiles es una técnica útil cuando se trata de analizar el rendimiento global de una aplicación de bases de datos. Al desarrollar una aplicación a mediados de gran tamaño, tiende a haber cientos de consultas distribuidas a lo largo de una gran base de código y potencialmente numerosas consultas iba en contra de la base de datos por segundo. Sin algún tipo de técnicas de consulta de perfiles, se hace muy difícil determinar las ubicaciones y las causas de los cuellos de botella y las aplicaciones de desaceleración. Este artículo demostrará algunas de consulta de perfiles utilizando técnicas útiles herramientas que se construyen en el servidor MySQL.

¿Cuál es el registro de consultas lentas de MySQL?

Configuración de las variables de perfiles

Las variables del servidor primario para configurar el registro de MySQL consultas lentas son:

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

NOTA: (G) variable global (S) variable de sesión

slow_query_log – booleanas para convertir el registro de consultas lentas de encendido y apagado.

slow_query_log_file – La ruta absoluta para el archivo de registro de consultas. El directorio del archivo debe ser propiedad del usuario mysqld y tener los permisos correctos para ser leídos y escritos. El demonio de MySQL es probable que se ejecuta como `mysql` sino verificar ejecute lo siguiente en el terminal de Linux:

ps -ef | grep bin/mysqld | cut -d' ' -f1

La salida es probable que mostrar al usuario actual, así como el usuario mysqld. Un ejemplo de configuración de la ruta del directorio / var / log / mysql:

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

long_query_time – El tiempo, en segundos, para el control de longitud de la consulta. Para un valor de 5, cualquier consulta tarda más de 5 segundos para ejecutar se registra.

log_queries_not_using_indexes – valor booleano si se registran consultas que no están golpeando índices. Al hacer el análisis de la consulta, es importante registrar consultas que no están golpeando índices.

min_examined_row_limit – Establece un límite inferior de la cantidad de filas deben ser examinados. Un valor de 1000 ignoraría cualquier consulta que analiza menos de 1000 filas. las variables del servidor

El MySQL se pueden establecer en el archivo conf MySQL o dinámicamente a través de una línea de comandos de MySQL GUI o MySQL. Si las variables se establecen en el archivo de configuración, que se conservará cuando se reinicia el servidor, pero también requieren un reinicio del servidor que se active. El archivo de MySQL conf normalmente se encuentra en `/ etc o / usr`, normalmente` / etc / my.cnf` o `/ etc / mysql / my.cnf`. Para encontrar el archivo de configuración (puede tener que buscar ampliar a más directorios raíz):

find /etc -name my.cnf
find /usr -name my.cnf

Una vez que se ha encontrado el archivo de configuración, sólo tiene que añadir los valores deseados en el marco del [mysqld] epígrafe:

[mysqld]
….
slow-query-log = 1
slow-query-log-file = /var/log/mysql/localhost-slow.log
long_query_time = 1
log-queries-not-using-indexes

Una vez más, los cambios no tomará afecta hasta después de reiniciar el servidor, por lo que si son necesarios los cambios inmediatamente a continuación, establezca las variables de forma dinámica:

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> SET SESSION long_query_time = 1;
mysql> SET SESSION min_examined_row_limit = 100;

para comprobar los valores de las variables:

mysql> SHOW GLOBAL VARIABLES LIKE 'slow_query_log';
mysql> SHOW SESSION VARIABLES LIKE 'long_query_time';

un inconveniente de establecer variables de MySQL de forma dinámica es que las variables se perderán al reiniciar el servidor. Es aconsejable añadir las variables importantes que necesita ser mantenido en el fichero conf MySQL.

NOTA : La sintaxis para establecer las variables de forma dinámica a través de la SET y colocarlos en el archivo de configuración son ligeramente diferentes, por ejemplo, « Slow_query_log` vs-query-log` lento. página dinámica variables del sistema vista de MySQL para las diferentes sintaxis. El formato de archivo Opción es el formato para el archivo de configuración y la variable del sistema Nombre es el nombre de la variable de ajuste de las variables de forma dinámica.

Generación de datos de perfiles de consulta

Ahora que las configuraciones de registro de consultas lentas de MySQL se han esbozado, es el momento de generar algunos datos de la consulta para perfilar. Este ejemplo fue escrito en una instancia de MySQL funcionando sin configuraciones de registro lentos anteriores establecidos. consultas del ejemplo se pueden ejecutar a través de una interfaz gráfica de usuario MySQL o MySQL a través del comando del sistema. Al supervisar el registro de consultas lentas, es útil tener dos ventanas abiertas de conexión al servidor: una conexión para escribir las declaraciones MySQL y una conexión para ver el registro de consultas.

En la pestaña de la consola de MySQL, inicie una sesión en el servidor MySQL con un usuario que tiene privilegios de superadministrador. Para empezar, cree una base de datos de prueba y mesa, añadir algunos datos ficticios, y activar el registro de consultas lentas. Este ejemplo se debe ejecutar en un entorno de desarrollo, a ser posible con ninguna otra aplicación que utilizan MySQL para ayudar a evitar que saturan el registro de consultas, ya que está siendo monitoreado:

$> mysql -u -p

mysql> CREATE DATABASE profile_sampling;
mysql> USE profile_sampling;
mysql> CREATE TABLE users ( id TINYINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) );
mysql> INSERT INTO users (name) VALUES ('Walter'),('Skyler'),('Jesse'),('Hank'),('Walter Jr.'),('Marie'),('Saul'),('Gustavo'),('Hector'),('Mike');

mysql> SET 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;

En la actualidad existe una base de datos de prueba y una mesa con una pequeña cantidad de datos de prueba. El registro de consultas lentas estaba encendida, pero el tiempo de consulta se estableció alta intencional y la fila mínimo examinados bandera mantuvo fuera. En la pestaña consola para visualizar el registro de:

cd /var/log/mysql
ls -l

no debería haber ningún registro de consultas lentas en la carpeta sin embargo, como no hay consultas se han ejecutado. Si la hay, eso significa que el registro de consultas lentas se ha activado y configurado en el pasado, lo que puede sesgar algunos de los resultados de este ejemplo. De vuelta en la pestaña de MySQL, ejecute el siguiente código SQL:

mysql> USE profile_sampling;
mysql> SELECT * FROM users WHERE id = 1;

La consulta ejecutada era un simple seleccionar utilizando el índice de clave principal de la tabla. Esta consulta fue rápido y utiliza un índice, por lo que no habrá entradas en el registro de consultas lentas para esta consulta. Mirar hacia atrás en el directorio de registro de consultas y verificar que no hay registro fue creado. Ahora, de vuelta en la ventana de ejecución de MySQL:

mysql> SELECT * FROM users WHERE name = 'Jesse';

Esta consulta se llevó a cabo en una columna no indexada – nombre. En este punto habrá una consulta en el registro con la siguiente información (no puede ser exactamente el mismo):

/var/log/mysql/localhost-slow.log

# Time: 140322 13:54:58
# User@Host: root[root] @ localhost []
# Query_time: 0.000303 Lock_time: 0.000090 Rows_sent: 1 Rows_examined: 10
use profile_sampling;
SET timestamp=1395521698;
SELECT * FROM users WHERE name = 'Jesse';

La consulta se ha iniciado la sesión correctamente. Un ejemplo más. Elevar el límite de filas mínimo examinado y ejecutar una consulta similar:

mysql> SET min_examined_row_limit = 100;
mysql> SELECT * FROM users WHERE name = 'Walter';

no los datos se añadirán en el registro debido a que el mínimo de 100 filas no fue analizado.

información del perfil de consulta Analizar

Mirando a los datos del perfil de consulta del ejemplo anterior:

# Time: 140322 13:54:58
# User@Host: root[root] @ localhost []
# Query_time: 0.000303 Lock_time: 0.000090 Rows_sent: 1 Rows_examined: 10
use profile_sampling;
SET timestamp=1395521698;
SELECT * FROM users WHERE name = 'Jesse';

Las pantallas de entrada:

  • Momento en que la consulta fue atropellado
  • que lo dirige
  • Cuánto tiempo tomó la consulta
  • Longitud de la cerradura
  • el número de filas devueltas en
  • ¿Cuántas filas en las que examinó

Esto es útil porque cualquier consulta que viola los requisitos de rendimiento especificados con las variables de servidor va a terminar en el registro. Esto permite que un desarrollador o administrador, tener alerta MySQL cuando una consulta no está funcionando tan bien como debería [oposición a la lectura a través del código fuente y tratando de encontrar las preguntas mal escritos]. Además, la consulta de datos de perfiles puede ser útil cuando se perfiló durante un período de tiempo, que puede ayudar a determinar qué circunstancias están contribuyendo a la pobre rendimiento de las aplicaciones.

Usando mysqldumpslow

En un ejemplo más realista, el perfil se habilita en una aplicación de base de datos impulsada, proporcionando una corriente moderada de los datos de perfil contra. El registro podría estar recibiendo continuamente escrito a, probablemente con más frecuencia que a nadie estaría mirando. A medida que crece el tamaño del registro, se hace difícil analizar a través de todas las consultas de datos y problemáticas fácilmente perderse en el registro. MySQL ofrece otra herramienta, mysqldumpslow, que ayuda a evitar este problema, rompiendo el registro de consultas lentas. El binario se incluye con MySQL (en Linux) para utilizarlo sólo tiene que ejecutar el comando y pasar en la ruta del registro:

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

Count: 2 Time=68.34s (136s) Lock=0.00s (0s) Rows=39892974.5 (79785949), root[root]@localhost
SELECT PL.pl_title, P.page_title
FROM page P
INNER JOIN pagelinks PL
ON PL.pl_namespace = P.page_namespace
WHERE P.page_namespace = N

el bienestar datos mostrados:

  • Conde – ¿Cuántas veces ha sido la consulta registra
  • tiempo

  • – Tanto el promedio de tiempo y el tiempo total en los)
  • lock (- tiempo de bloqueo de tabla filas
  • – Número de filas devueltas

el comando abstrae números y cadenas, por lo que las mismas consultas con diferentes cláusulas WHERE serán contado como la misma consulta (nótese la page_namespace = N). Tener una herramienta como mysqldumpslow evita la necesidad de vigilar constantemente el registro de consultas lentas, en lugar de permitir que las revisiones periódicas o automatizados. Los parámetros en el comando mysqldumpslow permiten alguna coincidencia de expresión complejo que ayuda profundizar en las diversas consultas en el registro.

También hay herramientas de análisis tercera parte de registro disponibles que ofrecen diferentes vistas de datos, siendo muy popular pt-consulta de digerir. desglose

consulta

Una última herramienta de perfilado a tener en cuenta es la herramienta que permite una ruptura hacia abajo compleja de una consulta. Un caso de uso es bueno para la herramienta es agarrar una consulta problemática desde el registro de consultas lentas y ejecutarlo directamente en MySQL. En primer lugar perfilado debe estar encendido, la consulta es RAN:

mysql> SET SESSION profiling = 1;
mysql> USE profile_sampling;
mysql> SELECT * FROM users WHERE name = 'Jesse';
mysql> SHOW PROFILES;

Después de perfiles se ha encendido, el espectáculo PERFILES mostrará una tabla de vinculación de un Query_ID a una instrucción SQL. Encontrar el Query_ID correspondiente a la RAN consulta y ejecutar la siguiente consulta (sustituir # con su Query_ID):

mysql> SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=#;

Ejemplo de salida:

el estado es el «paso» en el proceso de ejecución de la consulta, y la duración es el tiempo ese paso se llevó a completar, en cuestión de segundos. Esto no es una herramienta extremadamente útil, pero es interesante y puede ayudar a determinar qué parte de la ejecución de la consulta está causando el mayor latencia.

Para una descripción detallada de las distintas columnas: http: //dev.mysql.com/doc/refman/5.5/en/profiling-table.html

Para una descripción detallada de los distintos «pasos»: http: / /dev.mysql.com/doc/refman/5.5/en/general-thread-states.html

NOTA: Esta herramienta no debe utilizarse en un entorno de producción en lugar de analizar consultas específicas.

disminuir el rendimiento de registro de consultas

Una última cuestión a resolver es cómo el registro de consultas lentas afectará el rendimiento. En general es seguro para ejecutar el registro de consultas lentas en un entorno de producción; ni la CPU ni la carga de E / S debe ser una preocupación ¹ ². Sin embargo, debe haber alguna estrategia para monitorear el tamaño del registro para asegurar el tamaño del archivo de registro no sea demasiado grande para el sistema de archivos. Además, una buena regla general cuando se ejecuta el registro de consultas lentas en un entorno de producción es dejar long_query_time a 1s o superior.

IMPORTANTE: No es una buena idea utilizar la herramienta de perfiles, perfiles SET = 1, ni para registrar todas las consultas, es decir, la variable general_log, en una producción, entorno de alta carga de trabajo.

Conclusión

El registro de consultas lentas es extremadamente útil para señalar a las consultas problemáticas y perfilar el rendimiento general de la consulta. Cuando la consulta de perfiles con el registro de consultas lentas, un desarrollador puede obtener una comprensión profunda de cómo las consultas de MySQL de una aplicación se están realizando. El uso de una herramienta como mysqldumpslow, seguimiento y evaluación del registro de consultas lentas se convierte en manejable y puede ser fácilmente incorporado en el proceso de desarrollo. Ahora que las consultas problemáticas han sido identificados, el siguiente paso es para sintonizar las consultas para un máximo rendimiento.