The WordPress Performance Profiling Toolkit We Actually Use
Not a plugin roundup. Four tools that actually found something on a real WordPress VIP network, what each one is blind to, and which symptom sends you to which one.
Who merges so late, past midnight's chime, still pushing bugs to master's line?
Not a plugin roundup. Four tools that actually found something on a real WordPress VIP network, what each one is blind to, and which symptom sends you to which one.
Every fix in this series landed at a different layer — application code, shared plugin, edge config, vendor dashboard. The scoping decision matters more than the fix itself, and it’s rarely obvious from the bug report.
The runtime existence check that kept one index rewrite safe to deploy in either order was a one-off. Here’s the same pattern turned into a reusable pre-deploy CI gate for a whole network.
A one-line exception guard turned into a 465-line diff because a formatter had rewritten the whole file first. The fix wasn’t the guard — it was separating the reformat from the change before anyone had to review it.
A shared plugin version bump, a branch-validation step, a version-skew incident, five index migrations across a network, and a documented PR — run as one supervised agent loop instead of six separate manual steps.
An index that fixes one site’s slow query has a write cost paid by every site sharing that database tier. A checklist for deciding whether a covering index actually pays for itself, before adding it.
Two separate incidents on the same network turned out to be the same root cause wearing different clothes: a cache key that let the request decide what it means, instead of the other way around.
A shared plugin update needed five new indexes across a multisite network. The bug that almost shipped wasn’t in the indexes — it was in assuming a diff between two versions was the same thing as the full version.
Search Console said one site’s average crawl response time was roughly double a near-identical sibling’s. The access logs disagreed — until they were split by bot type, and a cache-busting tracking parameter fell out.
The SAVEQUERIES mu-plugin from the last post left you with a raw log file and a promise to wrap WP-CLI commands around it. Here’s the tool, not just the promise.