Ventas

Logo Nicalia
Mejora el wp_options sin romper nada, optimiza la velocidad de tu web correctamente
Volver al blog

Tutorial: Reducir de tamaño la tabla wp_options de WordPress de forma segura

Fran Navoz

Por Fran Navoz en Herramientas online, Nicalia, Recursos gratuitos

06 de junio de 2016

Mejora el wp_options sin romper nada, optimiza la velocidad de tu web correctamente

ACTUALIZADA: 25/5/226

Cómo reducir el tamaño de la tabla wp_options en WordPress sin romper nada

Un Tiempo al Primer Byte (TTFB) inusualmente alto o la aparición intermitente de errores 502 Bad Gateway no siempre apuntan a una falta de recursos de hardware en tu servidor VPS o dedicado. Con frecuencia, el verdadero cuello de botella se oculta en el motor relacional de la base de datos, concretamente dentro de la tabla wp_options. Muchos tutoriales obsoletos se limitan a recomendar el borrado masivo de transients y una optimización superficial a través de phpMyAdmin; sin embargo, WordPress exige un protocolo de diagnóstico estructurado y muy definido para solucionar la sobrecarga de consultas y memoria sin comprometer la estabilidad del entorno de producción. Si eres responsable de un e-commerce, diseñador web o director de tecnología, sabes bien que el rendimiento no se soluciona con trucos de magia, sino con ingeniería.

Qué es la tabla wp_options y cómo afecta al rendimiento

La tabla wp_options es el pilar central del almacenamiento de configuraciones globales, estados lógicos y datos persistentes tanto del núcleo de WordPress como de los temas y plugins instalados. A diferencia de otras tablas de la base de datos relacional que estructuran los metadatos de forma indexada o vertical, wp_options recurre a un diseño plano de clave-valor.

Esta tabla está constituida por cuatro columnas fundamentales: option_id (la clave primaria auto-incremental), option_name (el identificador único de la configuración), option_value (el payload o contenido del ajuste) y autoload (el flag de control de carga dinámica). El descontrol en el volumen físico de esta estructura suele ser el primer causante del aumento sistemático de la velocidad de la web.

La tabla wp_options es el pilar central del almacenamiento de configuraciones globales, estados lógicos y datos persistentes tanto del núcleo de WordPress como de los temas y plugins instalados.

Por qué el autoload puede ralentizar tu web

El campo autoload ejerce un control directo sobre la asignación de memoria RAM del servidor web durante la inicialización de absolutamente cada petición HTTP. Cuando WordPress procesa el ciclo de vida de una solicitud, invoca de manera interna la función wp_load_alloptions(), la cual ejecuta una única consulta consolidada a la base de datos para recuperar todas las filas cuyo estado de carga automática esté activo. El propósito original de esta estrategia de diseño es poblar de inmediato el caché en memoria de la aplicación, evitando llamadas individuales de tipo SELECT a lo largo de la ejecución del código.

El problema real no está únicamente en el tamaño físico global de la tabla wp_options, sino en la acumulación desmedida de datos marcados para cargarse automáticamente en cada petición. Es muy común que desarrolladores de plugins y temas utilicen wp_options de forma inapropiada para guardar grandes payloads, como respuestas JSON extensas provenientes de APIs externas, hojas de estilo CSS compiladas, logs de depuración o estructuras transitorias sin expiración explícita. Al mantener el flag de autoload activo, se obliga al motor de base de datos a transmitir y a la memoria de PHP-FPM a deserializar y retener información masiva que no se requiere para renderizar la página web solicitada, aumentando drásticamente los tiempos de carga.

El exceso de datos autoloaded satura los hilos de ejecución de MySQL y desborda los límites físicos de las herramientas de Object Cache, lo que puede provocar bloqueos completos del servicio bajo entornos de alto tráfico concurrente.

Evolución y el nuevo estandard de autoloading (WordPress 6.4 a 6.7)

