On a normal day the store gets 50 orders; on sale day, 800. A site that “worked fine” goes down during the most profitable hour. Here’s how to prepare.
What breaks first
- The database. Every cart and every catalog filter means MySQL queries. With a tenfold increase, the database hits disk and memory limits.
- PHP workers. Free processes run out — visitors see a 502 or wait 30 seconds.
- Payment gateway and integrations. If Payme/Click respond slowly, orders “hang” and tie up workers.
- Disk. Logs, sessions and the image cache grow by gigabytes.
How to calculate resources for peak load
Take your normal load (the VPS panel shows CPU and memory usage) and multiply it by the expected growth in orders. A guideline for a store on WooCommerce/OpenCart/Bitrix:
| Orders per day | Concurrent visitors | Configuration |
|---|---|---|
| up to 50 | up to 50 | 2 vCPU / 4 GB |
| 50–300 | 50–300 | 4 vCPU / 8 GB |
| 300–1 000 | 300–1 000 | 8 vCPU / 16 GB + Redis |
| 1 000+ | 1 000+ | separate DB server + 2 web servers |
What to set up a week before
- Page cache (nginx fastcgi cache or a plugin) — the catalog and product pages are served without PHP. This removes 70–80% of the load.
- Redis for sessions and the object cache.
- Image optimization: WebP, sizes matched to the storefront, lazy-load.
- PHP-FPM limits: set
pm.max_childrento match server memory, not the default of 5. - Monitoring with Telegram alerts: response time, 5xx errors, free memory.
- A server snapshot before the sale — roll back in 5 minutes if something goes wrong.
- A load test — 10 minutes with
abor k6 will show where the limit is.
Scaling on D-Day
On a MyCloud VPS, resources are changed in the panel: add 4 vCPU and 8 GB for the three days of the sale and pay only for those three days (daily billing), then scale back down. For stores with 1 000+ orders per day, we move the database to a separate NVMe server and add a second web server behind a load balancer; set up on request.
After the peak
Review the graphs: where the limit was, what caching achieved, how many orders “got stuck” at payment. That’s your plan for the next sale. And scale the configuration back to normal — no need to pay for peak capacity all year round.
Need help with the task from this article?
We’ll pick a configuration, calculate the cost and help with the move.