¿Cuánto sabe sobre la consulta lenta MySQL de PHP?

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:

Inserte la descripción de la imagen aquí

Explique los siguientes parámetros:

Inserte la descripción de la imagen aquí

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.

Inserte la descripción de la imagen aquí

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」

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí


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

Supongo que te gusta

Origin blog.csdn.net/weixin_49163826/article/details/109061397
Recomendado
Clasificación