Introduccion
Con el tiempo, cualquier instalación de PrestaShop acumula una gran cantidad de información innecesaria: carritos abandonados, registros de logs obsoletos, datos temporales o “transients” que afectan el rendimiento general de la tienda. Estos datos huérfanos no solo ocupan espacio en la base de datos, sino que también pueden ralentizar consultas, afectar la velocidad del back-office y entorpecer tareas de mantenimiento.
En este artículo aprenderás cómo identificar, analizar y eliminar datos huérfanos en PrestaShop usando MySQL y algunas funciones en PHP.
Índice
Introducción 1. ¿Qué son los datos huérfanos y por qué eliminarlos? 2. Limpieza de carritos abandonados 3. Eliminación de logs antiguos y errores 4. Datos temporales: caché, transients y tokens 5. Consultas SQL seguras para limpieza masiva 6. Automatización con PHP y tareas cron 7. Comparativa: limpieza manual vs automática Conclusión- ¿Qué son los datos huérfanos y por qué eliminarlos?
Los datos huérfanos son registros en la base de datos que ya no tienen una relación útil con el resto del sistema. Entre los más comunes en PrestaShop:
- Carritos abandonados sin conversión
- Registros de conexión de usuarios antiguos
- Logs de errores, hooks y actualizaciones
- Caché interna de módulos
- Tokens de sesiones expiradas
¿Por qué deberías limpiarlos?
Motivo | Impacto |
Tamaño de la base de datos | Reduce peso hasta un 40% en tiendas grandes |
Velocidad del back-office | Mejora respuesta en listados y edición |
Backup más ligero | Copias de seguridad más rápidas |
Menor carga del servidor | Menos lecturas innecesarias |
- Limpieza de carritos abandonados
PrestaShop guarda los carritos aunque no lleguen a convertirse en pedido. Puedes eliminarlos con esta consulta:
DELETE FROM ps_cart
WHERE id_cart NOT IN (SELECT id_cart FROM ps_orders)
AND date_add < NOW() - INTERVAL 30 DAY;
Recomendación: conservar solo los últimos 30 días por si se usan en remarketing.
Para limpiar los productos de esos carritos:
DELETE FROM ps_cart_product
WHERE id_cart NOT IN (SELECT id_cart FROM ps_cart);
. Eliminación de logs antiguos y errores
Logs en tablas como ps_log, ps_connections, ps_guest, ps_mail pueden crecer sin límite.
Ejemplos:
DELETE FROM ps_connections WHERE date_add < NOW() - INTERVAL 90 DAY;
DELETE FROM ps_log WHERE date_add < NOW() - INTERVAL 60 DAY;
DELETE FROM ps_mail WHERE date_add < NOW() - INTERVAL 180 DAY;
Puedes automatizar esta limpieza mensualmente.
- Datos temporales: caché, transients y tokens
Algunas tablas guardan datos efímeros que pueden eliminarse sin riesgos:
- ps_smarty_cache y ps_smarty_lazy_cache: para cache de plantilla
- ps_connections_page: páginas visitadas sin conversión
- ps_employee_session: tokens expirados de administración
Limpieza:
TRUNCATE ps_smarty_cache;
TRUNCATE ps_smarty_lazy_cache;
DELETE FROM ps_employee_session WHERE date_upd < NOW() - INTERVAL 7 DAY;
- Consultas SQL seguras para limpieza masiva
Puedes agrupar varias consultas en un script SQL o ejecutarlas desde phpMyAdmin. Asegúrate siempre de:
- Hacer un backup antes
- Usar condiciones con INTERVAL y WHERE claras
- Probar primero con SELECT COUNT(*)
Ejemplo de precaución:
SELECT COUNT(*) FROM ps_cart WHERE date_add < NOW() - INTERVAL 30 DAY;
- Automatización con PHP y tareas cron
Puedes programar tareas de limpieza automáticas:
<?php
require(dirname(__FILE__).'/config/config.inc.php');
require(dirname(__FILE__).'/init.php');
Db::getInstance()->execute('DELETE FROM ps_cart WHERE id_cart NOT IN (SELECT id_cart FROM ps_orders) AND date_add < NOW() - INTERVAL 30 DAY');
Db::getInstance()->execute('TRUNCATE ps_smarty_cache');
echo "Limpieza ejecutada.";
?>
Y programarlo cada semana:
0 4 * * 1 php /var/www/limpieza.php
- Comparativa: limpieza manual vs automática
Enfoque | Ventajas | Inconvenientes |
Manual vía SQL | Más control, revisión previa | Requiere acceso técnico |
PHP automático + cron | Se ejecuta periódicamente | Menos visibilidad del proceso |
Módulos de limpieza | Interfaz amigable, logs | Pueden tener coste, menor flexibilidad |
Conclusión
Limpiar datos huérfanos en PrestaShop no solo mejora el rendimiento, sino que previene problemas futuros relacionados con espacio, consultas lentas o sobrecarga del servidor. Una estrategia de limpieza periódica (mensual o semanal) combinada con monitoreo te asegurará una tienda más rápida, estable y optimizada.