Prestashop
- Prestashop 1.7 _layered_filter_block mucho espacio (gigante) y problemas con el hosting
- PrestaShop 8 - Solución tabla ps_layered_filter_block gigante
- Para localizar la versión de PrestaShop a través de MySQL usando TablePlus o similar
- Configuración de correo Prestashop. Localización
Prestashop 1.7 _layered_filter_block mucho espacio (gigante) y problemas con el hosting
Prestashop 1.7 _layered_filter_block, problemas de rendimiento y de hosting
Muchas veces los clientes le echan la culpa al hosting, de todos sus males, pero la triste realidad es que los clientes o mejor dicho sus desarrolladores de la tienda, de su PrestaShop, obvian el paquete "mantenimiento anual" y obvian, el dejar las cosas bien para que luego no halla problemas.
Hablamos del Faceted Search o navegación por facetas.
Modulo que viene con advertencias claras de como debemos usarlo, pero que en el 90% de las tiendas de un Hosting basadas en PrestaShop, tiene habilitado en las tareas cron del cliente.
Hoy un cliente, me pidio soporte para ver porque su máquina de 256GB de ram, se iba cada dos por tres.
Como no había datos en la monitorización que indicaran problemas de overload, fuimos a buscar a MySQL. Sus logs nos hablaban de muchos problemas de reinicio, y de requerir ingentes cantidades de memoria por InnoDb.
Pues a buscar al culpable.
[root@servidor30 mysqltuner]# du -sh /var/lib/mysql/user_republic3/* | grep G
2,9G /var/lib/mysql/user_republic3/ps_guest.ibd
263G /var/lib/mysql/user_republic3/ps_layered_filter_block.ibd
Maravilloso la tabla ps_layered_filter_block perteneciente al penoso módulo Búsqueda por facetas o Faceted Search layered
La de
ps_guestesa es otra de esas tablas que puedes limpiar regularmente en PrestaShop, junto aps_guest,ps_connections,ps_connections_page,ps_connections_source,ps_page_viewed.
Ojo, que limpiar no solo es hacer TRUNCATE como algún experto dice por ahi. Igual te interesa limpiar desde un tiempo, como puede ser en
ps_cart_product,ps_cartyps_cart_discount.
Backups, por favor, siempre backup antes de empezar cualquier cosa, sobre todo cuando lees cosas por Internet.
Pues la culpa es del desarrollador o del activador de este módulo en el area de administración que parece que les cuesta leer.

Dejo la imagen en castellano, que luego hay quien me dice que sabe inglés... ;-)

