Stacking caching plugins
Two page caches don't cache twice as well — they invalidate each other, double storage, and produce the bugs where customers see each other's carts. One cache per layer, configured properly.
Server & Website Performance Optimization
Most "we need a bigger server" moments are actually configuration debt: default MySQL buffers, PHP-FPM pools sized by guesswork, no opcode cache, slow queries nobody ever profiled. I tune from evidence — measure, change one layer, measure again — and the result is usually a faster stack on the hardware you already pay for.
Server performance optimization is the measured tuning of each layer of a web stack — web server, PHP runtime, database, and caching — so the hardware you already own delivers the speed it's capable of. It starts with a baseline benchmark, finds the actual bottleneck (it's usually the database or missing caches, not CPU), fixes one layer at a time, and re-measures. Most untuned stacks halve their page times without any hardware change.
Written by Ranjan Chatterjee, Infrastructure Consultant · Linux Server Specialist · 15+ years in production Linux · Last reviewed
Slow doesn't always look like slow. These are the shapes it takes in production — and each one has a findable cause.
Five steps that find the real bottleneck — and stop you from optimizing the wrong layer.
Record TTFB and full-page times for your real money pages — home, product, checkout — under normal load. Without a baseline, every later change is an opinion.
One request travels network → web server → PHP → database. Time each hop (curl timings, PHP profiling headers, query logs) — the slow layer is rarely the one everyone suspects.
MySQL will tell you exactly which queries hurt if you ask: log queries over one second for a day. The top three entries usually explain most of the pain.
A server dipping into swap makes everything mysteriously slow while CPU looks idle. Free memory, buffer pool size, and PHP-FPM totals must add up to less than RAM.
Stacked simultaneous changes can't be attributed — the classic result is a faster site and nobody knows which change did it (or which one is silently hurting). One layer at a time.
Every one of these comes from a real engagement — usually from before I was called.
Two page caches don't cache twice as well — they invalidate each other, double storage, and produce the bugs where customers see each other's carts. One cache per layer, configured properly.
Un-indexed queries and unconfigured buffers scale beautifully — they waste the bigger server too. Tune first; if you still need hardware, at least you'll buy the right amount.
A config tuned for someone else's RAM and workload can make yours worse — oversized buffers cause swapping, which is slower than the defaults ever were. Tuning follows measurement, not paste.
The homepage is cached and fast for everyone. Business slowness lives in the uncached paths — search, checkout, logged-in dashboards — which is exactly where benchmarks rarely look.
"CPU is at 90%" is a symptom with a dozen causes: a runaway cron, a missing index, a scraping bot, PHP without OPcache. Naming the process and query behind the number is the actual diagnosis.
An honest comparison — each option is right in some situations, including the free ones.
| Option | The right choice when… | Limits & risks |
|---|---|---|
| Caching plugin / DIY | A single WordPress site on decent hosting where page caching alone gets you most of the win. Cheap, quick, reversible. | Plugins can't fix server-level problems: MySQL buffers, PHP-FPM sizing, missing indexes. When logged-in traffic is the slow part, page caching by definition can't help. |
| Host's bigger plan | You're genuinely at capacity — measured, not guessed — or on hardware old enough that new-generation CPUs are a real jump. | Upgrading an untuned stack moves the same bottleneck to a bigger invoice. Hosts sell tiers, not diagnosis; "upgrade" is their answer to every symptom. |
| Specialist tuning | Real business traffic, database-heavy applications, WooCommerce/logged-in slowness, or when you want the before/after numbers proven rather than promised. | Costs more than a plugin. Extremely inefficient application code can bound the gains — in which case you'll get that finding in writing rather than an endless tuning engagement. |
The same disciplined path on every engagement — scoped, planned, executed with checkpoints, handed off clean.
A short brief or call to understand your stack, the real problem, and what a good outcome looks like.
A clear architecture plan — steps, risks, rollback and timeline — agreed before anything touches production.
Hands-on work with checkpoints. You see progress; nothing changes on your servers silently.
Documentation, access cleanup and a clear path for what comes next. No lock-in, no mystery.
Untuned stacks routinely see page times halve, and database-bound apps often gain more — but I won't promise a number before measuring. The first deliverable is a baseline; the last is the same benchmark, re-run.
Diagnosis and tuning typically complete within 3–5 days: baseline first, then layer-by-layer changes with measurements between them, then the final before/after report. Urgent "the site is crawling right now" cases can start same-day with triage first and the full pass after.
Fixed price per server or per stack, quoted after a short description of your setup — no open-ended hourly tuning. If diagnosis shows the honest answer is application code or a hardware ceiling rather than configuration, you get that finding in writing instead of an endless engagement.
Upgrade after tuning, not instead of it — otherwise you carry the same bottlenecks onto more expensive hardware. Often the upgrade proves unnecessary; when it isn't, tuning first means you buy the right size.
Yes — that's a large share of this work. The fix is usually layered: object caching, OPcache, PHP-FPM sizing, slow-query cleanup, and page caching that actually survives cart sessions.
Each change is applied one layer at a time, measured, and reversible — configs are versioned before editing and nothing is "optimized" blind. The riskiest class of change (database indexes on big tables) is scheduled into your low-traffic window with tested rollback.
For static assets and global audiences, a CDN helps and is cheap — often free at Cloudflare's tier. But a CDN can't fix a slow backend: TTFB on dynamic pages comes from your server. Tune the origin first; then a CDN makes a fast site fast everywhere.
Three things: the tuned stack itself, a before/after benchmark on your real pages (not synthetic scores), and a written change log with the reasoning for every modification — plus a headroom estimate for when scaling genuinely becomes necessary.
When measurements say so: a properly indexed database whose working set genuinely exceeds RAM, CPU saturated by legitimate application work after OPcache and caching are in place, or real traffic growth against a tuned stack. At that point the same measurements tell you exactly which resource to buy — which is the difference between scaling and guessing.
The tuning pass is one-time and holds as long as the workload resembles what was measured. Traffic growth, new plugins, and data growth shift bottlenecks over time — most clients either re-benchmark yearly or fold monitoring into a managed administration retainer so regressions get caught as trends, not complaints.
Plain-language definitions — so the report reads like information, not incantation.
Engagements that commonly pair with this one.
Security, performance, cost, and disaster recovery — one honest report.
View service24×7 monitoring, patching, backups, and incident response on a flat monthly retainer.
View serviceSites, mail, databases, DNS — migrated in a planned cutover, not a leap of faith.
View serviceOne paragraph is enough: your stack, the symptom, and when you need it solved. Emergencies are answered first.