Optimizar la base de datos de PrestaShop para acelerar tu tienda
¿Tu tienda PrestaShop va lenta? ¿Las páginas tardan una eternidad en cargar y las conversiones están cayendo en picado? Respira. No necesitas ser un gurú de la programación para solucionarlo. En la mayoría de los casos, el cuello de botella no está en tu conexión ni en el tema, sino en algo más profundo: la base de datos.
PrestaShop es un software potente, pero muy "hablador". Cada clic de un cliente genera decenas de consultas a MySQL. Si esas consultas son lentas o las tablas están llenas de basura, el servidor se ahoga. En esta guía extensa y práctica, vamos a limpiar, optimizar y acelerar tu tienda desde la raíz. Olvídate de los tecnicismos complejos; te lo explico paso a paso, como si estuviéramos tomando un café.
¿Por qué mi PrestaShop va tan lento? El drama de las tablas
Imagina que tu base de datos es un gigantesco almacén. Cada tabla es una estantería. Cuando un cliente entra a tu web, el sistema corre a buscar productos, precios, stock e historiales en esas estanterías.
Con el tiempo, ese almacén se llena de cajas vacías, papeles rotos y duplicados. Eso es exactamente lo que pasa con tu MySQL: se acumulan registros huérfanos, sesiones caducadas y consultas redundantes.
El problema no es solo el espacio en disco. El verdadero drama es que MySQL tiene que leer archivos más grandes de lo necesario para encontrar un simple dato. Esto consume memoria RAM y CPU, lo que se traduce en tiempos de carga eternos.
Señales de que tu base de datos necesita una cura
Antes de ponernos manos a la obra, identifica si sufres alguno de estos síntomas:
- El Panel de Administración tarda más de 10 segundos en abrir.
- La página de inicio carga rápido, pero el carrito o la búsqueda es lentísima.
- Recibes errores de "Error de conexión con la base de datos" en horas punta.
- El uso de CPU del servidor está al 100% sin motivo aparente.
Si has dicho "sí" a al menos dos, sigue leyendo. Vamos a solucionarlo.
Paso 1: La limpieza profunda de MySQL (El primer gran impulso)
No vamos a tocar archivos de configuración todavía. Primero, la limpieza. PrestaShop guarda mucha información que no sirve para nada. Vamos a por ella.
1.1. Eliminar las sesiones antiguas (Las cajas vacías)
Cada visitante que entra a tu web genera una sesión. Si no compra, esa sesión se queda ahí para siempre. Con el tiempo, son miles de filas inútiles.
Accede a phpMyAdmin (normalmente desde el panel de control de tu hosting o Syspanel). Selecciona tu base de datos de PrestaShop y ve a la pestaña SQL.
Ejecuta este comando. Es como pasar la escoba:
DELETE FROM ps_connections WHERE date_add < NOW() - INTERVAL 30 DAY;
DELETE FROM ps_connections_page WHERE time_start < NOW() - INTERVAL 30 DAY;
DELETE FROM ps_connections_source WHERE date_add < NOW() - INTERVAL 30 DAY;
[TIP] Si tu prefijo de tablas no es
ps_, cámbialo. Lo puedes ver en el archivoconfig/settings.inc.php(en versiones antiguas) o enapp/config/parameters.php(en versiones nuevas). Buscadatabase_prefix.
1.2. Vaciar la tabla de carritos abandonados
Los carritos abandonados son oro para el marketing, pero mantenerlos en la base de datos activa ralentiza las consultas de los carritos activos.
Ejecuta:
DELETE FROM ps_cart WHERE date_add < NOW() - INTERVAL 90 DAY;
Esto borra los carritos de hace más de 3 meses. Si haces email marketing, exporta antes los datos. Pero para el rendimiento, es vital.
1.3. Limpiar los mensajes de error y logs
PrestaShop guarda cada error que ocurre. Si tu web ha tenido problemas, hay cientos de filas.
TRUNCATE TABLE ps_log;
[WARNING]
TRUNCATEborra todo el contenido de la tabla al instante. Úsalo solo en tablas de logs o sesiones, nunca en tablas de productos o pedidos.
Paso 2: Optimizar las tablas (La reorganización del almacén)
Después de borrar la basura, los huecos quedan vacíos. Es como un disco duro fragmentado. Para que MySQL lea rápido, debemos compactar las tablas.
Este proceso es seguro y no borra datos. Simplemente reorganiza los archivos físicos.
2.1. Optimización manual con phpMyAdmin
En phpMyAdmin, selecciona todas las tablas de tu base de datos (clic en "Seleccionar todo") y en el menú desplegable elige Optimizar tabla.
Esto ejecutará un OPTIMIZE TABLE en cada una. Es como desfragmentar el disco duro de tu tienda.
2.2. Optimización avanzada con comandos SQL
Si prefieres la terminal (SSH) o quieres hacerlo más rápido, usa este comando:
OPTIMIZE TABLE ps_product, ps_product_lang, ps_stock_available;
[INFO] No optimices todas las tablas a la vez en horas punta. El proceso bloquea temporalmente las tablas. Hazlo a las 4 de la mañana o cuando tengas pocos visitantes.
Paso 3: La configuración mágica de MySQL (Acelerar prestashop desde el núcleo)
Ahora viene la parte jugosa. PrestaShop no es rápido por defecto; necesita que le des caña. Vamos a ajustar el motor de base de datos.
3.1. El tamaño del búfer (InnoDB Buffer Pool)
Este es el parámetro más importante. MySQL cachea los datos en la RAM. Si el buffer es pequeño, lee del disco constantemente.
Edita el archivo de configuración de MySQL: my.cnf (o my.ini en Windows). Normalmente está en /etc/mysql/.
Busca estas líneas y ajústalas:
[mysqld]
innodb_buffer_pool_size = 1G
¿Cuánto poner? La regla general es el 70% de tu RAM total si solo tienes MySQL en el servidor. Si tienes 2GB de RAM, pon 1.5G. Si tienes 4GB, pon 3G.
[WARNING] Si pones un valor demasiado alto y tu servidor no tiene suficiente RAM, MySQL no arrancará o el sistema se quedará sin memoria. Empieza con un valor prudente y ve subiendo.
3.2. La caché de consultas (Query Cache)
Aunque en MySQL 8 se eliminó, si usas MariaDB (muy común en Hosting) o MySQL 5.7, activa esto:
query_cache_type = 1
query_cache_size = 128M
Esto guarda el resultado de las consultas repetitivas. Si 100 personas ven el mismo producto, la consulta solo se ejecuta una vez.
3.3. El límite de conexiones y el buffer de cada una
Cuando tu tienda recibe muchos visitantes, MySQL necesita gestionar muchas conexiones.
max_connections = 150
thread_cache_size = 64
Paso 4: La caché interna de PrestaShop (El turbo definitivo)
No basta con optimizar MySQL; PrestaShop necesita que le digas cómo comportarse. Vamos a su panel de administración.
4.1. Activar la caché de rendimiento
Ve a Parámetros Avanzados > Rendimiento.
- Cache: Actívala y elige "Sistema de archivos" (File System) si tu hosting es básico. Si tienes Memcached o Redis instalado, elige esa opción (es más rápida).
- Cache de combinación de plantillas: Actívala.
- Cache de Smarty: Actívala.
[TIP] Si usas un panel como Syspanel (accesible en el puerto 2106), puedes instalar Redis con un clic desde la sección de "Aplicaciones". Esto dará un subidón brutal a la caché.
4.2. Desactivar lo que no usas
En Parámetros Avanzados > Rendimiento, baja hasta:
- Desactivar el modo de compatibilidad con versiones anteriores: Si tu tema es moderno, desactívalo.
- Combinar JavaScript y CSS: Actívalo para reducir peticiones HTTP.
Paso 5: El mantenimiento automático (La rutina de salud)
No basta con hacerlo una vez. Debes programar la limpieza.
5.1. Crear un cron job para limpiar sesiones
Edita tu crontab (en Syspanel o vía SSH):
0 3 * * * mysql -u usuario -pcontraseña nombredb -e "DELETE FROM ps_connections WHERE date_add < NOW() - INTERVAL 7 DAY;"
5.2. Script de optimización semanal
Crea un archivo .sh con las consultas del Paso 1 y 2, y prográmalo para que se ejecute cada domingo.
0 4 * * 0 /ruta/a/tu/script/optimizar.sh
Paso 6: El extra de los expertos (Tablas específicas)
Si tu tienda sigue lenta, hay tablas que suelen ser un dolor de cabeza. Vamos a afinar más.
6.1. Tabla ps_search_index (El índice de búsqueda)
Si tu buscador interno es lento, reconstruye el índice.
En el panel de PrestaShop: Parámetros Avanzados > Rendimiento > Reconstruir índice de búsqueda.
6.2. Tabla ps_stock_available
Si tienes muchos productos, esta tabla se vuelve gigante. Ejecuta:
OPTIMIZE TABLE ps_stock_available;
6.3. Eliminar combinaciones huérfanas
A veces quedan combinaciones de producto que no existen. Esto ralentiza la carga de la ficha de producto.
DELETE pa FROM ps_product_attribute pa LEFT JOIN ps_product p ON pa.id_product = p.id_product WHERE p.id_product IS NULL;
Preguntas Frecuentes (FAQ)
¿Es seguro ejecutar estos comandos SQL en mi base de datos?
Sí, siempre que hagas una copia de seguridad antes. Los comandos de DELETE son destructivos, pero solo eliminan datos antiguos o temporales (sesiones, logs, carritos viejos). Nunca borran pedidos ni clientes.
¿Cuánto tiempo tardaré en ver la mejora?
Inmediato. En el momento en que optimices las tablas y liberes espacio, las consultas serán más rápidas. La activación de la caché de PrestaShop suele dar una mejora del 50% en el tiempo de carga.
¿Necesito ser un experto en Linux para tocar el my.cnf?
No, pero debes tener cuidado. Si editas el archivo y pones un valor incorrecto, MySQL no arrancará. Siempre guarda una copia del archivo original antes de editarlo. Si usas un hosting compartido, no podrás tocar este archivo; en ese caso, contacta con el soporte y pídeles que aumenten el innodb_buffer_pool_size.
Mi hosting usa Syspanel, ¿cómo accedo a phpMyAdmin?
Muy fácil. Entra en Syspanel (recuerda, el acceso es a través del puerto 2106). Busca la sección de "Bases de Datos" o "MySQL". Allí verás un botón que dice "phpMyAdmin". Haz clic y listo.
¿Y si uso MariaDB en lugar de MySQL?
Perfecto. Todos los comandos de este artículo funcionan igual en MariaDB. De hecho, MariaDB suele ser más rápido en entornos de bajo presupuesto.
¿La optimización de base de datos es lo único que necesito para acelerar PrestaShop?
No. Es el 70% del trabajo, pero también debes optimizar las imágenes (usar WebP), activar la compresión Gzip y usar una CDN. Sin embargo, sin una base de datos limpia, todo lo demás será en vano.
Conclusión: Tu tienda merece ser rápida
Optimizar la base de datos de PrestaShop no es un lujo, es una necesidad. Un segundo de retraso en la carga puede costarte una venta. Con estos pasos, has limpiado la basura, compactado las tablas, ajustado la memoria de MySQL y activado la caché interna.
Tu tienda ahora debería volar. Pero no lo dejes aquí. Programa el mantenimiento automático y revisa los logs cada semana. La velocidad no es un destino, es un hábito.
Si has llegado hasta aquí, ya sabes más que el 90% de los dueños de tiendas online. Ahora ve y ponlo en práctica. Tu servidor (y tus clientes) te lo agradecerán.
[INFO] Si después de todo esto tu tienda sigue lenta, el problema puede estar en tu hosting. Si compartes servidor con webs que consumen muchos recursos, no hay optimización que valga. Considera migrar a un plan VPS o dedicado gestionado con Syspanel para tener control total sobre MySQL.