Configurar el cron
Lo dejo también porque esta es la madre de de muchos de los problemas heredados en un hosting por causa de expertos en desarrollo web. Como se les atraganta pues lo obvian.
Los chicos de PrestaShop, también son muy simpáticos, porque el mensaje no es del todo correcto. Si uno pone eso el cron (y como lo hace a través de cPanel, DirectAdmin, o panel, en lugar de trabajar con SSH) no funcionará.
A veces hay que leer y entender.
Eso es una URL, y el cron es un programa de consola, que no puede llamar de esa forma a una url salvo... usando +curl*
MAILTO=""
15 2 * * * /usr/bin/curl --user-agent cPanel-Cron 'https://dominio.com/en/module/ps_facetedsearch/cron?ajax=1&action=indexPrices&token=bj7shgggg'
25 2 * * * /usr/bin/curl --user-agent cPanel-Cron 'https://dominio.com/en/module/ps_facetedsearch/cron?ajax=1&action=indexPrices&full=1&token=bj7shgggg'
35 2 * * * /usr/bin/curl --user-agent cPanel-Cron 'https://dominio.com/en/module/ps_facetedsearch/cron?ajax=1&action=indexAttributes&token=bj7shgggg'
45 2 * * * /usr/bin/curl --user-agent cPanel-Cron 'https://dominio.com/en/module/ps_facetedsearch/cron?ajax=1&action=clearCache&token=bj7shgggg
En el shell se puede ejecutar cada uno de ellos y ver si te funcionan
Por si usas cPanel te lo dejo. Pero ten atención a las comillas simples.

Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
PrestaShop 8 - Solución tabla ps_layered_filter_block gigante
Introducción
En PrestaShop 8, el módulo ps_facetedsearch (antiguo blocklayered) utiliza la tabla ps_layered_filter_block como cache para los filtros de navegación por facetas. Esta tabla puede crecer descontroladamente hasta alcanzar varios gigabytes, causando problemas de espacio en disco y rendimiento.
Síntomas:
- Tabla
ps_layered_filter_blockde varios GB (reportados casos de 500GB+) - Lentitud en páginas de categorías
- Errores de espacio en disco
- Backup/restore problemáticos
Verificación del problema
1. Comprobar el tamaño de las tablas layered
SELECT
table_name,
ROUND(((data_length + index_length) / 1024 / 1024 / 1024), 2) AS "Size in GB",
ROUND((data_length / 1024 / 1024 / 1024), 2) AS "Data GB",
ROUND((index_length / 1024 / 1024 / 1024), 2) AS "Index GB"
FROM information_schema.tables
WHERE table_schema = 'tu_nombre_bd'
AND table_name LIKE '%layered%'
ORDER BY (data_length + index_length) DESC;
2. Verificar archivo físico en disco
# Comprobar tamaño real del archivo InnoDB
ls -lah /var/lib/mysql/tu_bd/ps_layered_filter_block.ibd
Problema típico: La tabla muestra X GB en consulta pero el archivo físico ocupa mucho más espacio (fragmentación InnoDB).
Tablas involucradas en PrestaShop 8
| Tabla | Función | ¿Seguro truncar? |
|---|---|---|
ps_layered_filter_block |
Cache de filtros (el problema principal) | ✅ SÍ - Se regenera automáticamente |
ps_layered_category |
Cache de categorías con filtros | ✅ SÍ - Se regenera automáticamente |
ps_layered_product_attribute |
Cache de atributos de productos | ✅ SÍ - Se regenera automáticamente |
ps_layered_filter |
Plantillas de filtros configuradas | ❌ NO - Contiene tu configuración |
Soluciones
Opción 1: Desde administración (recomendado)
- Admin → Módulos → Gestión de módulos
- Buscar "Faceted Search" o facetas o ps_facetedsearch
- Botón Reconstruir todo el indice de precios
- Botón "Rebuild entire layered structure"
Opción 2: Limpieza SQL manual
Backup obligatorio primero:
-- Backup de seguridad
mysqldump -u user_bd -p tu_bd ps_layered_filter_block > backup_layered_filter_block.sql
-- O backup completo de tablas layered
mysqldump -u user_bd -p tu_bd ps_layered_filter ps_layered_filter_block ps_layered_category ps_layered_product_attribute > backup_layered_completo.sql
Método conservador:
-- Solo limpiar el cache principal
TRUNCATE TABLE ps_layered_filter_block;
Método completo:
-- Limpiar todas las tablas de cache (mantener ps_layered_filter)
TRUNCATE TABLE ps_layered_filter_block;
DELETE FROM ps_layered_category;
DELETE FROM ps_layered_product_attribute;
Opción 3: Liberar espacio físico (InnoDB)
Si después del TRUNCATE el archivo físico sigue ocupando mucho espacio:
Método A: OPTIMIZE TABLE
-- Intentar optimización (puede funcionar en algunos casos)
OPTIMIZE TABLE ps_layered_filter_block;
⚠️ Nota: OPTIMIZE TABLE no siempre funciona efectivamente en InnoDB con innodb_file_per_table=ON.
Método B: Regenerar motor (más efectivo)
-- 1. Vaciar tabla
TRUNCATE TABLE ps_layered_filter_block;
-- 2. Regenerar motor para liberar espacio físico
ALTER TABLE ps_layered_filter_block ENGINE=InnoDB;
Verificar liberación de espacio:
Esto solo es a nivel de administrador del sistema.
# Comprobar que el archivo físico se redujo
ls -lah /var/lib/mysql/tu_bd/ps_layered_filter_block.ibd
# Verificar en SQL
SELECT
table_name,
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size in MB"
FROM information_schema.tables
WHERE table_schema = 'tu_bd'
AND table_name = 'ps_layered_filter_block';
Regeneración automática
Después de la limpieza, el cache se regenerará automáticamente cuando:
Cron necesario
Este módulo requiere, si o si, la instalación de varas tareas cron. De no hacerlo, las tablas se haran gigantes y puedes tener problemas con tu hoster.

