Introducción al problema de indexación en Magento 2
Uno de los dolores de cabeza más comunes para los administradores de tiendas online desarrolladas en Adobe Commerce o Magento 2 es el bloqueo o fallo en los indexadores (Indexers). Cuando los indexadores se quedan en estado processing o reindex required de forma indefinida, los precios, el stock y los catálogos dejan de actualizarse correctamente para los clientes, afectando de manera directa las ventas y la experiencia de usuario.
Causas principales del error de indexación
- Procesos de indexación anteriores interrumpidos abruptamente por falta de memoria (RAM) o tiempo de ejecución (Timeout).
- Tablas de la base de datos bloqueadas (Locks) debido a consultas concurrentes pesadas.
- Conflictos de caché o persistencia en Redis/Varnish durante tareas cron masivas.
Método 1: Solución rápida mediante la línea de comandos (CLI)
La forma más efectiva de restablecer los indexadores colgados es utilizar la interfaz de comandos SSH de tu servidor. Sigue estos pasos cuidadosamente:
- Accede a tu servidor mediante SSH y navega hasta la raíz de tu instalación de Magento:
cd /var/www/html/tu-tienda-magento. - Cambia al usuario propietario del sistema de archivos (por ejemplo,
www-data):sudo -u www-data php bin/magento indexer:status. - Si encuentras indexadores con estado defectuoso, fuerza el estado de invalidación ejecutando:
sudo -u www-data php bin/magento indexer:reset. - Finalmente, ejecuta el proceso completo de reindexación manual:
sudo -u www-data php bin/magento indexer:reindex.
Método 2: Limpieza de tablas de indexación bloqueadas en la Base de Datos
Si el método anterior devuelve errores persistentes de bloqueo, es muy probable que existan registros huérfanos o bloqueos activos directamente en MySQL. Realiza los siguientes pasos:
- Accede a tu gestor de base de datos (como phpMyAdmin o mediante la consola de MySQL).
- Localiza y vacía las tablas relacionadas con el estado de los indexadores ejecutando las siguientes consultas SQL:
TRUNCATE TABLE indexer_state;TRUNCATE TABLE mview_state; - Una vez vaciadas dichas tablas, vuelve a tu terminal SSH y regenera los estados ejecutando:
php bin/magento indexer:resetseguido dephp bin/magento indexer:reindex.