Reimprima el siguiente artículo
MySQL abre el registro de consultas lento
MySQL Explica el ciclo de vida de ejecución de SQL de la vista de perfil de la demostración detallada
Uno, inicie el registro de consultas lento
Activar el registro lento solo es adecuado para proyectos pequeños, proyectos que no están en línea o situaciones de emergencia, porque una vez que se activa la consulta de registro lento, aumentará la presión sobre la base de datos. Por lo tanto, el fondo se usa generalmente para escribir el tiempo de operación de datos en el archivo de registro, y el registro se borra regularmente cada semana.
Descripción de parámetros:
slow_query_log 慢查询开启状态,ON开启,OFF关闭
slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
long_query_time 查询超过多少秒才记录
Compruebe si se ha activado la consulta lenta
show variables like 'slow_query%';
resultado de la operación:
show variables like 'long_query_time';
Resultado de la operación: la
consulta predeterminada es más de 10 segundos antes de la grabación
Habilitar consulta lenta
1. Configuración de variables globales (el reinicio de la base de datos de esta manera fallará y deberá reconfigurarse)
# 将 slow_query_log 全局变量设置为“ON”状态
set global slow_query_log='ON';
# 设置慢查询日志存放的位置
set global slow_query_log_file='/usr/local/mysql/data/slow.log';
# 设置查询超过1秒就记录(如果有时候用命令不起作用,那么可以关闭再打开)
set global long_query_time=1;
2. Modifique el archivo de configuración my.cnf (el reinicio del servidor no afectará)
Modifique el archivo de configuración my.cnf y agréguelo en [mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log //linux
long_query_time = 1
Reinicie el servicio MySQL
service mysqld restart
En segundo lugar, analice sql de consulta lenta
explicar Ver un plan de ejecución de estas sentencias SQL, verificar si la sentencia SQL usa un índice y si se realiza un escaneo completo de la tabla
explain select * from emp where name = 'Jefabc';
resultado de la operación:
identificación | Seleccionar identificador |
seleccione tipo | Indica el tipo de consulta. |
mesa | Tabla de conjunto de resultados de salida |
particiones | Partición a juego |
escribe | Indica el tipo de conexión de la mesa. |
llaves_posibles | Indica el índice que se puede utilizar al realizar consultas. |
llave | Indica el índice real utilizado |
key_len | Longitud del campo de índice |
árbitro | Comparación de columnas e índices |
filas | Número de filas escaneadas (número estimado de filas) |
filtrado | Porcentaje de filas filtradas por criterios de tabla |
Extra | Descripción y explicación de la implementación |
El tipo de consulta select_type es consulta de tabla única, consulta de unión, subconsulta, etc.
SENCILLO | SELECT simple, sin usar UNION o subconsultas, etc. |
PRIMARIO | La consulta más externa en la subconsulta. Si la consulta contiene subpartes complejas, la selección más externa se marca como PRIMARY |
UNIÓN | La segunda instrucción SELECT o la siguiente en UNION |
UNIÓN DEPENDIENTE | La segunda declaración SELECT o la siguiente en UNION depende de la consulta externa |
RESULTADO DE LA UNIÓN | El resultado de UNION, la segunda selección en la declaración de unión inicia todas las selecciones |
SUBQUERY | El primer SELECT en la subconsulta, el resultado no depende de la consulta externa |
SUBQUERY DEPENDIENTE | El primer SELECT en la subconsulta depende de la consulta externa |
DERIVADO | Subconsultas en cláusulas SELECT y FROM de tablas derivadas |
SUBQUERY INCUPERABLE | El resultado de una subconsulta no se puede almacenar en caché, la primera línea del enlace externo debe volver a evaluarse |
escriba acceso a la mesa
Ordenar de mejor a peor: sistema> const> eq_ref> ref> ref_or_null> index_merge> unique_subquery> index_subquery> range> index> all.
TODOS | Recorra toda la tabla para encontrar filas coincidentes |
índice | Atravesar el árbol de índice |
abarcar | Recupere solo filas en un rango dado, use un índice para seleccionar filas |
árbitro | Indica la condición de coincidencia de conexión de la tabla anterior, es decir, qué columnas o constantes se utilizan para encontrar el valor en la columna de índice |
eq_ref | Similar a la referencia, la diferencia es que el índice utilizado es la clave primaria del índice único o único. |
sistema const 、 | Cuando MySQL optimiza una determinada parte de la consulta y la convierte en una constante, utilice estos tipos de acceso. Si la clave principal se coloca en la lista where, MySQL puede convertir la consulta en una constante. System es un caso especial del tipo const. Cuando la tabla de consultas tiene solo una fila, use system |
NULO | MySQL descompone la declaración durante el proceso de optimización y ni siquiera necesita acceder a la tabla o al índice durante la ejecución. Por ejemplo, la selección del valor mínimo de una columna de índice se puede hacer mediante una búsqueda de índice separada. |
possible_keys índices posibles
Indique qué índice puede usar MySQL para buscar registros en la tabla. Si hay un índice en el campo involucrado en la consulta, el índice aparecerá en la lista, pero es posible que la consulta no lo use).
Índice de clave realmente utilizado
La columna de clave muestra la clave (índice) que MySQL realmente decide usar, que debe incluirse en possible_keys
Si no se selecciona ningún índice, la clave es NULL. Para forzar a MySQL a usar o ignorar el índice en la columna possible_keys, use FORCE INDEX, USE INDEX o IGNORE INDEX en la consulta.
Tres, mostrar perfil para análisis SQL
1. ¿Qué es Mostrar perfil?
Es un método de ajuste de SQL proporcionado por mysql para analizar el consumo de recursos de la ejecución de SQL en la sesión actual, y es más granular que explicar. El estado cerrado predeterminado y guarde los resultados de las últimas 15 ejecuciones.
2. Compruebe si el parámetro está activado y cómo activarlo.
1. Comprueba si está encendido
show VARIABLES like 'profiling';
Resultado de la operación:
2. Perfil abierto, que está cerrado por defecto, ahora abierto.
set profiling = 1;
3. Usar perfil
1. SQL lento durante la ejecución
select * from emp group by id%10;
select * from emp group by id%20 order by 5;
2. Ejecute sql
show profiles;
resultado de la operación:
3. Diagnostique SQL y vea el uso de CUP, formato: muestre el perfil de la CPU, bloquee io para la consulta [Query_ID]
show profile cpu,block io for query 12
Resultados de la ejecución
Aquí solo se enumeran cpu y block io. Por supuesto, los tipos de diagnóstico son más que estos, el cpu y block io de uso común
ALL 显示所有的开销信息
BLOCK IO 显示块IO相关开销
CONTEXT SWITCHES 上下文切换相关开销
CPU 显示CPU相关开销信息
IPC 显示发送和接收相关开销信息
MEMORY 显示内存相关开销信息
PAGE FAULTS 显示页面错误相关开销
SOURCE 显示和Source_function,Source_file,Source_line相关的开销信息
SWAPS 显示交换次数相关开销的信息
Las siguientes 4 ocurrencias de Status causarán grandes problemas:
converting HEAP to MyISAM :查询结果太大,内存都不够用了往磁盘上搬
Creating tmp table : 创建临时表,拷贝数据到临时表,用完再删除
Copy to tmp table on disk : 把内存中临时表赋值到磁盘,很危险
locked :存在锁
De la siguiente manera:
crear una tabla tmp, copiar a la tabla tmp, eliminar la tabla tmp, por supuesto, será lento