One of the most common Magento 2 issues we encounter is an indexer that becomes permanently stuck in
“Processing” or “Working” state. Your storefront may still function, but product updates won’t appear, catalog pricing rules may not apply, and the Admin will keep warning you that “one or more indexers are invalid.”
Fortunately, this issue is usually caused by a stale lock or partially-updated index state — and the fix is straightforward once you know which tables to check.
If this error is impacting live revenue, our senior Magento team can help you debug and deploy a fix safely.
Contact us →
1. Identify Which Indexer Is Stuck
From your Magento root directory, run:
php bin/magento indexer:status
You’ll typically see something like:
catalog_product_price Processing
catalogsearch_fulltext Ready
inventory_stock Ready
Any indexer showing Processing even when nothing is running is likely stuck.
2. Check the indexer_state Table for Stale Locks
Magento stores indexer statuses in the indexer_state table. Run:
SELECT indexer_id, status, updated FROM indexer_state;
Look for rows where status = 'working'. This indicates Magento believes the indexer
is still running — even if it crashed or cron died mid-process.
3. Reset the Stuck Indexer
If an indexer is incorrectly stuck in working state, reset it using:
UPDATE indexer_state
SET status = 'invalid'
WHERE status = 'working';
Or for a specific indexer (recommended):
UPDATE indexer_state
SET status = 'invalid'
WHERE indexer_id = 'catalog_product_price'
AND status = 'working';
Now reindex:
php bin/magento indexer:reindex
4. Reset Stuck MView (Materialized View) States
If your indexers run in “Update by Schedule” mode, stale MView states can also cause stuck processes.
UPDATE mview_state
SET status = 'idle'
WHERE status = 'active';
Then clear cache:
php bin/magento cache:flush
We diagnose deeper issues like cron failures, long-running SQL queries, or integrations that break indexing.
Talk to us →
5. Confirm Cron Is Actually Running
Magento requires cron for indexers to complete on schedule. Make sure it’s active:
crontab -l | grep magento
You should see something like:
*/1 * * * * php /var/www/html/bin/magento cron:run | grep -v "Ran jobs" >> /var/log/magento.cron.log
If cron isn’t running, indexers will appear stuck forever — even if nothing is actually wrong.
When This Issue Points to a Deeper Problem
If indexers frequently get stuck, it may indicate:
- Large catalogs overwhelming the changelog tables
- Long-running MySQL queries or slow disk I/O
- ERP/PIM sync processes flooding the database
- Custom modules interrupting MView updates
In those cases, resetting the state is only a temporary fix. A full indexing and data-flow audit will reveal
what’s actually clogging the pipeline.