Logo
WP Fix by Blimx

Slow Query Log WordPress — Cómo Leerlo y Actuar

Actualizado:
DatabasePerformance

La característica MySQL individual más útil para WordPress

La mayoría de sitios WordPress lentos tienen 1-5 queries lentas específicas que dan cuenta del 80%+ de la lentitud. Encuentra esas queries, optimízalas, y el sitio es rápido. Todo lo demás (caching, CDN, optimización de imágenes) ayuda pero no arreglará el problema subyacente.

El slow query log de MySQL identifica exactamente esas 1-5 queries.

Habilitando el slow query log

En MySQL:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
SET GLOBAL log_queries_not_using_indexes = 'ON';

O persistente en /etc/mysql/my.cnf:

[mysqld]
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /var/log/mysql/slow.log
log_queries_not_using_indexes = 1

long_query_time = 1 loguea queries tomando 1+ segundo. Empieza con 1. Una vez que arregles esos, baja a 0.5, después 0.2.

Leyendo el slow log

Una entrada del slow query log se ve como:

# Time: 2026-05-13T10:32:15.123456Z
# Query_time: 3.245678  Lock_time: 0.000123 Rows_sent: 1  Rows_examined: 850000
SELECT post_id FROM wp_postmeta WHERE meta_value LIKE '%search%';

Campos clave: - Query_time: cuánto tomó la query - Lock_time: cuánto esperó la query por locks - Rows_sent: filas realmente devueltas - Rows_examined: filas que MySQL tuvo que leer

Señal de peligro: alto Rows_examined con bajo Rows_sent. Índice faltante.

Agregando con mysqldumpslow

# Top 20 por tiempo total
mysqldumpslow -s t -t 20 /var/log/mysql/slow.log

# Top 20 por tiempo promedio
mysqldumpslow -s at -t 20 /var/log/mysql/slow.log

# Top 20 por conteo
mysqldumpslow -s c -t 20 /var/log/mysql/slow.log

El output se ve como:

Count: 5234  Time=2.45s (12823s)  Lock=0.001s (5.2s)  Rows=1.0 (5234)
  SELECT meta_value FROM wp_postmeta WHERE post_id = N AND meta_key = 'S'

Count: 5234 corridas × 2.45s = 12,823s total. Arregla esto y ahorras 3.5 horas de tiempo MySQL por ventana de log.

Patrones y sus significados

Patrón A — escaneo postmeta sin índice

SELECT meta_value FROM wp_postmeta WHERE post_id = N AND meta_key = 'S'

Con Rows_examined > 100, falta índice compuesto. Añade:

ALTER TABLE wp_postmeta ADD INDEX idx_post_meta_key (post_id, meta_key);

Patrón B — query de opciones autoload

SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'

Si lento (>500ms), payload autoload muy grande. Limpia.

Patrón C — WP_Query grande con meta_query

SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts
INNER JOIN wp_postmeta ON ...
WHERE wp_postmeta.meta_key = '_price'

Múltiples joins postmeta + SQL_CALC_FOUND_ROWS = catastrófico. Deshabilita SQL_CALC_FOUND_ROWS o mueve a tabla de lookup.

Patrón D — autenticación wp_users

SELECT * FROM wp_users WHERE user_login = 'S' OR user_email = 'S'

Si frecuente y lento, bot brute-forceando. Bloquea en WAF.

Patrón E — queries de comentarios

SELECT * FROM wp_comments WHERE comment_status = 'hold'

Con 100,000+ comentarios pendientes, ralentiza admin. Borra spam:

DELETE FROM wp_comments WHERE comment_approved = 'spam';

El workflow completo

# 1. Habilita slow log
mysql -e "SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1;"

# 2. Navega sitio o espera tráfico por 30+ minutos

# 3. Deshabilita para que no crezca por siempre
mysql -e "SET GLOBAL slow_query_log = 'OFF';"

# 4. Agrega
mysqldumpslow -s t -t 20 /var/log/mysql/slow.log

# 5. Para cada top 5, EXPLAIN
mysql -e "EXPLAIN <query lenta>;"

# 6. Aplica arreglo (índice, refactor, cache)

# 7. Re-habilita, re-prueba

Cuándo EXPLAIN es necesario

EXPLAIN SELECT meta_value FROM wp_postmeta WHERE post_id = 12345 AND meta_key = '_yoast_wpseo_metadesc';

Enfócate en: - type: ALL = escaneo completo (malo); ref, eq_ref = lookup de índice (bueno) - key: qué índice usado; NULL = sin índice - rows: filas estimadas leídas - Extra: Using index bueno; Using filesort, Using temporary malo

Los índices tienen costo

Cada índice: - Cuesta espacio en disco (5-30% del tamaño de tabla) - Ralentiza INSERT/UPDATE/DELETE - Toma tiempo para construir en datos existentes

Solo añade índices que mides ayudar.

Errores comunes al leer slow logs

  • Confiar en resultados de `long_query_time = 10` — empieza en 1 segundo
  • Optimizar queries que corren 5 veces/día — enfócate en alta frecuencia
  • Añadir índices sin `ALGORITHM=INPLACE` — bloquea tabla durante creación
  • Ignorar lock_time — alto lock_time significa contención de locks

Cuándo llamar a un especialista

La optimización de base de datos es altamente apalancada. Una auditoría + arreglo de 4 horas puede bajar TTFB en 50-90%.

Auditoría de velocidad incluyendo deep-dive de base de datos. Para rendimiento más amplio ve recuperación de velocidad.