Para atajar esta ineficiencia histórica, las versiones recientes de WordPress han transformado por completo el Options API. WordPress 6.4 introdujo la función de recuperación agrupada wp_prime_option_caches() junto con sus funciones envoltura get_options() y wp_prime_option_caches_by_group(). Este cambio de diseño permite a los desarrolladores desactivar de forma segura la carga automática de las opciones de configuración de un plugin, recuperándolas de forma masiva en la base de datos únicamente en las páginas administrativas correspondientes a dicho componente, evitando ralentizar el front-end del sitio web.

Posteriormente, a partir de WordPress 6.6 y 6.7, los antiguos valores binarios en la base de datos (yes y no) fueron declarados obsoletos en favor de un modelo semántico y dinámico mucho más avanzado. La jerarquía lógica actual opera bajo los siguientes estados:

  • on: Fuerza la carga automática obligatoria de la fila en cada solicitud de la plataforma.
  • off: Desactiva la precarga global; el registro solo se recuperará al invocar explícitamente la función get_option().
  • auto o null: Delega en el núcleo de WordPress la decisión de aplicar o no el autoload basándose en el peso físico de la fila.
  • auto-on: Estado dinámico asignado a registros pequeños creados sin un flag explícito, indicando que el sistema ha decidido cargarlos de forma automática.
  • auto-off: Estado dinámico para opciones creadas sin flag explícito pero cuyo volumen físico supera los límites de seguridad (exactamente cuando excede los 150 KB), lo que obliga a WordPress a desactivar automáticamente su precarga para proteger la memoria del servidor.

Mejora el wp_options sin romper nada, optimiza la velocidad de tu web correctamente

Cómo medir el tamaño real del problema

Antes de realizar cualquier modificación o purga destructiva en el motor de almacenamiento relacional de la base de datos, es obligatorio realizar una auditoría técnica completa utilizando herramientas de monitoreo e interfaces de línea de comandos.

Fase 1: Diagnóstico general del tamaño de la base de datos

Es indispensable contrastar el peso de las tablas principales para detectar desviaciones severas. En sitios con un historial largo o plataformas de comercio electrónico, es frecuente que wp_options o wp_postmeta superen con creces el volumen físico de los contenidos reales de la tabla wp_posts.

Fase 2: Cuantificación del volumen acumulado en el autoload

Para determinar el peso exacto que asume PHP-FPM al procesar cada solicitud del sitio web, se debe calcular la suma total del tamaño de los datos autocargados. La siguiente consulta SQL integra todos los flags lógicos tradicionales y modernos para cuantificar la carga real:

SELECT SUM(LENGTH(option_value)) AS autoload_size 
FROM wp_options 
WHERE autoload IN ('yes', 'on', 'auto-on');

Si el resultado de esta consulta supera el umbral crítico de 1 MB, se activará de forma inmediata la advertencia de rendimiento dentro de la herramienta de Salud del Sitio de WordPress. En entornos optimizados de alto rendimiento, conviene vigilar la base de datos especialmente cuando los datos autoloaded superan los 800 KB para actuar preventivamente.

Fase 3: Identificación de los registros ofensores

Para aislar con exactitud cuáles son las opciones específicas que están consumiendo la memoria del servidor, ejecutamos una consulta orientada a listar de forma descendente los registros de mayor peso físico configurados con carga automática:

SELECT option_name, LENGTH(option_value) AS option_size 
FROM wp_options 
WHERE autoload IN ('yes', 'on', 'auto-on') 
ORDER BY option_size DESC 
LIMIT 20;

Fase 4: Auditoría avanzada mediante WP-CLI

Para ingenieros de sistemas y técnicos que operan directamente desde la terminal, la interfaz de línea de comandos WP-CLI permite evaluar los límites de seguridad de la tabla de forma ágil desde el directorio raíz de la instalación:

wp option list --autoload=on --format=total_bytes

Este comando emite un diagnóstico preciso, notificando si el peso total supera los estándares del servidor. Complementariamente, es viable monitorizar el impacto de consultas lentas superiores a 0.1 segundos utilizando herramientas en tiempo de ejecución como la extensión Query Monitor o sistemas de monitoreo APM empresariales como New Relic.

Qué opciones puedes limpiar con seguridad en tu base de datos

