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.

  1. ¿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

  1. 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.

  1. 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;
  1. 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;
  1. 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

  1. 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.

Ir al contenido