Prevención futura (como admin)
1. Limpieza programada
# Añadir al crontab (limpieza semanal)
0 2 * * 0 mysql -u root -pTU_PASSWORD tu_bd -e "TRUNCATE TABLE ps_layered_filter_block;"
2. Monitorización
-- Consulta para monitorizar crecimiento
SELECT
table_name,
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size_MB",
table_rows
FROM information_schema.tables
WHERE table_schema = 'tu_bd'
AND table_name = 'ps_layered_filter_block';
3. Configuración del módulo
- Revisar configuración de cache en ps_facetedsearch
- Considerar reducir el número de filtros si no son necesarios
- Optimizar plantillas de filtros para categorías específicas
Diferencias con PrestaShop 1.7
- El módulo se llama
ps_facetedsearch(vsblocklayered) - Cache más agresivo pero también más eficiente
- Función
invalidateLayeredFilterBlockCache()optimizada - Rebuild más rápido pero requiere más memoria
- Mejor integración con el motor de búsqueda
Troubleshooting
Problema: "Table ps_layered_filter_block doesn't exist"
-- Recrear tabla manualmente
CREATE TABLE IF NOT EXISTS `ps_layered_filter_block` (
`hash` char(32) NOT NULL DEFAULT '',
`data` text,
PRIMARY KEY (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Problema: Cache no se regenera
- Verificar que el módulo ps_facetedsearch está activo
- Ejecutar rebuild manual desde administración
- Comprobar logs de errores PHP/MySQL
- Verificar permisos de base de datos
Aviso importante (Disclaimer)
⚠️ Esta documentación se entrega tal y como está, sin garantías.
- Realiza siempre backup antes de cualquier operación
- Testa en entorno de desarrollo primero
- Ten conocimientos de MySQL/InnoDB antes de proceder
- Para soporte profesional, contacta con expertos en PrestaShop
Referencias
- Repositorio oficial ps_facetedsearch
- Issue GitHub sobre crecimiento de tabla
- Documentación técnica PrestaShop 8
Actualizado: Enero 2025 - Basado en experiencia con PrestaShop 8.x
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Para localizar la versión de PrestaShop a través de MySQL usando TablePlus o similar
Consultas SQL para identificar la versión
1. Tabla ps_configuration (método principal)
SELECT name, value
FROM ps_configuration
WHERE name = 'PS_VERSION_DB';
2. Alternativa con PS_INSTALL_VERSION
SELECT name, value
FROM ps_configuration
WHERE name = 'PS_INSTALL_VERSION';
3. Si las anteriores fallan, buscar todas las versiones
SELECT name, value
FROM ps_configuration
WHERE name LIKE '%VERSION%';
Métodos adicionales
4. Tabla ps_shop (para multishop)
SELECT * FROM ps_shop;
(A veces contiene información de versión)
5. Verificar estructura de tablas
DESCRIBE ps_configuration;
(Las diferencias en estructura pueden indicar versiones)
Notas importantes
- Prefijo de tablas: Cambia
ps_por el prefijo real de la instalación - Versiones muy antiguas: En PrestaShop < 1.5 puede que no exista
PS_VERSION_DB - Actualizaciones: Si fue actualizado,
PS_INSTALL_VERSIONpuede mostrar la versión inicial
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Configuración de correo Prestashop. Localización
En PrestaShop, la configuración de correo está principalmente en MySQL, no en ficheros de configuración.
Ubicación en MySQL
1. Configuración principal de correo
SELECT name, value
FROM ps_configuration
WHERE name IN (
'PS_MAIL_METHOD',
'PS_MAIL_SERVER',
'PS_MAIL_USER',
'PS_MAIL_PASSWD',
'PS_MAIL_SMTP_ENCRYPTION',
'PS_MAIL_SMTP_PORT',
'PS_MAIL_TYPE'
);
2. Configuraciones adicionales de correo
SELECT name, value
FROM ps_configuration
WHERE name LIKE '%MAIL%';
3. Valores importantes a revisar:
- PS_MAIL_METHOD:
1= Mail PHP,2= SMTP - PS_MAIL_SERVER: Servidor SMTP
- PS_MAIL_USER: Usuario SMTP
- PS_MAIL_PASSWD: Contraseña (encriptada)
- PS_MAIL_SMTP_ENCRYPTION: ssl/tls/off
- PS_MAIL_SMTP_PORT: Puerto (25, 587, 465)
Ficheros relacionados (secundarios)
/config/settings.inc.php
// Solo contiene configuración básica, no SMTP
define('_PS_MODE_DEV_', false);
/classes/Mail.php
- Lógica de envío, no configuración
/mails/
- Plantillas de correo, no configuración
Logs de correo
SELECT * FROM ps_mail
ORDER BY date_add DESC
LIMIT 10;
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.