← Back to Home

WordPress wp_options autoload cleanup

WordPresswp_optionsautoloadwp-clidatabase optimizationWordPress speed

# WordPress wp_options Autoload Optimization: The Complete Guide to Cleaning Autoloaded Data (2026 Latest)

I was debugging a slow WordPress外贸站 (B2B site) running 30+ plugins. After running wp doctor check autoload-options-size, I got a shock: the autoloaded data totaled **4.2 MB**. On every single page load, WordPress executed one SQL query to deserialize all 4.2 MB into the $wp_options object cache in memory. That was the real reason TTFB was 800ms — not slow PHP, not a weak server. The database was dragging everything down.

After cleaning up the autoloaded data, the same site's TTFB dropped from 800ms to 45ms. PageSpeed score went from 52 to 89. This article documents every pitfall I hit and the complete cleanup process.

What Is wp_options Autoload

The wp_options table stores configuration data for WordPress core, themes, and all plugins. On every page load, WordPress runs:

SELECT * FROM wp_options WHERE autoload = 'yes';

This loads **every** row marked autoload='yes' into memory. The problem: plugins default to setting everything to autoload='yes', including temporary cache data, expired transients, and even debug logs. One plugin stuffing 500 KB in there with 30 plugins active equals multiple megabytes.

WP Engine's health threshold: autoload total < 800 KB. Above 1 MB and you should start cleaning. Above 2 MB and you almost certainly have a performance problem.

Step 1: Diagnose — How Big Is Your Autoload

Quick check with wp-cli doctor command

# Install doctor command
wp package install wp-cli/doctor-command --allow-root

# Check autoload total
wp doctor check autoload-options-size --allow-root

Sample output (unhealthy):

FAIL The autoloaded data size is 4.2 MB (expected: < 800 KB)

Manual query: find the largest autoload entries

If the doctor command errors out (common on shared hosting), use a manual SQL query instead:

SELECT option_name, LENGTH(option_value) AS size_bytes
FROM wp_options
WHERE autoload = 'yes'
ORDER BY LENGTH(option_value) DESC
LIMIT 20;

This lists the 20 largest autoload options directly, telling you who the culprits are.

Common sources of large autoload data

Based on actual sites I've audited, several plugin categories are the worst offenders for autoload bloat:

Step 2: Clean Expired Transients

Transients are WordPress's temporary caching mechanism — in theory they auto-delete when expired. But plugins that don't uninstall correctly, or have bugs, leave behind lots of autoload='yes' expired transient records. These records serve no purpose and take up memory for free.

Batch delete expired transients with wp-cli

# See how many autoload transients you have
wp db query "SELECT COUNT(*) FROM wp_options WHERE autoload='yes' AND option_name LIKE '_transient_%'" --allow-root

# Delete all expired transients (excluding persistent _site_transient)
wp transient delete --expired --allow-root

Deep clean: remove orphaned transient records

Some transient records exist in the database without WordPress knowing about them (plugins wrote directly to the DB not through the WordPress API). Manual cleanup needed:

-- Delete autoloaded orphaned transients (no corresponding _active_ version exists)
DELETE FROM wp_options
WHERE autoload = 'yes'
AND option_name LIKE '_transient_%'
AND option_name NOT LIKE '_transient_timeout_%'
AND option_name NOT IN (
  SELECT option_name FROM wp_options WHERE autoload = 'yes' AND option_name LIKE '_site_transient_%'
);

After executing this SQL on a typical site, you can free 200 KB - 1.5 MB of autoload space.

Step 3: Disable Autoload for Non-Essential Options

This step is the most impactful and also the easiest to get wrong. Not every option needs to load on every page — some plugin settings are only used on admin pages, but are set to autoload anyway, wasting memory on every frontend request.

Decision criteria: what can safely be changed

**Can safely change to autoload='no'**:

Absolutely do NOT change:

Safely modify autoload with wp-cli

# Check current autoload status of a specific option
wp option get {option_name} --format=json --allow-root

# Change a specific option's autoload to no (use option_name without quotes)
wp db query "UPDATE wp_options SET autoload='no' WHERE option_name='my_heavy_plugin_cache'" --allow-root

Safe approach: check first, then change one at a time. Verify the site works normally before moving to the next option.

Batch-identify plugin options that can have autoload disabled

After auditing multiple sites, I found certain plugins have particularly heavy cache options that can be safely handled in bulk:

PluginOption name patternDescriptionRecommended action
Elementor`elementor_*_cache`Generated CSS cacheChange to autoload=no
Rank Math`rank_math_*_cache`SEO cache dataChange to autoload=no
W3TC`w3tc_*`Page cache flagsKeep autoload=yes
WooCommerce`wc_*_cache`Product cacheEvaluate case-by-case

Elementor's global CSS cache entries (like elementor_global_css_0) are a common heavyweight — single entries can exceed 300 KB. Changing to autoload=no doesn't affect the frontend display, because that CSS is only needed when the Elementor editor loads.

