The short answer: do not reset a status you have not explained
When a Magento 2 indexer appears stuck, identify its ID and mode, compare timestamped observations, then establish whether the worker is still active. Inspect the correlated error and downstream dependency before planning a targeted reset or reindex.
Resetting an indexer changes its recorded state; it does not fix a failing query, unavailable search service or insufficient memory. If a worker is still processing, a second intervention can create competing work. If the displayed data is stale despite a ready index, the next investigation may be cache or shopper context.
This guide focuses on indexing. For the surrounding systems, use the Magento 2 health checklist and our cron troubleshooting guide.
Scope and version differences
Examples target conventional Linux-hosted Magento Open Source and Adobe Commerce 2.4.x. They are documentation-reviewed, not a claim that this workflow has been executed on every patch release.
- Run Magento CLI commands as the filesystem owner from the active release directory. Replace
phpwith the configured CLI PHP binary. - Inspect state first; Magento bootstrap may still write operational files. SQL below uses SELECT only; run it through approved read-only access against the primary application database and apply your table prefix.
- Process lists and logs can contain sensitive information. Inspect locally and share only sanitized evidence.
- Cloud, containers, multi-node installations and SaaS search/catalog services need their own worker and service checks. A single host’s process list cannot establish global inactivity.
| Feature | Version note |
|---|---|
| Customer Grid mode | Before 2.4.8, Customer Grid supports Update on Save only; 2.4.8 onward also supports scheduled mode |
| Suspended status command | Adobe documents indexer:set-status from 2.4.7; check available commands and any planned suspension |
| Application lock mode | Available from 2.4.3; configuration affects the reliability of observed status after a failure |
Older tutorials can describe different behavior. Compare the installed version and hosting model with the current CLI reference.
Observe / Baseline
1. Identify the affected indexer and business symptom
date -u
php bin/magento --version
php bin/magento indexer:info
php bin/magento indexer:status
php bin/magento indexer:show-modeRecord the exact ID, status, mode and observation time. Confirm that the Admin and shell point at the same environment. Begin with a known product or action rather than treating every indexer as suspect.
| Symptom | Possible indexer | Context to record |
|---|---|---|
| Old product price | catalog_product_price | SKU, website, customer group, currency and active rules |
| Wrong category membership | catalog_category_product / catalog_product_category | Product assignment, category and store view |
| Missing storefront search result | catalogsearch_fulltext | Engine/service, visibility, stock and store view |
| Stock visibility inconsistency | inventory / cataloginventory_stock | Inventory configuration, stock/source assignment and salability rules |
These symptoms can have non-indexing causes. For example, a price rule or customer-group difference can explain a displayed price without any stuck process. Verify the expected result before deciding which index needs recovery.
2. Separate indexer state, scheduled progress and shopper outcome
Treat these as three observations. The overall indexer status does not replace evidence of incremental progress, and neither observation alone proves the shopper sees the correct result.
| Observation | What to check next | What not to assume |
|---|---|---|
| Working / processing | Worker activity, elapsed time and progress across snapshots | That the process is necessarily stuck or alive |
| Reindex required / invalid | Cause of invalidation and whether scheduled work completes | That every invalid state requires an immediate full reindex |
| Suspended | Planned import, maintenance owner and intended resume procedure | That a deliberate pause is an incident |
| Ready with growing scheduled backlog | Incremental processing, incoming change rate and cron | That a ready label means no pending changes |
| Ready, no pending work, wrong storefront | Store scope, indexed result, rendering and cache | That resetting the index is the next justified action |
The Admin’s System → Tools → Index Management screen is a useful overview. Compare it with CLI evidence and the actual shopper context, especially if the screen has not been refreshed.
Observe / Two snapshots
3. Check whether processing is advancing
Take an initial snapshot, then repeat after a meaningful interval for this workload. Record normal import volume and expected processing time. A busy catalog can add changes faster than a healthy worker consumes them.
SELECT indexer_id, status, updated
FROM indexer_state
WHERE indexer_id = 'catalog_product_price';
SELECT view_id, mode, status, updated, version_id
FROM mview_state
WHERE view_id = 'catalog_product_price';The indexer and materialized-view IDs can differ for custom implementations. Confirm the mapping in that module’s configuration; do not infer it from similar names. The updated column is not a guaranteed worker heartbeat. Raw state tables are supporting evidence, particularly when application locking is configured.
For a confirmed scheduled price view, inspect the newest changelog entry without counting the whole table:
SELECT version_id AS newest_change_version
FROM catalog_product_price_cl
ORDER BY version_id DESC
LIMIT 1;Compare the view’s processed checkpoint with successive observations. If it advances, work is being recorded as processed. If the newest change ID keeps advancing faster, incoming work may be outpacing processing. A static checkpoint during an idle period is not a failure.
Do not treat an ID difference as an exact product backlog. IDs can have gaps; changes can reference the same entity; cleanup and concurrent writes affect the snapshot. An empty or missing changelog also needs context: confirm the view, mode, prefix and cleanup behavior.
Do not “catch up” by manually advancing mview_state.version_id or truncating changelog tables. That can discard unprocessed evidence and leave derived data inconsistent.
4. Correlate workers, errors and dependencies
# Linux example; rg requires ripgrep.
ps -eo pid,ppid,user,etime,args | rg "[b]in/magento (indexer:reindex|cron:run)"
tail -n 100 var/log/exception.log
tail -n 100 var/log/cron.log
df -h .
df -i .Use the host’s process viewer if ripgrep is unavailable. Look at the actual process tree and hosting supervisor; scheduled jobs can run in child processes. In a cluster, check other nodes and any dedicated worker host. Absence from one filtered list does not establish that no worker exists.
Then correlate the affected indexer and time window with resource or dependency evidence:
- Database: ask the operator to inspect active waits, long transactions and deadlocks. A waiting query can look like idle PHP.
- PHP and host: check process termination, out-of-memory events, container limits and exhausted disk or inodes. CLI limits can differ from web PHP.
- Search: for search indexing failures, inspect engine connectivity, authentication and service health. Do not expose private endpoints or credentials.
- Deployment and extensions: match the first failure with release changes, missing classes or a custom indexer exception.
Capture a sanitized error signature and observation time. A working row left after termination and a genuinely active worker require different recovery plans. Do not kill every PHP process to make the status change.
5. Confirm the scheduled processing path
A full manual reindex may restore current output while the background path stays broken. For scheduled indexes, inspect the relevant cron jobs and recurring errors. Our bounded cron queries show how to compare due work with completed executions.
For advanced investigation, check the confirmed view subscription, trigger creation and module configuration. Use the Mview documentation and source matching the installed release. Do not run a generic “repair every trigger” recipe on an unknown schema.
Update on Save and Update by Schedule have different processing paths. A mode change is a maintenance operation, not an observational check. Adobe requires maintenance mode and disabled cron before switching indexer modes; plan restoration of both and verify normal processing afterward.
Before changing state
Record your recovery prerequisites
This checklist runs only in this page. It cannot inspect Magento, detect workers or certify that a reset is safe. Entries clear on reload.
4 prerequisites still unconfirmed
Continue the investigation before resetting or reindexing. An unknown worker state is an unresolved prerequisite.
Review worker and dependency evidence →Recover / Smallest necessary intervention
6. Recover only after identifying the cause
Record the evidence, confirm worker state across the deployment, address the failure and agree a recovery window. Coordinate imports and scheduled work through the operator’s runbook so a manual command does not race another worker.
If an interrupted worker left a stale working state
Only after establishing that the relevant worker is no longer active, a targeted reset can invalidate its state. The following uses Product Price as an example; substitute the confirmed indexer ID:
php bin/magento indexer:reset catalog_product_priceThis does not rebuild data. It is not needed merely because a scheduled index has pending work, and it cannot repair the cause of a failure.
If a full rebuild is justified
After the operator confirms capacity and excludes conflicting work, run the affected indexer and retain its output:
php bin/magento indexer:reindex catalog_product_priceIf it fails, investigate that error instead of repeatedly resetting and retrying. A successful full rebuild is one recovery observation; it does not establish that the next scheduled change will process.
If the indexer was intentionally suspended
Confirm who paused it and why, then follow the version-specific resume plan. Do not manually mark data valid to clear the warning. A label change is not evidence that all changes were indexed.
Avoid unscoped reset/reindex commands, database status edits, changelog deletion and simultaneous rebuilds. Omitted indexer IDs expand the operation to every indexer, increasing work beyond the symptom you are investigating.
Illustrative evidence
Worked example: the backlog grows while the worker progresses
This simulated timeline describes a scheduled view, not a real customer incident. The numbers are illustrative checkpoints, not counts of products.
Time Processed checkpoint Newest change version
14:00 12000 12600
14:05 12300 13200
14:10 12800 13500Evidence: the processed checkpoint advances at every observation. The incoming change position advances too. The widening difference in the first interval does not by itself prove a dead worker.
Next investigation: compare import throughput, database waits and the business result. If ingestion slows but the checkpoint still advances and expected catalog changes arrive, investigate capacity rather than assuming interrupted execution.
Different branch: if the checkpoint stays fixed during sustained due work, correlate worker state and errors. A terminated worker with a stale status calls for a different runbook from a live process waiting on a database transaction.
Prove recovery through the next catalog change
- Capture the post-recovery status, mode and checkpoint using the same observations.
- Confirm the affected error stops recurring over an appropriate workload window.
- Observe a planned catalog update through the normal save/import path, preferably on staging first.
- Confirm scheduled processing advances without repeated manual intervention.
- Check the intended shopper outcome in the same website, store view, currency and customer context.
- Record the operator, cause, fix and next review in the store-health handoff checklist.
If the indexed result is correct but an anonymous product page is still old, investigate application rendering, full-page cache and the CDN. Broad cache flushing is not proof of an indexer fix.
Monitor progress, not just the status label
Watch processing age, recurring failures, import rate and expected catalog freshness. Define what “too long” means for this store rather than using a universal timeout. Check after PHP upgrades, release switches and import changes.
Review application-lock configuration with the operator against the installed release; Adobe documents its role in reporting failed runs more accurately. Do not publish the complete app/etc/env.php file when discussing that setting.
Buildmerce Health Guard includes indexer status monitoring, with scheduled monitoring and alerts described for Pro. Verify current edition and configuration. Do not assume status monitoring independently proves throughput, search correctness or the shopper’s price.
Common questions
Does indexer:reset reindex products?
No. It invalidates the recorded indexer state. A rebuild or normal scheduled processing is separate.
How long should an indexer stay working?
There is no universal safe duration. Compare workload, historical runtime, process activity and progress. A large rebuild and a stalled worker can display similar labels.
Why does reindexing fix it temporarily?
The manual rebuild may repair current derived data while cron, incremental processing or a recurring dependency failure remains unresolved. Verify the next normal update.
Can a ready indexer still be associated with stale prices?
Yes. Inspect scheduled progress and verify the same website, customer group, currency, rules and cache context before deciding the indexer is responsible.
Sources & revision notes
- Adobe: indexer CLI commands and prerequisites
- Adobe: Admin Index Management
- Adobe: indexing architecture, Mview and application locking
- Adobe: indexer configuration best practices
- Magento 2.4.8 source: indexer_state and mview_state schema; compare your installed release
October 29, 2026 · First edition. Added diagnostic snapshots, worker checks, scoped recovery examples and an interactive prerequisite checklist. Examples are illustrative; commands have not been runtime-tested across every supported release.
Continue with cron troubleshooting, the full Magento health check, or all Magento guides. Send a correction if a release-specific behavior needs clarification.