Langsamer WordPress-Admin-Bereich: die Tabelle „wp_options“ und die Autoload-Daten

WordPress 5 Min. Lesezeit

Sollte das WordPress-Admin-Panel von Monat zu Monat langsamer werden, obwohl Sie kein neues Plugin installiert haben, empfiehlt es sich, die Tabelle „wp_options“ zu überprüfen. WordPress lädt zu Beginn jeder Anfrage – noch vor dem Laden des WordPress-Themes und der Plugins – mit einer einzigen Abfrage alle automatisch zu ladenden (autoload) Einstellungen und speichert diese im Arbeitsspeicher. Dies geschieht bei jedem Seitenaufruf, auf jeder Admin-Seite, bei jeder AJAX-Anfrage und bei jedem Cron-Lauf.

Ursprünglich war dies für kleine Datenmengen gedacht: die Website-Adresse, die aktive Vorlage, die Zeitzone. Viele Plugins speichern hier jedoch ihren Cache, ihr Protokoll oder sogar einen umfangreichen Einstellungsblock, und auch die Einstellungen deinstallierter Plugins bleiben hier erhalten. Schon ein oder zwei Megabyte an Autoload-Daten verlangsamen jede Anfrage spürbar. Über die allgemeine Wartung der Datenbank (Revisionen, temporäre Daten, Bereinigungs-Plugins) berichten wir in unserem Blogbeitrag.

Wie viel kostet Ihre Website?

Seit WordPress 6.6 warnt die Funktion „Website-Zustand“ (Menü „Extras“), wenn die automatisch geladenen Einstellungen zu umfangreich sind: „Die automatisch geladenen Optionen können die Leistung beeinträchtigen“. Den genauen Wert können Sie mit WP-CLI abfragen:

cd ~/public_html
wp option list --autoload=on --format=total_bytes

Auf unserer Test-Website beträgt diese Größe 40.775 Byte, also etwa 40 KB, was für eine neue Website typisch ist. Einige hundert KB sind noch in Ordnung, ab 1 MB lohnt es sich, der Sache nachzugehen, und bei mehreren MB werden Sie mit Sicherheit etwas finden. Auch die Anzahl der Zeilen spielt eine Rolle: Selbst mehrere tausend kleine Einstellungen können die Geschwindigkeit beeinträchtigen.

Was belegt Speicherplatz?

Die wichtigsten Funktionen mit WP-CLI:

wp option list --autoload=on --fields=option_name,size_bytes --format=csv | sort -t, -k2 -n -r | head -20

Oder in phpMyAdmin (cPanel-Gruppe „Datenbanken“) auf der Registerkarte „SQL“ der Datenbank. Ersetzen Sie das Tabellenpräfix (im Beispiel „1vL7334_“) durch Ihr eigenes; der Befehl „wp db prefix“ gibt es aus, und Sie sehen es auch in der Liste auf der linken Seite von phpMyAdmin:

SELECT option_name, autoload, ROUND(LENGTH(option_value) / 1024, 1) AS kb
FROM 1vL7334_options
WHERE autoload IN ('yes', 'on', 'auto-on', 'auto')
ORDER BY LENGTH(option_value) DESC
LIMIT 20;

phpMyAdmin: Die wichtigsten automatisch geladenen Einstellungen in der Tabelle „wp_options“

Seit WordPress 6.6 können in der Spalte „autoload“ nicht mehr nur die Werte „yes“ und „no“ stehen: „on“ und „auto-on“ sind obligatorisch, „auto“ bedeutet eine automatische Ladefunktion, die WordPress selbst bestimmt, während „off“ und „auto-off“ eine nicht automatische Ladefunktion bezeichnen. Daher lässt die Bedingung „WHERE autoload = 'yes'“ aus den alten Anleitungen heute einen Großteil der Einträge außer Acht.

Die Namen verraten viel über ihren Ursprung: „wf_“ steht für Wordfence, „rocket_“ für WP Rocket, „elementor_“ für Elementor, „_transient_“ und „_site_transient_“ für temporäre Daten (Cache), während „cron“ für die eigene Zeitplanung von WP-Cron steht (bei einem stark frequentierten Online-Shop kann diese allein bereits über 1 MB betragen). So können Sie einen Einblick in den Anfang eines großen Wertes gewinnen, ohne mehrere Megabyte in das Terminal eingeben zu müssen:

wp option get rocket_cache_files --format=json | head -c 500

