In diesem Artikel geht es um WordPress und die Transient API, ein Mechanismus, der wie ein interner Cache für WordPress funktioniert und Datenbankabfragen für einen definierbaren Zeitraum zwischenspeichert.
Wie man die Transient API benutzt, kann hier nachgelesen werden. Doch in diesem Beitrag geht es mehr um ein Problem mit bestehenden, alten Transients. Laut Dokumentation sollen diese, nachdem sie abgelaufen sind, automatisch gelöscht werden. Die Transients werden in der “options” Tabelle abgelegt. Ich hatte letztens ein WordPress-Projekt in Händen, bei dem diese Tabelle über 11.000 Datensätze hatte, aber nur 880 davon waren wirklich Optionen. Alles andere waren nicht gelöschte Transients-Datensätze. Dass dies nicht gerade der Seitenperformance zuträglich ist, kannst Du Dir wohl denken. ;-)
Wenn Du also in Deiner Datenbank eine recht große Tabelle “wp_options” (oder welchen Prefix Du auch immer statt dem Standard verwendest) vorfindest, dann spricht Einiges dafür, dass dort abgelaufene Transients-Datensätze liegen. Abfragen lässt sich dies recht einfach mit dieser SQL-Abfrage:
SELECT count(*) FROM wp_options
WHERE option_name LIKE('%\_transient\_%');
Das Ergebnis der Abfrage liefert die Anzahl an Datensätzen, die Transients enthalten. Diese müssen natürlich nicht alle abgelaufen sein und könnten daher noch ihren beabsichtigten Zweck – WordPress-Abfragen durch Caching zu beschleunigen – erfüllen. Jedoch bei mehreren Tausend Datensätzen ist die Wahrscheinlichkeit groß, dass nicht mehr alle Datensätze aktiv sind.
Du kannst in jedem Fall diese Datensätze komplett aus der Tabelle löschen. Falls einige Transients noch aktiv waren, so werden sie automatisch wieder angelegt. Das kann beim ersten Seitenaufruf nach der Löschung zu einer kurzen Verzögerung führen, ist aber vorbei, sobald die neuen Transients erzeugt wurden.
Zum Löschen der Transients gibt es zwei Möglichkeiten. Du kannst die Datensätze manuell aus der Datenbank löschen oder Du installierst ein Plugin, welches die Löschung für Dich vornimmt.
Manuell geht das mit der folgenden Abfrage:
DELETE FROM wp_options
WHERE option_name LIKE('%\_transient\_%');
Damit werden alle Transient-Datensätze aus der Tabelle “wp_options gelöscht.
Als Plugin-Lösung gibt es zwei Plugins, die ich zu diesem Thema gefunden habe und die einen guten Eindruck machen.
Zum einen den Transients Manager und zum anderen Delete Expired Transients. Das zweite Plugin hat noch die Besonderheit, dass man es so einstellen kann, dass es nach der Aktivierung eigenständig täglich nach abgelaufenen Transients sucht und diese gleich löscht, so dass sich die Datenbank nicht mehr aufbläht.
Falls Du noch Fragen zu WordPress und die Transient API hast, dann hinterlasse bitte einen Kommentar.
Fragen oder Feedback zu diesem Artikel