WooCommerce Hosting Requirements: What a Store Actually Needs

The PHP, MySQL, memory and storage a WooCommerce store needs, why shared hosting works up to a point, the settings that matter most, and when to move to a VPS.

Published
Reading time
3 min

WooCommerce is WordPress plus a shop, and a shop is a different workload: uncacheable pages (cart, checkout, account), many more database queries per page, background jobs for orders and emails, and a much higher cost when it is slow — abandoned baskets. Here is what a store needs from its hosting, in the order it matters.

The official minimums, and the real ones

WooCommerce lists PHP 7.4+, MySQL 5.6+/MariaDB 10.1+, 256 MB memory. Treat those as the floor for installing, not for running a business:

Minimum Recommended
PHP 7.4 8.2 or 8.3, with OPcache
MySQL / MariaDB 5.6 / 10.1 8.0 / 10.6+ with InnoDB
PHP memory_limit 256 MB 512 MB
Storage any NVMe — product and order queries are random reads
HTTPS required required, with HTTP/2
Cron WP-Cron real cron every 5 minutes
Object cache none Redis

Why the database matters most

A category page with filters runs dozens of queries across wp_posts, wp_postmeta, wp_term_relationships and the lookup tables. wp_postmeta grows with every product attribute and every order note, and it is indexed poorly for the way WooCommerce queries it. Two things fix most of the pain:

  1. Enable High-Performance Order Storage (WooCommerce → Settings → Advanced → Features) so orders live in their own tables rather than in wp_posts/wp_postmeta. New stores have it on; older ones should migrate.
  2. A properly sized InnoDB buffer pool so the whole database is in memory. On shared hosting that is the host's job; on a VPS it is MySQL tuning basics.

Caching: what can and cannot be cached

Page caching (Nginx cache, a caching plugin, Cloudflare) makes the product and category pages fast — they are the same for everyone. Cart, checkout and account pages must not be cached; every caching layer needs the standard WooCommerce exclusions (/cart/, /checkout/, /my-account/, and the woocommerce_items_in_cart cookie). Most plugins and Plesk's Nginx cache handle this; verify by adding something to the cart from an incognito window and reloading.

Object caching with Redis is where a store gains on the pages that cannot be page-cached: repeated database lookups within a request are served from memory. Set it up with the Redis Object Cache plugin and a local Redis; the server side is in setting up Redis for object caching.

Cron

WooCommerce runs scheduled actions constantly: order status changes, abandoned cart emails, stock sync, webhooks. WP-Cron fires them only when someone visits, which is erratic. Disable it and run a real cron every five minutes — cron jobs in Plesk has the exact task. The Action Scheduler status page (WooCommerce → Status → Scheduled Actions) shows a backlog if this is not happening.

Email

Order confirmations are transactional mail from the server. They must reach the customer, so SPF, DKIM and a PTR are not optional; see why emails go to spam. For stores sending hundreds a day, a transactional provider (Postmark, SES) via an SMTP plugin is more reliable than the server's own Postfix.

Payments and PCI

Using Stripe, PayPal or a hosted checkout means card numbers never touch your server, which keeps you in the simplest PCI category (SAQ A). What you still owe: HTTPS everywhere, an up-to-date site, and no card data in logs or exports. Do not store cards yourself unless you enjoy audits.

Shared hosting or VPS?

A store with a few hundred products and a few dozen orders a day runs comfortably on a good shared plan with PHP 8.3, NVMe and Nginx caching — the VPSPioneer Pioneer Pro plan is built for exactly that. Move to a managed VPS when:

  • product count is in the thousands with layered filters;
  • concurrent shoppers regularly exceed a few dozen (checkout is uncacheable and each one is a PHP worker);
  • you need Redis, a tuned buffer pool, or a queue worker for imports;
  • a promotion or TV mention is coming and the store cannot be slow that day.

The move itself is what our free migration is for; a WooCommerce migration has its own traps around orders placed mid-move, covered in migrating a WooCommerce store.

Before launch

  • PHP 8.2+, memory_limit 512M, OPcache on.
  • HPOS enabled; database in memory.
  • Page cache with cart/checkout exclusions verified.
  • Redis object cache.
  • Real cron every 5 minutes; Action Scheduler backlog empty.
  • Mail authenticated and test order email received.
  • Daily backups with a restore tested — an order database is the least replaceable data you will ever host.
#wordpress#woocommerce#hosting#performance

Keep reading

More from WordPress

All guides

WordPress

How to Speed Up WordPress on Plesk in 20 Minutes

Six changes that make WordPress on Plesk noticeably faster — PHP-FPM, OPcache, Nginx caching, WebP images, database cleanup and a CDN — with exact settings.

3 min read →

WordPress

WordPress Staging on DirectAdmin: Test Without Breaking Your Site

Build a WordPress staging copy on DirectAdmin with the panel tools or by hand with WP-CLI, keep it private, and push changes live without losing orders.

6 min read →

WordPress

How to Fix "Error Establishing a Database Connection" in WordPress

The six causes of WordPress's database connection error — credentials, MySQL down, full disk, corrupt table, too many connections, host — with a fix for each.

3 min read →