Das Problem: Zu viele autoloaded Options
WordPress lädt bei jedem Seitenaufruf alle Options mit autoload='yes'
aus der Datenbank. Bei 546 autoloaded Options mit 960 KB Gesamtgröße wird jeder Request unnötig verlangsamt.
Achtung: WordPress bereinigt keine Autoload-Optionen von selbst – das heißt, man muss das selbst tun!
Hier zeige ich auf, wie man das Problem löst.
Analyse durchführen
MySQL-Credentials automatisch extrahieren
# SSH-Verbindung ssh user@server # Zum WordPress-Verzeichnis cd /home/domain.com/public_html # Credentials aus wp-config.php extrahieren DB_NAME=$(grep DB_NAME wp-config.php | cut -d "'" -f 4) DB_USER=$(grep DB_USER wp-config.php | cut -d "'" -f 4) DB_PASS=$(grep DB_PASSWORD wp-config.php | cut -d "'" -f 4) DB_HOST=$(grep DB_HOST wp-config.php | cut -d "'" -f 4 | cut -d':' -f1) PREFIX=$(grep table_prefix wp-config.php | cut -d "'" -f 2)
Status prüfen
mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME -e " SELECT COUNT(*) as 'Anzahl Options', ROUND(SUM(LENGTH(option_value))/1024,2) as 'Größe (KB)' FROM ${PREFIX}options WHERE autoload='yes';"
Bereinigung durchführen
1. Backup erstellen (kritisch!)
mysqldump -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME ${PREFIX}options > \ /tmp/options_backup_$(date +%Y%m%d_%H%M%S).sql
2. Transients bereinigen
Transients sollten niemals autoloaded sein:
mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME -e " UPDATE ${PREFIX}options SET autoload='no' WHERE option_name LIKE '%_transient_%' AND autoload='yes'; DELETE FROM ${PREFIX}options WHERE option_name LIKE '%_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();"
3. Plugin-spezifische Bereinigung
mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME << EOF -- Logs und Debug-Daten UPDATE ${PREFIX}options SET autoload='no' WHERE option_name LIKE '%_log%' OR option_name LIKE '%_debug_%'; -- Cache-Einträge UPDATE ${PREFIX}options SET autoload='no' WHERE option_name LIKE '%_cache_%'; -- Elementor Assets (werden bei Bedarf regeneriert) UPDATE ${PREFIX}options SET autoload='no' WHERE option_name IN ('_elementor_assets_data', 'elementor-custom-breakpoints-files'); -- WooCommerce Payment Gateways (nur beim Checkout benötigt) UPDATE ${PREFIX}options SET autoload='no' WHERE option_name LIKE 'woocommerce_stripe_%_settings' OR option_name LIKE 'woocommerce_fkwcs_%'; -- Cron (kann auf 'no') UPDATE ${PREFIX}options SET autoload='no' WHERE option_name = 'cron'; EOF
4. Leere Options deaktivieren
mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME -e " UPDATE ${PREFIX}options SET autoload='no' WHERE autoload='yes' AND LENGTH(option_value) = 0 AND option_name NOT IN ('WPLANG','upload_path','category_base','tag_base');"
Automatische Wartung einrichten
Wartungsscript erstellen
# Scripts-Verzeichnis außerhalb des Web-Roots mkdir -p /home/domain.com/scripts chmod 750 /home/domain.com/scripts cat > /home/domain.com/scripts/autoload_maintenance.sh << 'EOF' #!/bin/bash WP_PATH="/home/domain.com/public_html" cd $WP_PATH # DB Credentials extrahieren DB_NAME=$(grep DB_NAME wp-config.php | cut -d "'" -f 4) DB_USER=$(grep DB_USER wp-config.php | cut -d "'" -f 4) DB_PASS=$(grep DB_PASSWORD wp-config.php | cut -d "'" -f 4) DB_HOST=$(grep DB_HOST wp-config.php | cut -d "'" -f 4 | cut -d':' -f1) PREFIX=$(grep table_prefix wp-config.php | cut -d "'" -f 2) # Bereinigung mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME -e " DELETE FROM ${PREFIX}options WHERE option_name LIKE '%_transient_%' AND autoload='yes'; UPDATE ${PREFIX}options SET autoload='no' WHERE option_name LIKE '%_log%' AND autoload='yes';" # Cache leeren rm -rf $WP_PATH/wp-content/cache/* rm -rf $WP_PATH/wp-content/litespeed/* EOF chmod +x /home/domain.com/scripts/autoload_maintenance.sh
Cron-Job einrichten
# Wöchentliche Ausführung (crontab -l 2>/dev/null; echo "0 4 * * 0 /home/domain.com/scripts/autoload_maintenance.sh") | crontab -
Ergebnisse
In meinem Praxistest konnte ich die autoloaded Options von:
- 546 Options (960 KB) auf
- 208 Options (3.07 KB) reduzieren
Das entspricht einer 98% Reduktion der Datenmenge.
Wichtige Hinweise
Sicherheit
- Scripts niemals im public_html-Verzeichnis speichern
- Immer Backup vor Änderungen erstellen
- Bei Fehlern:
mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME < /tmp/options_backup_*.sql
Kompatibilität
- Getestet mit CyberPanel/OpenLiteSpeed
- WordPress 6.x kompatibel
- WooCommerce-spezifische Optimierungen enthalten
Performance-Benchmark
# Ladezeit vor/nach Optimierung testen for i in {1..5}; do curl -o /dev/null -s -w "Test $i: %{time_total}s\n" https://domain.com done
Empfohlene Grenzwerte
- Optimal: < 100 autoloaded options, < 100 KB
- Akzeptabel: < 200 options, < 800 KB
- Problematisch: > 300 options oder > 1 MB
Mit 3 KB autoloaded data ist die Performance-Optimierung maximal – weniger Options bedeuten weniger PHP-Array-Verarbeitung bei jedem WordPress-Request.