1. Introducción
Activar el registro de consultas lentas permite que MySQL registre consultas que exceden el tiempo especificado Al localizar y analizar los cuellos de botella de rendimiento, el rendimiento del sistema de base de datos se puede optimizar mejor.
2. Introducción de parámetros
slow_query_log estado de apertura de consulta lenta
slow_query_log_file La ubicación donde se almacena el registro de consultas lentas (este directorio necesita el permiso de escritura de la cuenta en ejecución de MySQL y generalmente se establece como el directorio de almacenamiento de datos de MySQL)
long_query_time Cuántos segundos se registrará la consulta antes, el valor predeterminado es 10 segundos
3. Activa la consulta lenta
(1) Ver parámetros relacionados de consulta lenta
mysql> show variables like 'slow_query%';
+---------------------------+-----------------------------------+
| Variable_name | Value |
+---------------------------+-----------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /usr/local/var/mysql/slow.log |
+---------------------------+-----------------------------------+
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
(2) Método de configuración
Método 1: Configuración de variable global
Establecer la variable global slow_query_log en el estado "ON"
mysql> set global slow_query_log='ON';
Establecer la ubicación de almacenamiento de los registros de consultas lentas
mysql> set global slow_query_log_file='/usr/local/var/mysql/slow.log ';
Establezca el tiempo de consulta lento, la consulta se registrará si supera 1 segundo
mysql> set global long_query_time=1;
Método dos: configuración del archivo de configuración
Modifique el archivo de configuración my.cnf y agréguelo en [mysqld]
[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/var/mysql/slow.log
long_query_time = 1
(3) Reinicie el servicio MySQL
service mysqld restart
(4) Análisis de registro de consultas lento
- Interceptar un trozo de registro de consultas lentas:
# Time: 180918 19:06:21
# User@Host: proxy[proxy] @ [192.168.0.16] Id: 6707197
# Query_time: 1.015429 Lock_time: 0.000116 Rows_sent: 1 Rows_examined: 44438
SET timestamp=1537268781;
select
id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,
nodisturb_mode, nodisturb_start_time,
nodisturb_end_time, binding_time, device_os_type, app_type, state
from app_mobile_device
where user_id = '78436'
and app_type = 'YGY'
order by binding_time desc;
# User@Host: proxy[proxy] @ [192.168.0.16] Id: 6707236
# Query_time: 1.021662 Lock_time: 0.000083 Rows_sent: 1 Rows_examined: 44438
SET timestamp=1537268781;
select
id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,
nodisturb_mode, nodisturb_start_time,
nodisturb_end_time, binding_time, device_os_type, app_type, state
from app_mobile_device
where user_id = '14433'
and app_type = 'YGY'
order by binding_time desc;
Puedes ver aquí:
Query_time (el tiempo de consulta de la declaración de consulta lenta) supera el conjunto de 1 s,
Rows_sent (consulta lenta devuelve registros) Aquí solo se devuelve 1
Rows_examined (el número de filas escaneadas por la consulta lenta) 44438 -> Desde aquí, probablemente pueda ver que el problema es grande
- Ahora coloque esta declaración SQL en la base de datos para su ejecución y use EXPLAIN para analizar el plan de ejecución
EXPLAIN
select
id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,
nodisturb_mode, nodisturb_start_time,
nodisturb_end_time, binding_time, device_os_type, app_type, state
from app_mobile_device
where user_id = '78436'
and app_type = 'YGY'
order by binding_time desc;
El resultado de la consulta es:
Explique los siguientes parámetros:
Aquí se puede encontrar que las filas es el número de filas que se van a consultar, si se consultan más de 4w filas, la lentitud es segura.
Debido a que existen varias condiciones y no se usa ningún índice, solo puede agregar un índice.
Agregue un índice de múltiples columnas normal a la selección aquí, porque esta tabla fue diseñada con un problema al principio, lo que resulta en datos duplicados y no se puede establecer un índice único.
ALTER TABLE app_mobile_device ADD INDEX user_app_type_only ( `user_id` ,`app_type` )
Se establece el índice, y luego mire el plan de ejecución del SQL en este momento.
Se puede ver que el número de filas comprobadas por filas se ha reducido significativamente.
En este punto, básicamente se completa el uso y optimización de consultas lentas.
Artículo de referencia: https://www.cnblogs.com/sunxun/p/9673788.html
https://www.cnblogs.com/gxj521test/p/10964795.html
Presta atención, no te pierdas
Muy bien, todos, lo anterior es todo el contenido de este artículo. Las personas que pueden ver aquí son todos talentos . Como dije antes, hay muchos puntos técnicos en PHP, porque hay demasiados, es realmente imposible de escribir, y no leerás demasiado después de escribirlo, así que lo organizaré en PDF y documentos aquí, si es necesario. lata
Haga clic para ingresar el código secreto: PHP + 「Plataforma」
Para obtener más contenido de aprendizaje, visite el excelente catálogo de tutoriales de arquitecto PHP de [Comparative Standard Factory], siempre que pueda leerlo para asegurarse de que el salario aumentará un paso (actualización continua)
El contenido anterior espera poder ayudarte . Muchos PHPers siempre encuentran algunos problemas y cuellos de botella cuando están avanzados. No hay sentido de dirección cuando escriben demasiado código comercial. No sé por dónde empezar a mejorar. He compilado información sobre esto, incluyendo Pero no se limita a: arquitectura distribuida, alta escalabilidad, alto rendimiento, alta concurrencia, ajuste del rendimiento del servidor, TP6, laravel, YII2, Redis, Swoole, Swoft, Kafka, optimización de Mysql, scripts de shell, Docker, microservicios, Nginx, etc. Muchos puntos de conocimiento, productos secos avanzados avanzados, se pueden compartir con todos de forma gratuita, y aquellos que lo necesiten pueden unirse a mi grupo de intercambio de tecnología PHP