El costo oculto de las opciones WordPress
Cada petición de WordPress empieza con una sola query:
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';Esto carga todas las opciones marcadas autoload='yes' a memoria. La intención: guardar configuración necesaria frecuentemente una vez por petición en lugar de consultar por opción.
El problema: los plugins escriben datos a opciones descuidadamente. Sobre años, el payload autoload crece de un saludable 200KB a un catastrófico 20MB. Cada petición ahora carga 20MB de datos mayoritariamente inútiles de MySQL a PHP, soplando memoria y ralentizando cada página.
Este artículo es el playbook diagnóstico y de limpieza para autoload bloat.
Cómo medir tu tamaño autoload
La query individual más importante para rendimiento WordPress:
SELECT
ROUND(SUM(LENGTH(option_value))/1024/1024, 2) AS autoload_mb,
COUNT(*) AS option_count
FROM wp_options
WHERE autoload = 'yes';Saludable: bajo 1MB, menos de 200 opciones. Preocupante: 1-5MB, 200-500 opciones. Catastrófico: 5MB+, 500+ opciones.
Los mayores ofensores
SELECT
option_name,
ROUND(LENGTH(option_value)/1024, 2) AS size_kb
FROM wp_options
WHERE autoload = 'yes'
ORDER BY LENGTH(option_value) DESC
LIMIT 30;El output muestra tus top 30 opciones autoload por tamaño. Patrones que hemos visto:
Patrón 1 — Transients huérfanos de plugins
_transient_timeout_X 350 KB
_transient_X 280 KBSi removiste un plugin pero sus transients no se limpiaron, persisten por siempre.
Patrón 2 — Cachés de plugins obsoletos
wpforms_cached_forms 4500 KB
elementor_template_data 3200 KBLos desarrolladores de plugins no deberían guardar este tipo de datos autoloaded. Pero muchos lo hacen. Años de acumulación crean entradas autoload masivas.
Patrón 3 — Plugins deshabilitados dejados atrás
some_old_plugin_settings 1200 KB
some_old_plugin_data 900 KBCuando desactivas (no borras) un plugin, sus opciones permanecen. Siguen cargando en cada petición, desperdiciando tiempo.
Patrón 4 — Datos de plugin de backup
backwpup_jobs 8000 KB
ai1wm_export_status 5000 KBPlugins de backup a veces guardan metadata de backup en autoload. Masivo.
Por qué autoload bloat ralentiza todo
Cargar 20MB de MySQL toma 200-500ms incluso en hardware rápido. Multiplica por 1000 visitas por hora y tienes:
- 200,000-500,000ms de tiempo innecesario gastado por hora
- CPU MySQL alto solo sirviendo las mismas opciones repetidamente
- Presión de memoria PHP (los datos quedan en memoria por la petición completa)
- Cache misses (el object cache se puebla con datos inútiles)
En agregado, autoload bloat es a menudo la causa individual más grande de sitios WordPress lentos. Hemos visto TTFB caer de 2.5s a 400ms tras una limpieza autoload de 10 minutos.
El procedimiento de limpieza
Paso 1 — Backup la base de datos
wp db export pre-autoload-cleanup.sqlNo negociable. Algunas opciones "inútiles" pueden ser necesarias por código que no te das cuenta corre.
Paso 2 — Identifica candidatos de limpieza
-- Top 50 entradas autoload por tamaño
SELECT option_name, ROUND(LENGTH(option_value)/1024, 2) AS size_kb
FROM wp_options
WHERE autoload = 'yes'
ORDER BY LENGTH(option_value) DESC
LIMIT 50;Para cada entrada grande, responde: 1. ¿El plugin sigue activo? Si no → la opción probablemente puede borrarse 2. ¿Es un transient? Si sí → puede borrarse (se regenerará si es necesario) 3. ¿Está documentado en algún lugar? Busca en Google wp_options "<option_name>"
Paso 3 — Borra transients expirados
-- Borra transients expirados
DELETE FROM wp_options WHERE option_name LIKE '\_transient\_timeout\_%' AND option_value < UNIX_TIMESTAMP();
DELETE FROM wp_options WHERE option_name LIKE '\_transient\_%'
AND option_name NOT IN (SELECT * FROM (SELECT REPLACE(option_name, '_transient_timeout_', '_transient_') FROM wp_options WHERE option_name LIKE '\_transient\_timeout\_%') a);O con WP-CLI:
wp transient delete --expiredPaso 4 — Remueve opciones de plugins desactivados/desinstalados
Obtén una lista de todos los plugins alguna vez instalados:
ls wp-content/plugins/Para cada plugin, identifica sus opciones:
SELECT option_name FROM wp_options WHERE option_name LIKE '<plugin_prefix>%';Si el plugin fue desinstalado pero las opciones permanecen, bórralas:
DELETE FROM wp_options WHERE option_name LIKE 'oldplugin_%';Paso 5 — Cambia entradas autoload grandes a autoload=no
Para opciones que necesitas mantener pero no cargar en cada petición:
UPDATE wp_options SET autoload = 'no' WHERE option_name = 'huge_option_name';Los datos se preservan; solo no cargarán en cada petición. El plugin que los necesite los buscará explícitamente cuando sea necesario.
Candidatos para autoload=no: - Metadata de plugins de backup - Cachés de plugins viejos - Datos de export/import de plugins - Agregados estilo analytics
Paso 6 — Re-mide
SELECT
ROUND(SUM(LENGTH(option_value))/1024/1024, 2) AS autoload_mb,
COUNT(*) AS option_count
FROM wp_options
WHERE autoload = 'yes';Meta: bajo 1MB total, bajo 300 opciones.
El object cache persistente cambia la ecuación
Si tienes Redis o Memcached configurado como object cache persistente, autoload bloat duele menos — las opciones se cachean tras la primera carga.
Pero: el object cache persistente no ayuda en la primera petición tras cache clear, y no ayuda cuando el cache es desalojado bajo presión de memoria. Así que autoload bloat aún duele durante picos de tráfico y cache clears.
Setup recomendado:
// wp-config.php
define('WP_CACHE', true);
define('WP_CACHE_KEY_SALT', 'yoursite-prefix');Instala plugin Redis Object Cache. Configura Redis con 256MB+ memoria.
Errores comunes durante limpieza autoload
- Borrar opciones sin backup — algunos plugins corrompen sin su config; backup primero
- Configurar autoload=no en opciones críticas — como
siteurl,home,wp_user_roles; estas DEBEN quedar autoloaded - Confiar en plugins "Optimize Database" a ciegas — a menudo borran demasiado agresivamente
- No medir antes/después — no puedes saber si la limpieza ayudó sin números
Monitoreando crecimiento autoload
Configura un check semanal:
# crontab
0 9 * * 1 wp option list --autoload=on --format=count >> /var/log/autoload-count.log
0 9 * * 1 wp db query "SELECT ROUND(SUM(LENGTH(option_value))/1024/1024, 2) FROM wp_options WHERE autoload = 'yes'" >> /var/log/autoload-size.logSi el tamaño crece 500KB+ en una semana, investiga qué plugin añadió tanto.
Plugins ofensores comunes (2026)
Plugins que rutinariamente vemos causando autoload bloat:
- WPForms — cachea datos de formulario autoloaded
- BackWPup — metadata de jobs de backup
- Yoast Premium — cachés internos
- Extensiones WooCommerce — algunas guardan datos tipo transient autoloaded
- Visual Composer / WPBakery viejos — settings de tema grandes
Audita opciones de estos plugins trimestralmente.
Cuándo llamar a un especialista
Si tu autoload es 10MB+ o ves TTFB consistentemente arriba de 1500ms a pesar de caching, la trampa autoload casi seguro está involucrada. Una auditoría completa de rendimiento de base de datos usualmente encuentra 2-5 problemas separados; la limpieza total toma 1-3 horas.
Diagnóstico de recuperación de velocidad para rendimiento del sitio completo. Para trabajo específico de base de datos ve optimización de base de datos.