La depuración física de la tabla wp_options requiere de precisión quirúrgica para liberar espacio de almacenamiento sin alterar las configuraciones activas del sitio web. El foco debe ponerse en la eliminación controlada de residuos y transitorios obsoletos.

1. Limpieza quirúrgica de transitorios (transients) expirados

Los transients funcionan como registros temporales de caché interna en la base de datos. Debido a limitaciones en el diseño nativo del núcleo de WordPress, la expiración del transitorio no ejecuta de forma automática una llamada para su eliminación física; las filas obsoletas solo se limpian si la aplicación intenta consultarlas nuevamente de forma explícita mediante la función get_transient(). Si un plugin es desactivado, sus transitorios asociados permanecerán indefinidamente en la base de datos.

Muchos administradores cometen el grave error de ejecutar un borrado masivo a ciegas de todas las filas transitorias. Borrar transients activos provoca un pico severo de consumo de CPU, ya que la web se ve forzada a regenerar todos esos datos de forma simultánea, llamando a APIs externas o ejecutando consultas pesadas. Para purgar de forma selectiva únicamente los transitorios que ya han expirado de acuerdo con su marca de tiempo Unix, garantizando una depuración segura y sin riesgos de rendimiento, debes utilizar la siguiente consulta avanzada basada en una unión lógica de coincidencia de claves:

DELETE a, b FROM wp_options a, wp_options b 
WHERE a.option_name LIKE '_transient_%' 
AND a.option_name NOT LIKE '_transient_timeout_%' 
AND b.option_name = CONCAT('_transient_timeout_', SUBSTRING(a.option_name, 12)) 
AND b.option_value < UNIX_TIMESTAMP();

Si prefieres automatizar esta tarea desde la línea de comandos sin interactuar con la consola de MySQL, WP-CLI ofrece un atajo de inmenso valor para perfiles técnicos y administradores de sistemas que deseen limpiar la base de datos en un segundo:

wp transient delete --expired

En escenarios de depuración extrema o tras migraciones estructurales complejas donde requieras limpiar por completo la caché temporal para mitigar conflictos de código, puedes forzar la purga absoluta ejecutando:

wp transient delete --all

El superpoder de Redis sobre los transients: Un factor crucial a tener en cuenta al implementar caché de objetos persistente (como Redis o Memcached) es que los transients modifican por completo su ciclo de vida físico. Al activar estas tecnologías en tu infraestructura, las funciones nativas de WordPress interceptan las llamadas de almacenamiento y desvían los transitorios para que vivan exclusivamente dentro de la memoria RAM del servidor. Como consecuencia directa, los transients dejan de escribirse y acumularse en la tabla física wp_options de MySQL, deteniendo de raíz el bloat o engrosamiento de la base de datos relacional.

2. Identificación de basura real de plugins desinstalados

Los componentes retirados suelen dejar tras de sí un volumen masivo de datos persistentes. Antes de ejecutar cualquier sentencia de eliminación, es fundamental conectarse mediante protocolos seguros (SFTP/SSH) al directorio /wp-content/plugins/ y comprobar que las carpetas de dichos componentes ya no existen en el sistema de archivos. Al auditar el autoload, es frecuente encontrar firmas de “infractores” comunes:

  • 301_redirects: Historiales de redirecciones acumulados, logs de reescritura y configuraciones pesadas que ciertos plugins gratuitos de SEO o gestión de enlaces dejan de forma huérfana en la base de datos tras ser removidos de la plataforma.
  • wpurp_custom_template_%: Plantillas personalizadas y fragmentos de código estructural pertenecientes al plugin WP Ultimate Recipe que persisten en el sistema incluso si ya no se utiliza la extensión en el servidor.
  • um_cache_userdata_%: Claves de caché de perfiles de usuario generadas dinámicamente por el plugin de membresías Ultimate Member. Estas inflan la tabla de manera desmedida y deben purgarse directamente desde los ajustes avanzados de su panel interno para prevenir su regeneración descontrolada.
  • transient_beehive%: Registros temporales y cachés redundantes inyectadas por el plugin de analítica Beehive Pro que no cuentan con rutinas de autodestrucción eficientes.