Step 4: Redis Object Cache (Advanced Option)

If performance is still insufficient after cleanup, or if your site has too many plugins (like my 30+ plugin B2B site), consider using Redis Object Cache instead of the autoload mechanism.

The idea: Redis caches the autoload='yes' data in memory, MySQL only handles persistence, and WordPress reads from Redis instead of querying MySQL every time. The autoload data still exists, but it's no longer loaded from MySQL in full on every request.

Install Redis and the Object Cache plugin

# Install Redis server (Ubuntu 24.04)
sudo apt update && sudo apt install redis-server -y

# Confirm Redis is running
redis-cli ping
# Should return PONG

# WordPress side: install Redis Object Cache plugin (WP Redis or Redis Object Cache recommended)
wp plugin install redis-object-cache --activate --allow-root

# Confirm connection
wp redis config --host=127.0.0.1 --port=6379 --allow-root

Modify wp-config.php to enable Redis

define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_PREFIX', 'mysite_'); // Avoid key collisions on multi-site

After adding those defines, also add:

define('WP_REDIS_DISABLE_AUTH', true);

Then in wp-admin enable Object Cache: Settings → Redis → Enable Object Cache

**Note**: Some shared hosting plans don't support Redis. Run redis-cli ping to confirm connectivity before installing the plugin.

Step 5: MySQL innodb_buffer_pool_size Tuning

Autoload data is ultimately read from MySQL. The InnoDB Buffer Pool size directly affects read performance. Default settings often only allocate 128 MB, which is too small for sites with autoload exceeding 1 MB.

Check current setting

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

The value is in bytes. Conversion: 134217728 bytes = 128 MB.

Tuning guidelines

# Check total server RAM (GB)
free -h

# Calculate 60% of available RAM (e.g. 4GB total, ~3.2GB available, 60% ≈ 1.9GB)
# Set to 1610612736 bytes (~1.5 GB)

Edit my.cnf for permanent change

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

In the [mysqld] section, add or modify:

innodb_buffer_pool_size = 1610612736  # 1.5 GB, adjust to your actual RAM
innodb_buffer_pool_instances = 4 # Multiple instances reduce lock contention
sudo systemctl restart mysql

Preventing Relapse: Set Up Regular Cleanup

Cleaning once isn't enough — plugins accumulate again over time. Use wp-cron + wp-cli as a scheduled task:

Create a weekly cleanup script

# /root/cleanup-wp-options.sh
#!/bin/bash
cd /var/www/html # change to your WordPress root
wp transient delete --expired --allow-root
wp db query "DELETE FROM wp_options WHERE autoload='yes' AND option_name LIKE '_transient_%' AND option_name NOT IN (SELECT option_name FROM wp_options WHERE autoload='yes' AND option_name LIKE '_site_transient_%')" --allow-root
wp doctor check autoload-options-size --allow-root

Schedule with cron for weekly execution

# Run every Sunday at 3 AM
0 3 * * 0 /root/cleanup-wp-options.sh >> /var/log/wp-autoload-cleanup.log 2>&1

Summary: My Complete Cleanup Sequence

1. **Diagnose**: wp doctor check autoload-options-size to confirm total size

2. **Find the biggest offenders**: SELECT option_name, LENGTH(option_value) FROM wp_options WHERE autoload='yes' ORDER BY LENGTH(option_value) DESC LIMIT 20

3. **Clean transients**: wp transient delete --expired

4. **Disable autoload**: Elementor cache and other large entries → autoload='no'

5. Redis caching: add Redis Object Cache for plugin-heavy sites

6. MySQL tuning: innodb_buffer_pool_size = 60% of available RAM

7. Automate: weekly cron to prevent re-accumulation

What's Next

If you're debugging a slow WordPress site, run wp doctor check autoload-options-size first — a few minutes of diagnosis might be more effective than upgrading to a more expensive server plan.

👉 Interested in AI tools to boost WordPress workflow efficiency? MiniMax Token Plan provides China-accessible AI model access, great for batch content generation and automated workflows: https://platform.minimaxi.com/subscribe/token-plan?code=E5yur9NOub&source=link

📌 This article was AI-assisted generated and human-reviewed | TechPassive — An AI-driven content testing site focused on real tool reviews

🔗 Recommended Tools

These are carefully selected tools. Using our affiliate links supports us to keep producing quality content:

☁️ DigitalOcean Cloud ⚡ Vultr VPS 📚 WordPress Books 🔍 WordPress SEO Books 🌐 Web Hosting Books 🐳 Docker Books 🐧 Linux Books 🐍 Python Books 💰 Affiliate Marketing 💵 Passive Income Books 🖥️ Server Books ☁️ Cloud Computing Books 🚀 DevOps Books ⭐ MiniMax Token Plan 🔍 Cloud Search
← Back to Home