WordPress-Tabelle wp_options optimieren

Hinweis: Dieser Beitrag richtet sich an erfahrene WordPress-Benutzer mit entsprechenden Datenbankkenntnissen. Bevor irgendwelche Änderungen durchgeführt werden, sollte unbedingt ein Datenbank-Backup angelegt werden!

WordPress speichert nahezu alle Einstellungen in der Datenbanktabelle wp_options. Das „Gemeine“ daran ist, dass bei jedem Aufruf von WordPress alle Einträge aus dieser Tabelle geladen werden, die im Feld autoload den Wert yes stehen haben. Betreibt man eine WordPress-Installation seit vielen Jahren, hat viele Themes und Plugins eingespielt und wieder gelöscht, dann können sich in dieser Tabelle viele Einträge ansammeln, die die Performance von WordPress merklich beeinträchtigen können.

Um zu prüfen, welches Volumen sich angesammelt hat und ob Handlungsbedarf besteht, kann man folgendes SQL-Statement direkt in der Datenbank ausführen. Noch ein kurzer Hinweis, die folgenden Statements gehen vom Tabellennamen wp_options aus. Nutzt man einen anderen Prefix (z.B. mywp_options) muss man die SQL-Statements natürlich entsprechend anpassen. Wie gesagt, zunächst wird geprüft, welche Datenmenge sich überhaupt angesammelt hat. Diesen Wert kann man über folgendes Statement abfragen:

SELECT
	'Datenmenge in Kilobyte' AS name,
	ROUND(SUM(LENGTH(option_value)) / 1024) AS value
FROM
	wpadxs_options
WHERE
	autoload = 'yes';

Der Wert wird in Kilobyte angegeben, also entspricht 1000 = 1000 KB und damit 1 MB. Ein Wert unter 1000, also weniger als 1 MB ist noch in Ordnung, wobei 1 MB schon ‚eine Menge‘ ist. Alles was mehr als 1000 ist sollte ernst genommen und genauer geprüft werden. Hier ist die Wahrscheinlichkeit groß, das etwas nicht stimmt.

Über folgendes Statement kann man sich dann die vom Datenumfang her größten Optionen anzeigen lassen:

SELECT
	'Datenmenge in Kilobyte' AS name,
	ROUND(SUM(LENGTH(option_value)) / 1024) AS value
FROM
	wp_options
WHERE
	autoload = 'yes'
UNION
SELECT
	'Anzahl geladener Daten',
	count(*)
FROM
	wp_options
WHERE
	autoload = 'yes'
UNION (
	SELECT
		option_name,
		length(option_value)
	FROM
		wp_options
	WHERE
		autoload = 'yes'
	ORDER BY
		length(option_value)
		DESC
	LIMIT 10)

Diese sollte man unbedingt genauer prüfen. Gibt es eine Erklärung, weshalb diese Optionen so groß sind? Sind alle davon noch erforderlich? Und genau jetzt geht die Detailarbeit los. Man sollte jeden Eintrag auf Muster, bekannte Strings und Abkürzungen prüfen. Ggf. hat ein altes Theme oder Plugin Spuren hinterlassen, die nicht mehr erforderlich sind. Die identifizierten Strings kann man dann nutzen, um über alle Optionen zu suchen – und diese dann ggf. zu löschen.

Ich konnte auf diesem Weg die Menge der per Autoload geladenen Daten aus der wp_options-Tabelle von fast 3 MB auf 130 KB reduzieren. In meinem Fall hat ein altes Theme jede Menge Einstellungen hinterlassen, außerdem hat ein Plugin die Tabelle missbraucht, um wirklich große Datenmengen darin zu speichern, die dann auch noch per Autoload geladen werden sollten.

Schreibe einen Kommentar