Magento 2 Indexer Modes: Realtime or Scheduled, and How to Choose
Choose between Update on Save and Update by Schedule for Magento 2 catalog and price indexers, with CLI commands and cron verification steps.
01 Sept 2025, 16:48 UTC

Slow product saves, or stale prices on the storefront
If your Magento Admin hangs for several seconds every time you save a product, or if a price change you made this morning still is not showing on the storefront, you are likely feeling the effect of Magento's indexer mode. An indexer is a process that copies data from Magento's normalized tables into flat tables optimized for storefront reading. Magento 2 can rebuild those tables immediately after every save, or it can queue the work for a background cron job.
The useful takeaway: large catalogs with frequent imports usually run better on scheduled updates, while small catalogs with a single editor can stay on realtime. The wrong choice trades admin responsiveness for storefront freshness, and there is no single safe default for every store.
What the two modes actually do
Update on Save, CLI mode realtime, rebuilds affected index entries synchronously during the Admin request. If you change a product price, Magento recalculates price index rows before the save response returns. On a small catalog this is invisible. On a catalog with thousands of products, category rules, or shared catalogs, it can block the Admin and increase database lock contention.
Update by Schedule, CLI mode schedule, marks the affected indexers as invalid and lets a cron job rebuild them later. The default Magento indexer cron group typically runs every minute, though this depends on your server crontab configuration. The storefront may show the old price until the next scheduled run finishes.
Worked example: switching the price indexer to scheduled updates
Run these commands from the Magento root directory as the Magento filesystem owner, commonly the user that owns pub/ and var/. Do not run as root unless your deployment specifically requires it.
- Check current modes:
cd /var/www/html/magento
bin/magento indexer:status
Expected output includes indexers such as catalog_product_price with mode Update on Save and status Ready or Reindex required. Exact column layout varies by Magento 2.4.x version.
- Switch the price indexer to schedule:
bin/magento indexer:set-mode schedule catalog_product_price
Risk: after this change, price updates saved in Admin do not appear on the storefront until the indexer cron runs. If cron is broken, customers see stale prices.
- Confirm cron is configured for the indexer group:
crontab -u -l | grep indexer
Look for an entry calling bin/magento cron:run or Magento's cron.php. You can also inspect var/log/cron.log if your environment writes cron output there.
- Verify behavior after the switch:
- Change a product price in Magento Admin and save.
- Refresh the storefront product page immediately.
- Wait for the next indexer cron run, then refresh again.
If the price updates only after the cron run, scheduled mode is working as intended. If it never updates, check var/log/exception.log and var/log/system.log for indexer errors, and confirm cron:run is executing.
Trade-offs and limitations
| Factor | Update on Save (realtime) | Update by Schedule |
|---|---|---|
| Admin save latency | Higher on large catalogs | Lower |
| Storefront freshness | Immediate | Delayed until cron runs |
| Database load pattern | Spiky, tied to Admin saves | Batched, tied to cron schedule |
| Risk if misconfigured | Slow Admin, lock contention | Stale prices or stock status |
Switching every indexer to schedule is not automatically safer. Stock status, catalog rules, and bundled product prices can all depend on indexers that run on their own schedules. Adobe Commerce and Magento Open Source may expose different indexers or behave differently between 2.4.x minor releases, so verify per environment rather than copying a configuration from another store.
What to do next
- Run bin/magento indexer:status and note which indexers are in realtime mode.
- If Admin product saves take more than a few seconds, switch high-volume indexers such as catalog_product_price and cataloginventory_stock to schedule.
- Confirm your server crontab runs Magento cron at least every minute for the indexer group.
- After any mode change, make one Admin change and confirm the storefront reflects it within the expected cron window.
If you are on Adobe Commerce Cloud, check your project configuration before changing indexer modes, because some cloud environments manage cron and indexer behavior through environment variables rather than the local CLI alone.