Análisis de consultas de intercepción

1. Registro de consulta lento

1.1 ¿Qué es?

(1) El registro de consulta lenta de MySQL es un registro de registro proporcionado por MySQL. Se utiliza para registrar declaraciones en MySQL cuyo tiempo de respuesta excede el umbral. Específicamente, el SQL que se ejecuta más que el valor long_query_time se registrará en el registro de consulta lenta. En.

(2) Se refiere específicamente al SQL cuyo tiempo de ejecución excede el valor de long_query_time, se registrará en el registro de consulta lenta. El valor predeterminado de long_query_time es 10, lo que significa ejecutar la instrucción durante más de 10 segundos.

(3) Depende de él ver qué SQL excede nuestro valor de tiempo de resistencia máximo. Por ejemplo, si un SQL se ejecuta durante más de 5 segundos, incluso si es SQL lento, esperamos recopilar más de 5 segundos de SQL y realizar un análisis exhaustivo con la explicación anterior.

1.2 Cómo usar

De manera predeterminada, el registro de consultas lentas no está habilitado en la base de datos MySQL, y necesitamos configurar este parámetro manualmente.
Por supuesto, si no es necesario para el ajuste, generalmente no se recomienda habilitar este parámetro, ya que activar el registro de consultas lentas tendrá más o menos impacto en el rendimiento. El registro de consulta lenta admite escribir registros de registro en un archivo.

(1) Configuración de inicio
SHOW VARIABLES LIKE '%slow_query_log%';
Compruebe si el registro de consultas lentas está habilitado. De forma predeterminada, el valor de slow_query_log está desactivado, lo que indica que el registro de consultas lentas está deshabilitado

set global slow_query_log=1;
Habilitar registro de consulta lento

SHOW VARIABLES LIKE 'long_query_time%';
Ver segundos de unidad de umbral de configuración de consulta lenta

set long_query_time=1
Establecer el umbral de consulta lenta en segundos

(2) Si surte efecto de forma permanente, debe modificar la configuración en [mysqld] en el archivo de configuración my.cnf

[mysqld]
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=3
log_output=FILE

(3) Ejecute SQL con un tiempo de consulta prolongado, abra el registro de consulta lento para ver

select sleep(4);

1.3 herramienta de análisis de registro mysqldumpslow

(1) Ver la información de ayuda de mysqldumpslow
Inserte la descripción de la imagen aquí
-s -------- indica el orden de clasificación
c -------- el número de visitas
l -------- tiempo de bloqueo
r- ------ Registro de retorno
t --------
Tiempo de consulta al -------- Tiempo de bloqueo promedio
ar -------- Número de registro de retorno promedio
en ----- --- Tiempo de consulta promedio-
t -------- Es la cantidad de datos a devolver
-g -------- Detrás coincide con un patrón de coincidencia regular, que no distingue entre mayúsculas y minúsculas

(2) Ver la información de ayuda de mysqldumpslow

得到返回记录集最多的 10SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/slow.log

得到访问次数最多的 10SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/slow.log

得到按照时间排序的前 10 条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/slow.log

另外建议在使用这些命令时结合 | 和 more 使用 ,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /var/lib/mysql/slow.log | more

2. mostrar perfil

Qué es: mysql proporciona recursos que pueden usarse para analizar la ejecución de declaraciones en la sesión actual . Se puede usar para medir el ajuste de SQL, similar a la barra detallada. ¡
Use show profile para ver el ciclo de ejecución de SQL!

Por defecto, los parámetros están desactivados y se guardan los resultados de las últimas 15 ejecuciones

2.1 Abrir perfil

Compruebe si el perfil está habilitado: muestre variables como '% profiling%'.
Inserte la descripción de la imagen aquí
Si no está habilitado, puede ejecutar set profiling = 1 (set profiling = on) para habilitarlo.

2.2 Usando el perfil

