Cómo optimizar la base de datos de PrestaShop: guía de mantenimiento
¿Por qué es importante optimizar la base de datos de PrestaShop?
Si tu tienda online va lenta, tarde o temprano notarás que las páginas tardan en cargar, el panel de administración se bloquea o incluso recibes errores como "Error de conexión con la base de datos". El motivo más común no es el hosting, sino una base de datos desordenada y llena de información basura.
Cada vez que un cliente visita tu tienda, PrestaShop realiza consultas a la base de datos para mostrar productos, precios, carritos, sesiones y estadísticas. Si esa base de datos está llena de registros obsoletos, tablas fragmentadas o datos de seguimiento acumulados durante meses, el servidor tarda más en responder. Por eso, optimizar base de datos PrestaShop no es un lujo, es una necesidad de mantenimiento básico.
En esta guía te explicaré paso a paso cómo realizar un mantenimiento completo de tu base de datos, incluso si no eres un experto técnico. Hablaremos de limpiar tablas, optimizar índices, configurar correctamente MySQL y automatizar tareas para que tu tienda vuelva a volar.
¿Qué causa que una base de datos de PrestaShop se vuelva lenta?
Antes de ponernos manos a la obra, es importante entender qué está sucediendo dentro de tu base de datos. PrestaShop almacena mucha más información de la que imaginas:
- Sesiones de visitantes que se guardan aunque el usuario ya se haya ido.
- Carritos abandonados que nunca se limpian.
- Historial de pedidos y sus estados intermedios.
- Tablas de estadísticas que registran cada visita, página vista y origen de tráfico.
- Mensajes de contacto antiguos.
- Registros de errores que se acumulan sin control.
- Tablas temporales que quedan huérfanas tras una actualización fallida.
Cada una de estas tablas crece día a día. A los seis meses de funcionamiento, una tienda con poco tráfico puede tener miles de registros innecesarios. A los dos años, millones. Esto hace que cada consulta SQL tarde más, y el problema se agrava si tu proveedor de hosting no ha configurado correctamente MySQL.
Preparación previa: copia de seguridad obligatoria
[WARNING] Antes de tocar cualquier tabla de tu base de datos, haz una copia de seguridad completa. Una mala consulta o un borrado incorrecto puede dejar tu tienda inservible. No te saltes este paso.
Para hacer la copia, tienes varias opciones:
- Desde el panel de control de tu hosting (cPanel, Syspanel, Plesk, etc.): busca la sección "Copias de seguridad" o "Backup" y selecciona la base de datos de PrestaShop.
- Desde phpMyAdmin: accede a tu base de datos, haz clic en "Exportar" y elige el método rápido. Descarga el archivo .sql a tu ordenador.
- Con un módulo de PrestaShop: hay módulos gratuitos que automatizan copias de seguridad y las envían a tu correo o a un servicio en la nube.
Guarda esa copia en un lugar seguro. Si algo sale mal, podrás restaurarla desde phpMyAdmin o desde el panel de tu hosting. No continúes sin tener esta red de seguridad.
Paso 1: Activar el modo mantenimiento de PrestaShop
Mientras trabajas en la base de datos, es recomendable que tu tienda esté en modo mantenimiento. Así evitas que clientes reales entren y generen nuevas sesiones o pedidos mientras manipulas las tablas.
Para activarlo:
- Ve a Parámetros avanzados > Mantenimiento.
- Marca la opción "Activar el modo mantenimiento".
- Añade tu IP en el campo correspondiente para poder seguir accediendo tú a la tienda.
- Guarda los cambios.
No lo olvides desactivar al finalizar el mantenimiento.
Paso 2: Limpiar tablas innecesarias de PrestaShop
El siguiente paso es eliminar la basura acumulada. PrestaShop no limpia automáticamente muchas de sus tablas, así que tendrás que hacerlo manualmente o con módulos. Aquí tienes las tablas más problemáticas y cómo limpiarlas.
### Limpiar la tabla de sesiones: ps_connections y ps_connections_page
Estas tablas registran cada visita y cada página vista. Con el tiempo acumulan cientos de miles de registros. Puedes vaciarlas por completo, no afectará al funcionamiento de tu tienda, solo perderás estadísticas antiguas de conexiones.
Desde phpMyAdmin, ejecuta:
TRUNCATE TABLE ps_connections;
TRUNCATE TABLE ps_connections_page;
### Limpiar la tabla de carritos abandonados: ps_cart
Los carritos que no se convirtieron en pedido se quedan almacenados. Puedes eliminarlos si tienen más de 30 días. Primero, revisa cuántos hay:
SELECT COUNT(*) FROM ps_cart WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY);
Si te parece bien, bórralos:
DELETE FROM ps_cart WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY);
### Limpiar estadísticas antiguas: ps_statssearch, ps_theme, ps_guest
Estas tablas guardan búsquedas internas de tus clientes y datos de visitantes anónimos. No son críticas. Puedes truncarlas:
TRUNCATE TABLE ps_statssearch;
TRUNCATE TABLE ps_guest;
### Limpiar mensajes de contacto y soporte
La tabla ps_customer_message y ps_customer_thread acumulan conversaciones. Si no necesitas conservarlas, puedes borrar las que tengan más de un año. Consulta primero con una sentencia SELECT para ver cuántas son y luego borra.
Paso 3: Optimizar las tablas restantes
Una vez limpiada la basura, toca optimizar las tablas que se han quedado con huecos y fragmentación. Esto no borra datos, solo reorganiza el almacenamiento físico para que las consultas sean más rápidas.
En phpMyAdmin, sigue estos pasos:
- Selecciona tu base de datos en el panel izquierdo.
- Haz clic en la pestaña "Operaciones" o "Operations" en la parte superior.
- Busca la sección "Optimizar tabla" o "Optimize table".
- Elige la opción "Optimizar todas las tablas" si está disponible.
También puedes ejecutar el comando SQL directamente:
OPTIMIZE TABLE ps_product, ps_product_lang, ps_stock_available, ps_orders;
Este comando es seguro y no bloquea la tienda durante mucho tiempo. Eso sí, en tablas muy grandes puede tardar unos segundos. Es recomendable hacerlo al menos una vez al mes.
Paso 4: Configurar correctamente MySQL para PrestaShop
El rendimiento de tu base de datos no depende solo de limpiarla, sino de cómo está configurado el servidor MySQL. Si tienes acceso al archivo de configuración my.cnf o my.ini, puedes ajustar estos parámetros:
- innodb_buffer_pool_size: el más importante. Debe ocupar entre el 70% y el 80% de la memoria RAM disponible del servidor. Si tu hosting tiene 4 GB de RAM, ponlo en 3 GB.
- query_cache_size: si usas MySQL 5.7 o inferior, actívalo con un valor de 64 MB o 128 MB. En MySQL 8 ya está obsoleto, así que no lo toques.
- tmp_table_size y max_heap_table_size: súbelos a 64 MB para que las consultas temporales no se escriban en disco.
- max_connections: déjalo en 100 o 150 como máximo si es un hosting compartido.
[INFO] Si tu hosting es compartido, no podrás tocar estos parámetros. En ese caso, contacta con tu proveedor y pídeles que optimicen MySQL para PrestaShop. Si usas un VPS y tienes Syspanel (acceso por el puerto 2106), puedes editar estos valores desde el panel o por SSH.
Paso 5: Activar el caché de PrestaShop
Una buena parte del rendimiento de PrestaShop depende de su sistema de caché. Si no lo tienes activado, cada visita genera consultas a la base de datos innecesarias.
Para activarlo:
- Ve a Parámetros avanzados > Rendimiento.
- Activa la opción "Caché" y elige "Sistema de archivos" o "Memcached" si tu hosting lo soporta.
- En "Combinar JavaScript" y "Combinar CSS", activa también las opciones de compresión.
- Guarda los cambios.
Con el caché activado, las páginas se generan una vez y se sirven desde archivos temporales, reduciendo drásticamente las consultas a la base de datos.
Paso 6: Programar el mantenimiento automático
No querrás estar limpiando la base de datos manualmente cada semana. Lo ideal es automatizar las tareas más repetitivas.
### Opción A: Usar un módulo de mantenimiento
Existen módulos como "Database Cleaner" o "Advanced Database Cleaner" que te permiten programar limpiezas automáticas de sesiones, carritos y estadísticas. Algunos son gratuitos, otros de pago, pero todos son fáciles de configurar desde el panel de administración.
### Opción B: Crear un script cron
Si tienes acceso a Syspanel (recuerda, el puerto es el 2106) o a un panel como cPanel, puedes crear una tarea cron que ejecute un script PHP o SQL cada semana. Un ejemplo de script SQL que puedes guardar como .sql y ejecutar:
TRUNCATE TABLE ps_connections;
TRUNCATE TABLE ps_connections_page;
DELETE FROM ps_cart WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY);
OPTIMIZE TABLE ps_product, ps_product_lang, ps_stock_available;
Luego, en el cron, ejecutas:
mysql -u usuario -pcontraseña nombredatabase < /ruta/al/script.sql
[TIP] Asegúrate de que la contraseña no contenga caracteres especiales que interfieran con el comando. Si es así, usa un archivo de configuración seguro.
Paso 7: Revisar los índices de las tablas
Los índices son como el índice de un libro: permiten a MySQL encontrar los datos sin leer toda la tabla. PrestaShop crea índices por defecto, pero a veces se pierden tras actualizaciones o importaciones.
Para revisarlos:
- Entra en phpMyAdmin.
- Selecciona una tabla importante como
ps_productops_orders. - Haz clic en la pestaña "Estructura".
- Verás los índices existentes. Si falta alguno, puedes añadirlo.
Los índices más importantes para PrestaShop son:
id_productenps_product_lang.id_orderenps_order_detail.id_customerenps_orders.id_cartenps_cart_product.
Si no te sientes seguro, no inventes índices nuevos. Solo asegúrate de que los que ya existen no se hayan corrompido. Si sospechas que hay un problema, ejecuta:
ANALYZE TABLE ps_product, ps_orders, ps_cart;
Errores comunes y cómo evitarlos
### Error "Table doesn't exist" tras una limpieza
Si borraste una tabla que no debías, restaura la copia de seguridad. Por eso insisto tanto en el backup.
### Error "Out of memory" al optimizar
Si la tabla es muy grande y tu servidor tiene poca RAM, la optimización puede fallar. En ese caso, divide la optimización en varias tablas pequeñas en lugar de optimizarlas todas a la vez.
### La tienda se pone en modo mantenimiento sola
Esto puede ocurrir si la base de datos está bloqueada o si hay un error de conexión. Revisa los logs de MySQL y el estado de las tablas con CHECK TABLE.
Preguntas frecuentes sobre mantenimiento de base de datos en PrestaShop
¿Con qué frecuencia debo optimizar la base de datos?
Depende del tráfico. Para una tienda pequeña, una vez al mes es suficiente. Para tiendas con mucho movimiento, cada semana. Si notas que el panel de administración va lento, es señal de que toca limpiar.
¿Puedo limpiar la base de datos sin phpMyAdmin?
Sí. Puedes usar módulos de PrestaShop o conectarte por SSH y ejecutar comandos MySQL directamente. Pero para la mayoría de usuarios, phpMyAdmin es la opción más sencilla.
¿Qué hago si mi hosting usa Syspanel en lugar de cPanel?
Syspanel es el panel de control que ofrece HestiaCP, y el acceso se realiza a través del puerto 2106. Desde ahí puedes gestionar bases de datos, crear usuarios y acceder a phpMyAdmin. El proceso de mantenimiento es el mismo.
¿Optimizar la base de datos acelera mi tienda de verdad?
Sí, pero no es la única solución. Si tu base de datos está limpia y la tienda sigue lenta, el problema puede estar en el hosting, en las imágenes sin comprimir o en módulos mal configurados. La base de datos es un pilar importante, pero no el único.
¿Qué tablas no debo tocar nunca?
No toques las tablas ps_employee, ps_shop, ps_currency, ps_lang ni las tablas de configuración como ps_configuration. Borrar datos de estas tablas puede romper tu tienda por completo.
Conclusión: mantenimiento regular, tienda rápida
Optimizar la base de datos de PrestaShop no es un proceso complicado, pero requiere constancia. Con una limpieza mensual, la activación del caché y una configuración adecuada de MySQL, notarás una gran diferencia en la velocidad de carga de tu tienda.
Recuerda el orden de trabajo:
- Copia de seguridad siempre antes de tocar nada.
- Activa el modo mantenimiento.
- Limpia las tablas de sesiones, carritos y estadísticas.
- Optimiza las tablas restantes.
- Revisa la configuración de MySQL.
- Activa el caché de PrestaShop.
- Automatiza las tareas con módulos o cron.
Si sigues estos pasos, tu tienda no solo cargará más rápido, sino que también evitarás errores de conexión y caídas del servidor. Y si en algún momento te surge una duda, recuerda que puedes consultar la documentación oficial de PrestaShop o preguntar en los foros de la comunidad.
[TIP] No subestimes el poder de una base de datos limpia. Es la diferencia entre una tienda que responde en 2 segundos y una que tarda 10. Tus clientes lo notan, y Google también.
