The front end of your site is fast (thanks to page caching), but wp-admin crawls: the dashboard takes seconds to load, saving a post hangs, and the plugins page times out. That’s because the admin area is never page-cached. Every click runs PHP, loads every active plugin, and queries the database. Here’s how to find the bottleneck and fix it.
First: measure
- Query Monitor plugin: on a slow admin page, check page generation time, database queries (slow and duplicate ones, by component), HTTP API calls (external requests), and PHP errors.
- Server side: is CPU maxed out, or is RAM in swap?
htop
sudo tail -n 30 /var/log/php8.3-fpm.log # "server reached pm.max_children"?
See htop.
1. Slow external HTTP requests
A very common cause: plugins or themes calling remote servers (licence checks, update checks, news feeds, analytics) while rendering the admin page. If a remote server is slow or unreachable from your VPS, every admin page waits for the timeout. Query Monitor’s HTTP API Calls panel shows them, with durations.
Fixes: update or replace the plugin, disable its dashboard widgets, or make sure your VPS has working DNS and outbound HTTPS. See change DNS server on Linux.
2. No persistent object cache
Without one, WordPress repeats the same queries on every admin request. Add Redis:
sudo apt install -y redis-server php8.3-redis
wp plugin install redis-cache --activate && wp redis enable
See Redis object cache.
3. Bloated autoloaded options
Megabytes of autoloaded options load on every request. Check the total, and clean up leftovers from removed plugins. See WordPress autoloaded options.
4. Heavy plugins
Some plugins add expensive work to every admin page: big dashboard widgets, live statistics, security scans, page builders’ admin scripts. Use Query Monitor’s “Queries by component” and “Scripts” panels, and test by deactivating suspects on staging. See WordPress plugin conflicts.
5. Heartbeat API
Open admin tabs send AJAX requests every 15–60 seconds. Multiply that by editors and tabs, and the PHP workers stay busy. Slow it to 60 seconds or more. See WordPress Heartbeat API.
6. WP-Cron running on admin requests
Overdue scheduled tasks (backups, imports, email queues, Action Scheduler) run during page loads. Move cron to the system:
define( 'DISABLE_WP_CRON', true );
…plus a real cron job. See WordPress real cron.
7. Not enough PHP workers or memory
The admin area uses more memory than the front end (WP_MAX_MEMORY_LIMIT). If all PHP-FPM workers are busy, requests queue up. Tune pm.max_children to your RAM, and check memory_limit. See PHP-FPM tuning and WordPress memory limit.
8. OPcache missing or too small
Without OPcache, PHP recompiles every file on every request. Make sure it’s enabled, with enough memory for WordPress and all plugins:
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
See php.ini settings.
9. Old PHP version
PHP 8.x is significantly faster than 7.x. Upgrade (after checking compatibility). See WordPress PHP 8 compatibility.
10. Database size and indexes
Large wp_postmeta, wp_options or WooCommerce order tables make admin lists slow. Clean revisions and transients, enable HPOS for WooCommerce, and consider better indexes. See WordPress database optimization.
11. Admin lists showing too much
Posts or orders lists showing 100+ items per page, with many columns from plugins, are slow. Reduce “Number of items per page” in Screen Options, and hide unneeded columns.
12. Network distance and server size
If your server is far from your editors, every admin click carries that latency. And a small VPS shared by a busy site plus heavy admin work may simply be undersized. See choosing a VPS location and WordPress VPS hosting.
Quick reference
| Symptom in Query Monitor | Likely fix |
|---|---|
| Slow HTTP API calls | Plugin calling home; fix DNS or outbound access, or replace the plugin |
| Many duplicate queries | Object cache (Redis) |
| Huge autoload size | Clean wp_options |
| One component dominating | Replace or configure that plugin |
| High time but few queries | PHP workers, OPcache, CPU |
Related: WordPress VPS performance tuning and WordPress TTFB.