Ejecute el comando show prifiles para ver las últimas consultas.
Inserte la descripción de la imagen aquí
De acuerdo con Query_ID, puede ejecutar además show profile cpu, bloquear io para la consulta Query_id para ver los pasos de ejecución específicos de sql.
Inserte la descripción de la imagen aquí
Diagnostique SQL, muestre el tipo de perfil para la consulta n (n es el número SQL de la pregunta en el paso anterior); Tipo de
comentario de parámetro
:
| ALL --Muestra toda la información de gastos generales
|
BLOQUEO IO --Muestra los gastos generales relacionados con el bloque IO | INTERRUPTORES DE CONTEXTO- Gastos relacionados con el cambio de contexto
| Pantalla de CPU Información de costo relacionada con CPU
| Pantalla de IPC que envía y recibe información de costo relacionada
| MEMORIA - Pantalla de información relacionada con el costo de memoria
| FALLA DE PÁGINA - Muestra información de costo relacionada con fallas de página
| FUENTE - Pantalla y Source_function, Source_file, Source_line información de gastos generales relacionados
| SWAPS - Muestra información sobre los gastos generales relacionados con el número de intercambios

Conclusiones que requieren atención en el desarrollo diario.

  • Conversión de HEAP a MyISAM El resultado de la consulta es demasiado grande y la memoria no es suficiente para pasar al disco.
  • Creación de una tabla tmp Cree una tabla temporal; copie los datos en la tabla temporal y elimínela después de su uso.
  • Copiar a la tabla tmp en el disco Copiar la tabla temporal en la memoria al disco
  • bloqueado

2.3 Proceso de consulta general

El proceso de consulta de mysql es aproximadamente:

       El cliente mysql establece una conexión con el servidor mysql a través del protocolo, envía la instrucción de consulta y primero verifica la memoria caché de la consulta. Si golpea, el resultado se devuelve directamente; de ​​lo contrario, la instrucción se analiza, es decir, antes de que se analice la consulta, el servidor primero accederá a la memoria caché de consulta (memoria caché de consulta ): Almacena la instrucción SELECT y el conjunto de resultados de la consulta correspondiente. Si el resultado de una consulta ya está en la memoria caché, el servidor ya no analizará, optimizará ni ejecutará la consulta. Solo necesita devolver los resultados en la memoria caché al usuario, lo que mejorará en gran medida el rendimiento del sistema.

       Analizador de sintaxis y preprocesamiento: Primero, mysql analiza la instrucción SQL a través de palabras clave y genera un "árbol de análisis" correspondiente. El analizador de mysql
usará las reglas de sintaxis de mysql para verificar y analizar la consulta; el preprocesador verificará además si el número analizado es legal de acuerdo con algunas reglas de mysql.

       El optimizador de consultas considera que el árbol de análisis es legal, y el optimizador lo convierte en un plan de ejecución. Una consulta se puede ejecutar de muchas maneras,
y todas devuelven el mismo resultado al final. La función del optimizador es encontrar el mejor plan de ejecución.

       Entonces, mysql usa el índice BTREE por defecto, y una dirección general es: no importa cómo arrojar sql, al menos por ahora, mysql solo
usa un índice en la tabla como máximo .

2.4 Orden de ejecución de SQL
Secuencia de escritura a mano: la
Inserte la descripción de la imagen aquí
secuencia de ejecución real:
con la actualización de la versión Mysql, su optimizador también se actualiza continuamente. El optimizador analizará el consumo de rendimiento diferente causado por diferentes secuencias de ejecución y
ajustará dinámicamente la secuencia de ejecución. La siguiente es la secuencia de consulta que a menudo aparece:
Inserte la descripción de la imagen aquí

2.5 MyISAM e InnoDB
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
mostrar motores: ver todos los motores de bases de datos
Inserte la descripción de la imagen aquí

mostrar variables como '% storage_engine%' Ver el motor de base de datos predeterminado
Inserte la descripción de la imagen aquí

138 artículos originales publicados · elogiados 3 · visitas 7241

Supongo que te gusta

Origin blog.csdn.net/weixin_43719015/article/details/104968814
Recomendado
Clasificación