## Summary

Your Magento 2 admin shows an indexer stuck on **Processing**, a **Reindex required** or **Suspended** status, or the storefront shows stale prices, missing products and empty category pages after an import or upgrade. On the command line, `bin/magento indexer:status` keeps reporting a state that never returns to **Ready**.

This guide gives you the fast isolation steps first. If you would rather hand it over, SazM fixes a stuck Magento 2 indexer for an affordable **fixed price of $99, delivered within 48 hours**, entirely in writing: no calls, no project manager, one senior developer.

## Where the Error Usually Lives

Start by reading the indexer state and the logs before resetting anything:

```bash
bin/magento indexer:status
bin/magento indexer:show-mode
tail -n 200 var/log/system.log
tail -n 200 var/log/exception.log
tail -n 100 /var/log/php8.3-fpm.log
```

Typical lines and what they point to:

```text
PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 20480 bytes)
  -> the reindex process was killed mid-run, so the indexer stays in "working"

SQLSTATE[HY000]: General error: 1114 The table '/tmp/#sql...' is full
  -> MySQL ran out of temporary table space during a large reindex

SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock
  -> cron-driven reindexing collided with an import or another indexer

Cannot initialize shutdown handler / process killed (OOM)
  -> the OS killed PHP; check dmesg for "Out of memory"
```

A reindex that is killed never gets to write its final status, which is why the indexer looks stuck even though nothing is running.

## Quick Fix Breakdown (DIY)

- **Confirm nothing is still running.** A genuinely running reindex must not be interrupted:

```bash
ps aux | grep -E "indexer|magento" | grep -v grep
bin/magento cron:status 2>/dev/null || true
```

- **Check the stored state.** A row stuck in `working` confirms a killed process:

```bash
bin/magento indexer:status
mysql -e "SELECT indexer_id, status, updated FROM indexer_state;"
```

- **Reset only the stuck indexer, then rebuild it:**

```bash
bin/magento indexer:reset catalog_product_price
bin/magento indexer:reindex catalog_product_price
```

- **Run the reindex with enough PHP memory** from the CLI, instead of the web or cron default:

```bash
php -d memory_limit=4G bin/magento indexer:reindex
```

- **Keep indexers on schedule, not on save,** for large catalogs:

```bash
bin/magento indexer:set-mode schedule
```

  In schedule mode, changes are processed by cron. Confirm cron really runs, otherwise "Reindex required" never clears.
- **Check the changelog backlog** for schedule-mode indexers. Large `*_cl` tables mean cron is not keeping up:

```bash
mysql -e "SELECT COUNT(*) FROM catalog_product_price_cl;"
```

- **Look at the search engine** (OpenSearch or Elasticsearch). If it is down or out of disk, the catalogsearch indexer fails and stays invalid:

```bash
curl -s localhost:9200/_cluster/health?pretty
```

- **Do not rebuild everything during trading hours** on a large catalog. A full `indexer:reindex` can lock tables and slow checkout.

If none of these isolates it within an hour, stop. Repeated resets without finding the cause usually make the backlog worse.

## Hand It Over: $99 Fixed, Within 48 Hours

Most stuck indexers are not hard. They persist because the host, the extension vendor and the search service each point at someone else. One developer who reads the logs, finds what kills the reindex and fixes that root cause ends the loop.

What you get for **$99**:

- **A fixed price agreed before work starts.** One indexer issue, one flat fee, no hourly meter.
- **Delivery within 48 hours** of access, verified on staging before anything touches your live store.
- **Fully written, fully async.** You send the store URL, the Magento version and the output of `bin/magento indexer:status`. You get questions, progress and proof in writing. There are no calls, meetings or project managers, so your time zone does not matter.
- **Written proof it works:** the root cause in plain language, what changed, the indexer status showing **Ready**, and a rollback note.
- **Money-back guarantee** if the agreed root cause cannot be resolved.
- **Safe access only:** a separate admin account, staging first. Never send `app/etc/env.php`, customer data or passwords through the inquiry form.

Behind it: 20+ years in production (since Oct 2006) and 100+ projects in the portfolio, including Magento 2 stores. Larger rebuilds or migrations are scoped separately by written fixed quote.

**[Get your Magento 2 store fixed for $99 →](/bug-fix-services)** · [Queue an urgent fix](/checkout/emergency) · [See past projects](/projects)

If the store is also slow after reindexing, the $199 [Core Web Vitals fix](/articles/core-web-vitals-inp-lcp-remediation) can be done in the same window.

See also: [Magento 2 checkout not working fix](/magento-2-checkout-not-working-fix) if checkout fails rather than catalog data.

## Frequently Asked Questions

### Why is my Magento 2 indexer stuck on Processing?
The reindex process was almost certainly killed (memory limit, OOM killer or a database error) before it could write its final status. Check `var/log/system.log` and `dmesg`, then reset only that indexer with `bin/magento indexer:reset <indexer_code>` and reindex it.

### How do I fix "Reindex required" in Magento 2 admin?
Run `bin/magento indexer:reindex` for the affected indexer and make sure cron is running. In schedule mode, the status clears only after cron processes the changelog.

### Is it safe to run indexer:reset?
It is safe once you have confirmed no reindex is actually running. It marks the indexer invalid so the next reindex rebuilds it from scratch, which can take a while on a large catalog.

### How much does it cost to fix a stuck Magento 2 indexer?
SazM fixes one issue for an affordable fixed $99, delivered within 48 hours, with a money-back guarantee if the agreed root cause cannot be resolved. Typical agency hourly rates are higher and open-ended, while very low marketplace gig prices rarely include root-cause diagnosis, staging tests or a guarantee.

### Do I need a call to explain the problem?
No. Send the store URL, the Magento version and the indexer status output. A written report is more precise than a call and becomes the test that proves the fix.
