Las filas de sesión son normales: guardan carritos de invitados y caducan. El problema aparece cuando se crean mucho más rápido de lo que se limpian, los bots generan carritos masivos o la salud de tablas e índices vuelve lentas las lecturas.
No trunques la tabla en producción. Vacía carritos activos y oculta el ritmo de crecimiento sin corregirlo.
Mide tamaño y crecimiento
Haz copia y consulta filas, tamaño y expiraciones usando el prefijo real.
SELECT COUNT(*) AS session_rows,
MIN(session_expiry) AS oldest_expiry,
MAX(session_expiry) AS newest_expiry
FROM wp_woocommerce_sessions;
Usa una cuenta autorizada de solo lectura. No copies valores serializados; pueden incluir datos del cliente.
Repite después de un intervalo y compara tráfico normal con campañas. Una cifra aislada no explica la tasa.
Relaciona cada medición con visitas, peticiones de carrito y sesiones caducadas. Si las filas suben durante una campaña y bajan después, la limpieza probablemente funciona; si aumentan de forma continua durante días, hay que investigar el planificador. Comprueba también el tamaño real en disco: borrar registros no siempre devuelve espacio inmediatamente y una tabla fragmentada puede requerir mantenimiento coordinado con el proveedor.
Confirma la limpieza programada
Revisa WooCommerce > Estado > Acciones programadas por tareas atrasadas o fallidas y comprueba WP-Cron.
Una web con poco tráfico y WP-Cron deshabilitado necesita cron real bien configurado. En una tienda grande puede haber backlog por fatals, locks o workers insuficientes.
Repara el planificador antes de borrar filas manualmente; de lo contrario volverán.
Anota la última ejecución correcta y el número eliminado.
Separa tamaño de lentitud
Usa slow query log o métricas del hosting para identificar la consulta costosa. Una tabla grande con índices sanos puede no ser el cuello, mientras disco o índice ausente ralentizan una menor.
Compara el esquema esperado por la versión y examina planes de ejecución. No añadas índices especulativos que choquen con actualizaciones.
Revisa también Action Scheduler y pedidos: el checkout puede culpar a sesiones cuando otra tabla domina.
Busca carritos creados por bots
Los bots pueden llamar add-to-cart, variaciones o checkout abandonado a velocidad de máquina. Compara crecimiento con logs agregados por ruta, frecuencia y user agent.
Aplica límites al patrón abusivo sin bloquear compradores ni buscadores. No pongas un challenge en cada petición de carrito: rompe accesibilidad y callbacks.
Elimina enlaces públicos que disparen add-to-cart involuntariamente.
Revisa la retención personalizada
Plugins o código pueden ampliar la caducidad o almacenar payloads grandes. Busca filtros de expiración y claves de sesión propias.
Guarda solo estado efímero necesario. Las preferencias permanentes pertenecen al perfil del cliente u otro modelo.
Cambiar la duración afecta carritos y marketing; acuerda el periodo con el negocio y privacidad.
Mide tamaño medio y detecta claves anómalas sin exportar contenidos.
Limpia datos caducados con seguridad
Tras copia y reparación del scheduler, usa el mecanismo soportado o elimina únicamente filas demostrablemente expiradas mediante una operación acotada y probada en staging.
Programa en horas de menor tráfico y vigila locks, replicación y disco. No borres filas vigentes para reducir tamaño.
Optimizar tabla puede necesitar espacio temporal y bloquear escrituras según MySQL. Sigue el método del host y prepara reversión.
Divide el trabajo en lotes si el volumen lo exige.
Antes de cada lote cuenta de nuevo las filas que cumplen el criterio y establece un límite de tiempo. Así puedes detener la operación si crecen los locks o la latencia del checkout. Guarda el recuento previo y posterior, no una copia de los datos de sesión, para que la intervención sea auditable sin exponer información del cliente.
Verifica clientes y base de datos
Monitoriza filas, caducadas, latencia y respuesta del checkout. Crea antes un carrito controlado no caducado y confirma que sobrevive.
Completa checkout invitado y comprueba pedido, pago y stock. Una mejora MySQL que rompe carritos no está terminada.
Observa varios ciclos de expiración para demostrar que crecimiento y limpieza se equilibran.
El mantenimiento recurrente debe alertar por tareas fallidas, ritmo anormal, disco y consultas lentas. La salud combina cron, control de bots y mantenimiento MySQL medido.