Why Is WooCommerce Slow With Many Subscriptions?
Why This Happens
Every subscription generates recurring scheduled actions (renewal, expiration checks, retry attempts) that Action Scheduler stores as rows in its own database table. A store with a few dozen subscriptions never notices this. A store with several thousand active subscriptions can accumulate hundreds of thousands of historic action records if they're never cleaned up, and every WooCommerce admin screen or query that touches subscription or order meta has to work harder as that underlying data grows.
Separately, WooCommerce's original data model stores order and subscription details as post meta rather than dedicated tables, which scales noticeably worse than a purpose-built schema once volumes get large — this is exactly what WooCommerce's newer High-Performance Order Storage (HPOS) is designed to fix.
Common Causes
- Action Scheduler table never cleaned up. Completed and failed actions accumulate indefinitely by default unless a retention/cleanup policy is in place.
- High-Performance Order Storage (HPOS) not enabled. Stores still on the legacy post-based order storage feel the scaling cost of meta-based queries much sooner.
- No object caching. Without Redis or Memcached, every repeated query re-hits the database instead of serving from memory — disproportionately costly on subscription-heavy admin screens that run several queries per row.
- Reporting or third-party plugins running expensive queries across the full subscriptions/orders table on every page load, rather than caching or limiting their scope.
- Underpowered database resources for the actual data volume — shared hosting plans are rarely sized for a store with a large, active subscriber base.
How to Fix It
- Confirm Action Scheduler is actually cleaning up. WooCommerce → Status → Scheduled Actions shows how many completed/failed actions exist — a very large number here is a direct, fixable contributor to admin slowness.
- Move to High-Performance Order Storage if the store hasn't already — WooCommerce provides a guided migration, and it's specifically designed for exactly this scale problem.
- Add object caching (Redis or Memcached) at the hosting level if it isn't already in place — this alone often produces the single biggest, most immediate improvement.
- Audit third-party plugins for expensive, unscoped queries against subscription or order data, particularly reporting/analytics add-ons.
- Review hosting resources against real traffic and data volume — a store that grew from dozens to thousands of subscriptions has usually outgrown the plan it started on.
See WordPress speed optimization for a proper database and query-level performance pass rather than another caching plugin layered on top of the real problem.