Para remover físicamente este tipo de residuos tras validar su procedencia, se emplean consultas estructuradas dirigidas:

DELETE FROM wp_options WHERE option_name LIKE 'wpurp_custom_template_%';

Qué opciones no deberías tocar bajo ninguna circunstancia

Una limpieza demasiado agresiva sin verificar el origen de los datos puede corromper el sitio web de manera irreversible. Existen registros críticos dentro de wp_options que jamás deben ser eliminados ni modificados de forma manual:

  • Opciones esenciales del núcleo (Core Options): Claves como siteurl, home, blogname, active_plugins, template, stylesheet y wp_user_roles son vitales para el enrutamiento de URLs, la carga del tema activo, los permisos de usuarios y la inicialización del sitio. Su eliminación corromperá el acceso a la plataforma de inmediato.
  • Ajustes de plugins en uso: Configuraciones estructurales que guardan las credenciales de pasarelas de pago activos, configuraciones de seguridad de cortafuegos o datos de constructores visuales en producción.

Por seguridad, antes de hacer cualquier modificación de tipo destructivo sobre el motor de almacenamiento, es un requisito ineludible obligatorio generar una copia de seguridad (backup) completa de la base de datos.

Nivel pro para tiendas e-commerce: optimización avanzada en WooCommerce

Las plataformas de comercio electrónico gestionadas mediante WooCommerce sufren una susceptibilidad crítica de degradación debido a la rápida acumulación de datos temporales dinámicos de los clientes.

El problema de las sesiones huérfanas

WooCommerce almacena el estado de navegación de los visitantes, los carritos activos y los códigos de cupón temporales en la tabla wp_options bajo las claves _wc_session_xxx y _wc_session_expires_xxx. Bajo configuraciones específicas del servidor (como tener el WP-Cron nativo desactivado permanentemente mediante wp-config.php sin una alternativa real configurada a nivel de sistema operativo , o sufrir un rastreo agresivo de bots de spam que generan una sesión nueva por cada URL indexada), las sesiones expiradas dejan de limpiarse y se acumulan por decenas de miles, ralentizando el acceso general de los compradores.

Si la tabla ha alcanzado un tamaño tan crítico que los intentos de limpieza desde el panel administrativo fallan debido a limitaciones de tiempo de ejecución de PHP, se debe aplicar una purga masiva directa desde la base de datos:

DELETE FROM wp_options WHERE option_name LIKE '_wc_session_%';

La transición arquitectónica hacia HPOS (High-Performance Order Storage)

Para resolver la degradación de rendimiento a largo plazo de una tienda online, la decisión de ingeniería más recomendada consiste en realizar la transición hacia el sistema de almacenamiento de pedidos de alto rendimiento (HPOS). Por defecto, WooCommerce almacena el histórico de pedidos, facturas e información de transacciones dentro de la tabla general de metadatos de WordPress (wp_postmeta), forzando la inyección de múltiples filas verticales por cada transacción efectuada.

Al habilitar la función HPOS desde los ajustes internos del sistema, WooCommerce migra de forma limpia toda esta información histórica estructurada hacia tablas dedicadas de pedidos de uso exclusivo (como wc_orders o wc_order_addresses). Esta separación arquitectónica reduce drásticamente el volumen de transacciones de lectura y escritura sobre las tablas compartidas de WordPress, aislando el núcleo operativo del sitio de posibles bloqueos lógicos en la base de datos.

Herramientas de limpieza y el impacto de tu infraestructura de hosting