Die Zusammenfassung nach Plugins (nach Präfix) in SQL:

SELECT SUBSTRING_INDEX(option_name, '_', 2) AS elotag,
       COUNT(*) AS db,
       ROUND(SUM(LENGTH(option_value)) / 1024) AS kb
FROM 1vL7334_options
WHERE autoload IN ('yes', 'on', 'auto-on', 'auto')
GROUP BY elotag
ORDER BY kb DESC
LIMIT 20;

Korrektur

Sichern Sie zuvor die Datenbank. Auf den cPanel-Servern von aWh funktioniert der Befehl „wp db export“ nicht; verwenden Sie daher den Befehl „mysqldump“ (Artikel zu WP-CLI) oder die Registerkarte „Exportieren“ in phpMyAdmin.

1. Deaktivieren Sie das automatische Laden dort, wo es nicht erforderlich ist

Eine Einstellung sollte nur dann automatisch geladen werden, wenn sie bei fast jedem Seitenaufruf benötigt wird. Was nur auf einer Einstellungsseite oder für eine seltene Aufgabe erforderlich ist, erhält das Plugin auch dann, wenn es nicht vorab geladen wird, sondern nur über eine separate Abfrage:

wp option set-autoload rocket_cache_files off
wp cache flush

Sollte das Plugin die Daten beim nächsten Speichervorgang erneut durch automatisches Laden überschreiben, handelt es sich um einen Fehler des Plugins; melden Sie dies bitte dem Entwickler.

2. Löschen Sie die abgelaufenen Zwischendaten

WordPress löscht abgelaufene temporäre Daten erst dann, wenn jemand versucht, sie zu lesen, oder wenn sie von der täglichen Bereinigung erfasst werden. Was nie wieder benötigt wird, kann dort verbleiben:

wp transient list --format=count
wp transient delete --expired

Das vollständige Löschen (wp transient delete --all) ist sicher; die Plugins bauen die von ihnen verwendeten Daten neu auf; das erste Laden der Seiten kann in diesem Fall etwas langsamer sein.

3. Löschen Sie die Einstellungen der entfernten Plugins

Wenn Sie ein Plugin definitiv nicht mehr verwenden und es nicht in der Liste („wp plugin list“) aufgeführt ist, können Sie dessen Einstellungen löschen. Schritt für Schritt:

wp option list --search="regibovitmeny_*" --fields=option_name,size_bytes
wp option delete regibovitmeny_settings regibovitmeny_cache

In SQL muss der Unterstrich maskiert werden, da im LIKE-Muster das Zeichen _ für ein beliebiges Zeichen steht:

DELETE FROM 1vL7334_options WHERE option_name LIKE 'regibovitmeny\_%';

Löschen Sie nur dann anhand eines Präfixes, wenn dieses eindeutig zu einem Plugin gehört; ein zu kurzes Muster kann auch die Einstellungen anderer Plugins beeinträchtigen.

4. Komprimieren Sie die Tabelle

Nach dem Löschen verringert sich die Größe der Tabelle auf der Festplatte nicht. Wählen Sie in phpMyAdmin die Tabelle „wp_options“ aus und wählen Sie die Funktion „Tabelle optimieren“ oder führen Sie folgenden Befehl über die Befehlszeile aus: mysql "$(wp config get DB_NAME)" -e "OPTIMIZE TABLE $(wp db prefix)options".

Überprüfung und Prävention

Messen Sie die Ladezeit erneut (mit dem Befehl „wp option list --autoload=on --format=total_bytes“) und überprüfen Sie die Seite „Website-Zustand“. Die Ladezeit der Admin-Oberfläche wird auch auf der Registerkarte „Netzwerk“ der Entwicklertools Ihres Browsers angezeigt; die Veränderung lässt sich bereits bei einer Reduzierung um einige hundert KB feststellen.

Die beste Vorbeugungsmaßnahme besteht darin, die Anzahl der Plugins in Grenzen zu halten und nicht verwendete Plugins zu löschen (und nicht nur zu deaktivieren). Überprüfen Sie halbjährlich die Größe des Autoload-Ordners; weitere Tipps zur Beschleunigung finden Sie im Artikel zur Optimierung von WordPress, während die anderen aufquellenden Tabellen in den Artikeln zu wp_postmeta und Action Scheduler behandelt werden. In unseren cPanel-Hosting-Paketen kann auch AccelerateWP zur Beschleunigung beitragen.

Zurück: WordPress-Artikel (43)