¿Qué provoca el error de indexadores bloqueados en Magento 2?
El sistema de reindexación en Magento 2 procesa grandes volúmenes de datos como catálogo, reglas de precios, inventario y búsquedas. Cuando un proceso de reindexación se interrumpe abruptamente debido a un límite de memoria PHP, una desconexión de base de datos o un cron job que expira por tiempo límite (timeout), el índice queda atascado en estado Processing o Working. Como mecanismo de seguridad para evitar escrituras concurrentes, Magento bloquea el índice afectado, arrojando el error de bloqueo al intentar ejecutar nuevos procesos.
Método 1: Resetear el estado de los indexadores mediante Magento CLI
La forma más rápida y recomendada por Adobe Commerce para solucionar los bloqueos es utilizar la herramienta de consola propia de Magento.
- Conéctate a tu servidor web vía SSH y dirígete a la raíz de tu instalación de Magento:
cd /var/www/html/magento2 - Consulta el estado actual de todos los índices para identificar cuáles están bloqueados:
php bin/magento indexer:status - Si observas índices en estado
Processingque no finalizan, ejecuta el comando para resetear todos los estados aInvalid:php bin/magento indexer:reset - Si solo deseas resetear un índice en particular (por ejemplo, el catálogo de productos), especifícalo directamente:
php bin/magento indexer:reset catalog_product_attribute - Una vez reseteados, ejecuta la reindexación completa:
php bin/magento indexer:reindex - Limpia la caché del sistema para aplicar los cambios en la tienda:
php bin/magento cache:flush
Método 2: Desbloqueo manual en la tabla de la Base de Datos
Si la interfaz CLI arroja excepciones o no permite cambiar el estado, puedes actualizar el registro del índice directamente desde MySQL o phpMyAdmin.
- Accede a tu gestor de base de datos o inicia sesión en el cliente MySQL:
mysql -u usuario_bd -p nombre_bd - Revisa los estados actuales consultando la tabla
indexer_state:SELECT * FROM indexer_state; - Identifica los registros cuyo valor en la columna
statusseaworking. - Ejecuta la siguiente sentencia para forzar el estado a inválido en todos los índices congelados:
UPDATE indexer_state SET status = 'invalid' WHERE status = 'working'; - Vuelve a tu terminal SSH y lanza la reindexación nuevamente:
php bin/magento indexer:reindex
Método 3: Incrementar la memoria y tiempo de ejecución en PHP CLI
Si los bloqueos ocurren recurrentemente cada vez que se ejecutan los cron jobs, es indispensable otorgar suficientes recursos al intérprete PHP de la línea de comandos.
- Ejecuta la reindexación manual omitiendo el límite de memoria temporalmente:
php -d memory_limit=2G bin/magento indexer:reindex - Edita el archivo
php.inicorrespondiente a la versión CLI de tu servidor (habitualmente en/etc/php/8.1/cli/php.inio/etc/php/8.2/cli/php.ini). - Asegúrate de que la directiva
memory_limitesté configurada en un mínimo de2Go4Gsegún el tamaño de tu catálogo. - Aumenta
max_execution_timea1800segundos para evitar caídas durante catálogos extensos.