Encontrar las consultas más costosas (performance_schema digest)
MySQLRendimientoComando
SELECT SCHEMA_NAME AS db,
LEFT(DIGEST_TEXT, 80) AS query,
COUNT_STAR AS calls,
ROUND(SUM_TIMER_WAIT / 1e12, 2) AS total_sec,
ROUND(AVG_TIMER_WAIT / 1e9, 2) AS avg_ms,
ROUND(QUANTILE_95 / 1e9, 2) AS p95_ms,
ROUND(100 * SUM_TIMER_WAIT / SUM(SUM_TIMER_WAIT) OVER (), 1) AS pct_total,
ROUND(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0)) AS rows_exam_per_call,
ROUND(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0)) AS rows_sent_per_call,
SUM_NO_INDEX_USED AS no_index,
SUM_CREATED_TMP_DISK_TABLES AS tmp_disk,
LAST_SEEN
FROM performance_schema.events_statements_summary_by_digest
WHERE SCHEMA_NAME IS NOT NULL
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 20;
-- Server-wide top wait events
SELECT events, total, total_latency, avg_latency FROM sys.waits_global_by_latency LIMIT 10;Qué hace
Clasifica las consultas normalizadas por tiempo total con número de llamadas, latencia media y p95, porcentaje del total, filas examinadas / enviadas por llamada, ejecuciones sin índice y tablas temporales volcadas a disco. La segunda consulta muestra en qué esperas (IO, bloqueos, redo) se consume el tiempo.
Cuándo usarlo
Primera parada cuando sube la carga de CPU / IO o los usuarios reportan 'la base de datos va lenta'; funciona incluso con el slow log desactivado.
Precaución
Los valores son acumulados desde el último reinicio o TRUNCATE TABLE performance_schema.events_statements_summary_by_digest; tome dos instantáneas y calcule la diferencia para ver la actividad actual. La tabla está limitada a performance_schema_digests_size filas; una vez llena, las consultas nuevas se agregan en una única fila con DIGEST NULL. DIGEST_TEXT se corta en performance_schema_max_digest_length (1024) bytes. Los tiempos están en picosegundos. Una relación alta rows_exam_per_call / rows_sent_per_call es la señal más clara de un índice faltante.
Relacionado
- Qué se está ejecutando ahora: sesiones activas, latencia, bloqueos y transacciones (sys.session)
- Diagnosticar 'Waiting for table metadata lock' y encontrar el bloqueador real
- Analizar los deadlocks de InnoDB y registrarlos todos
- Transacciones de larga duración e history list length (retraso de purge)
- Capturar un slow log completo breve y analizarlo con pt-query-digest
- Depurar un mal plan con EXPLAIN ANALYZE y el optimizer trace