Para entornos donde se prefiere evitar la ejecución directa de comandos SQL, existen plugins de optimización y limpieza reputados en el directorio oficial de WordPress. No obstante, la compatibilidad y seguridad de estas herramientas varían de forma sustancial según la infraestructura de alojamiento utilizada:

  • Advanced Database Cleaner y WP-Sweep: Son herramientas ideales para categorizar minuciosamente las opciones huérfanas, los transitorios activos y las tablas remanentes de plugins desinstalados. WP-Sweep destaca especialmente porque realiza tareas de limpieza respetando de forma estricta las funciones lógicas nativas del núcleo de WordPress para evitar inconsistencias de datos.
  • Advertencia crítica sobre WP-Optimize: Aunque es una solución integrada todo en uno muy popular, debes tener en cuenta que en entornos de hosting administrado especializado, las funciones de optimización estructural de tablas InnoDB son bloqueadas o resultan incompatibles de forma automática. Esto se debe a que el proveedor ya gestiona estas tareas de mantenimiento de forma directa a nivel de servidor. En dichos escenarios, el uso de WP-Sweep es significativamente más seguro y compatible.
  • Transient Cleaner: Una alternativa excelente y especializada de forma exclusiva si el administrador únicamente desea buscar y eliminar sistemáticamente transitorios expirados de forma segura mediante procesos automatizados sin intervenir en ningún otro parámetro de la base de datos.

Prevención estructural: índices compuestos y compactación de datos

Una vez ejecutada la limpieza y el saneamiento lógico de la tabla wp_options, se deben implementar estrategias técnicas a nivel de infraestructura para acelerar de forma sostenida los tiempos de respuesta del sitio.

Adición de un índice compuesto optimizado

Las instalaciones nativas de WordPress suelen indexar la columna autoload de manera simple, lo cual resulta ineficiente debido a su baja cardinalidad (los únicos estados disponibles son variaciones de afirmación y negación). Para lograr una mejora significativa de rendimiento y evitar que el motor de la base de datos tenga que realizar un escaneo completo de la tabla (Full Table Scan) en cada consulta de opciones, se recomienda añadir un índice compuesto que fusione de forma bidimensional el estado del autoload y el nombre de la opción:

ALTER TABLE wp_options ADD INDEX wp_options_autoload_option_name (autoload, option_name);

Este índice compuesto permite al motor relacional de la base de datos filtrar y entregar de forma instantánea el conjunto de opciones con carga automática activa sin necesidad de evaluar de manera secuencial la totalidad de las filas de la tabla.

Nota sobre la indexación: Al implementar esto, debes considerar el principio de balance en motores SQL: los índices aceleran drásticamente las lecturas (operaciones SELECT), pero añaden un pequeño overhead matemático en los tiempos de escritura (operaciones INSERT, UPDATE y DELETE), ya que MySQL se ve obligado a actualizar el árbol del índice indexado con cada nuevo registro en el disco físico. En la tabla wp_options, este intercambio técnico es sumamente favorable, dado que las consultas de lectura superan de forma masiva a las transacciones de escritura durante el ciclo de vida ordinario de la aplicación.

Compactación física de datos reclamando espacio en disco

Debido a los mecanismos operativos del motor de almacenamiento InnoDB de MySQL y MariaDB, la eliminación masiva de registros lógicos en una tabla de base de datos no reduce de manera automática el peso físico de los archivos guardados en el disco duro del servidor. En su lugar, el espacio previamente ocupado por los registros eliminados se mantiene en un estado de fragmentación interna para futuras inserciones de datos. Para reconstruir de forma física la tabla wp_options, optimizar sus índices, recuperar el espacio en disco liberado y compactar la estructura interna de archivos, se debe ejecutar la siguiente instrucción SQL:

OPTIMIZE TABLE wp_options;

Dado que esta consulta bloquea de forma temporal el acceso de escritura a la tabla mientras se genera una copia limpia y reordenada en el disco del servidor, se recomienda encarecidamente programar su ejecución durante periodos de mantenimiento del sistema o de bajo tráfico concurrente en la web.

Mantener una base de datos optimizada requiere un monitoreo constante de la infraestructura de sistemas. En Nicalia ponemos a tu disposición nuestra infraestructura optimizada de hosting de alta gama junto con un equipo de soporte técnico especializado, capacitado para auditar, limpiar y acelerar tu entorno WordPress con total seguridad y sin interrumpir tus operaciones comerciales.

Fran Navoz | Especialista en marketing digital

👉🏻LinkedIn
👉🏻Hubspot
👉🏻Google
👌🏻 Compromiso y trabajo | ✉️ Contacto
Fran Navoz