Wordpress Performance verbessern
Beitrag vom 27. November 2008 - Kategorie: Tipps und Tricks, Wordpress
Datenbankbackup, Tabellen optimieren, Slow Queries beseitigen und Cache – alles keine Hexerei.
Wer kennt das nicht: Da hat man, um schnell seine Seite aufzubauen, Wordpress installiert, ein Theme ausgesucht, ein paar Plugins aktiviert und nun läuft alles. Bis…
Ja, bis die Seite ruckelt und man vorsichtig beim Provider anfragt, woran es denn liegen könnte. Der erzählt dann etwas von Slow Queries und dass man den Server überfordert, worunter die anderen User leiden, denn schließlich hat man so einen Server ja nicht für sich allein. Der Provider schlägt vor, Tabellen zu indizieren oder statt des Privatkunden-Hosting-Paketes den dedizierten Server zu nutzen, der zehnmal so teuer ist.
Dann doch lieber die Tabellen indizieren. Wenn man nur wüsste, wie. Und wo. Und überhaupt. Dabei ist das alles keine Hexerei. Man muss sich nur ein wenig mit der Datenbank beschäftigen.
So eine Datenbank ist ein gefährliches Ding. Keine Änderung ist rückgängig zu machen. Darum sollte man wissen, was man tut, bevor man in der Datenbank herumspielt. Nicht nur deshalb, sondern generell ist die oberste Regel für jede Wordpress-Installation:
1. Regelmäßig ein Datenbankbackup machen.
Also eine Sicherungskopie aller Daten speichern. Am besten bei sich auf dem eigenen Rechner. Für das Datenbankbackup gibt es Plugins, aber warum soll man ein Plugin benutzen, wenn man die Arbeit ganz einfach selbst erledigen kann? Wie es geht, hat Frank Bültge sehr anschaulich beschrieben, so dass ich an dieser Stelle auf eine Erklärung verzichten möchte. Frank hat seiner Erläuterung Screenshots beigefügt, da kann man wirklich nichts falsch machen. Schaut es Euch dort an:
Datenbankbackup bei Frank Bültge
Wie „regelmäßig“ Ihr speichern möchtet, hängt von der Fluktuation auf Eurer Seite ab. Wenn täglich neue Artikel oder Kommentare kommen, ist sicher ein tägliches Backup zu empfehlen. Auf jeden Fall solltet ihr vor der Aktivierung eines neuen Plugins und vor jeder Arbeit an der Datenbank ein Backup machen.
2. Tabellen überprüfen
Wenn Ihr das Backup erstellt habt, wisst Ihr ja nun, wo Eure Datenbank liegt und welche Tabellen darin sind. Schaut Euch die Tabellen mal genau an. Braucht Ihr die alle? Oder sind da noch Tabellen von Plugins drin, die ihr längst gelöscht habt? Wordpress legt folgende Tabellen an (Stand: WP 2.2):
wp_categories
wp_comments
wp_link2cat
wp_links
wp_options
wp_post2cat
wp_postmeta
wp_posts
wp_usermeta
wp_users
Alle anderen Tabellen stammen von Plugins und heißen dann auch so wie das Plugin, z.B. wp_ratings.
Wenn noch Tabellen von Plugins vorhanden sind, die Ihr nicht mehr braucht, dann löscht diese Tabellen. Damit schafft ihr wieder Platz in der Datenbank. Achtung! Nur löschen, wenn Ihr sicher seid, dass die Tabelle zu einem nicht benötigten Plugin gehört. Ihr wisst ja: Alle Änderungen in der Datenbank sind nicht rückgängig zu machen.
Nebenbei bemerkt: Plugins, die ihr nicht mehr braucht, solltet Ihr natürlich auch vom Server löschen und nicht einfach deaktiviert dort liegen lassen.
3. wp_options bereinigen
a) wp_options Einstellungen
Viele Plugins legen nicht nur Tabellen an, sondern auch Felder in der Wordpress-Tabelle wp_options. Wenn ihr bei einem aktiven Plugin Einstellungen vornehmen könnt, finden sich diese auch in der wp_options Tabelle.
Öffnet in Eurer Datenbank die Tabelle wp_options. Dort sind alle Einstellungen verzeichnet, die Ihr für Eure Seite gemacht habt. Die Daten werden angezeigt, wenn Ihr auf den Reiter „Anzeigen“ klickt. Ihr müsstet eine Liste sehen, die mit „siteurl, blogname und blogdescription“ anfängt. Blättert einfach mal die Seiten durch und seht nach, ob dort noch Einstellungen für gelöschte Plugins stehen.
Wenn Ihr zum Beispiel das Plugin „Postratings“ gelöscht habt und in der Tabelle wp_options so etwas findet: postratings_image, dann könnt ihr diese Zeile löschen. Hierzu vor postratings_image ein Häkchen setzten und dann auf das Kreuz für „Löschen“ klicken. Wenn Ihr mehrere Zeilen auf einer Seite löschen möchtet, könnt Ihr die Zeilen markieren und dann auf dieser Seite unter der Tabelle bei „markierte: “ auf das X klicken.
b) wp_options rss
Bei der Suche nach Optimierungsmöglichkeiten fand ich eine Seite, auf der empfohlen wurde, in der wp_options Tabelle alle Einträge zu löschen in denen bei option_name rss mit vielen Zahlen dahinter steht, also zum Beispiel so etwas: rss_84267fbafa9be433cd465166bc5e99
Ich habe das gemacht und es ist nichts zusammengebrochen. Ich überlasse es Euch, ob Ihr diese Möglichkeit ebenfalls nutzen möchtet.
4. Tabellenoptimierung mit MySQL
So, nachdem Ihr nun einiges gelöscht habt, hat Eure Tabelle Löcher an den Stellen, wo vorher Einträge waren. Ihr seht die Löcher natürlich nicht, weil leere Zeilen nicht angezeigt werden. Aber die Löcher sind da und verlangsamen Euren WebAuftritt.
Nun kann man die Tabellen ganz einfach optimieren und dabei auch die Löcher entfernen:
Wählt oben die gesamte Datenbank aus, so dass Ihr eine Übersicht mit allen Tabellen sehen könnt:
Klickt unter der Übersicht auf „Alle auswählen“, und darunter auf „markierte - Tabellen überprüfen“. Steht überall „OK“? Prima.
Nun wählt wieder alle aus und wählt die Option „Tabellen optimieren“. Bei diesem Schritt werden die Löcher gestopft.
Es geht weiter: Wieder alle auswählen und die Option „Tabellen reparieren“ wählen.
Schließlich: Alle auswählen und „Tabelle analysieren“ wählen.
Nun habt Ihr Eure Datenbank auf dem neuesten Stand.
Ich empfehle, jetzt noch einmal ein Backup zu machen, denn nachfolgend werkeln wir wieder in der Datenbank herum und es wäre doch schade, wenn unsere schöne Datenbank dabei verloren ginge
5. Abfragen überprüfen
a) Abfragen anzeigen
Je mehr Abfragen – desto langsamer der Seitenaufbau? Nicht unbedingt! Es kommt vor allem drauf an, wie stark eine Abfrage die Datenbank belastet.
Um überhaupt festzustellen, wie viele Abfragen auf Eurer Seite laufen und wie lange es dauert, bis die Seite aufgebaut ist, könnt ihr in Eurem Theme (am besten im Footer) folgenden Code einfügen:
<?php echo $wpdb->num_queries; ?> Abfragen in <?php timer_stop(1); ?> Sekunden
Das Ergebnis für meine Seite könnt Ihr unten sehen.
b) Slow Queries beseitigen
Wordpress fragt bei jedem Seitenaufruf Eure Tabellen in der Datenbank ab. Wenn Wordpress zum Beispiel einen bestimmten Beitrag sucht, wird die Tabelle wp_posts durchforstet.
Damit Wordpress schneller suchen kann, gibt es in jeder Tabelle eine oder mehrere Spalten, die einen Index haben. In der Tabelle wp_posts liegt z.B. ein Index auf der ID und auf post_name.
Die von Wordpress vergebenen Indizes reichen aber oft nicht aus und dann dauern die Abfragen länger, als es nötig wäre. Dies sind dann Slow Queries, die übrigens nicht nur von Wordpress selbst, sondern vor allem durch Plugins hervorgerufen werden können.
Wenn man seinen Provider fragt, warum die Seite so langsam läuft, teilt dieser normalerweise die Slow Queries mit. Das kann dann so aussehen:
Sehr geehrte Frau Blablabla, Sie haben folgende Slow Queries auf Ihrer Seite:
Datenbankname 1 SELECT wp_posts.* FROM wp_posts WHERE %%=1 AND
ID = %% AND (post_type = %%) ORDER BY post_date DESC;
Datenbankname 1 SELECT post_id, meta_key, meta_value FROM
wp_postmeta WHERE post_id IN %% ORDER BY post_id, meta_key;
Viele Grüße
Ihr Provider
Na wunderbar! Der normale Wordpress-Benutzer hat keine Ahnung von Programmierung und bekommt nun solch ein Kauderwelsch! Doch Moment! Ist das wirklich Kauderwelsch? Oder können wir das verstehen, ohne die geringste Ahnung von Programmierung zu haben?
In der ersten Slow Query geht es offensichtlich um die Tabelle wp_posts und die darin enthaltenen Spalten post_type und post_date.
Zur Indizierung der Tabelle wp_posts gibt es das Plugin Database-Tuning, das ich nur empfehlen kann. Es hat bei mir 4 von 6 Slow Queries beseitigt. Ihr findet es hier:
Wenn das Plugin aktiviert ist (kümmert Euch nicht um den „Headers already sent-Fehler), kann man im Admin-Bereich Eurer Seite unter „Verwalten – Database Tuning“ Zusätzliche Indizes automatisch setzen lassen. Probiert es aus.
In der zweiten Slow Query geht es um die Tabelle wp_postmeta und deren Spalten post_id, meta_key und meta_value. Gut. Ich habe in der MySQL-Datenbank die Tabelle wp_postmeta geöffnet. Unter der Struktur der Tabelle sieht man, welche Felder indiziert sind. Meta_value war nicht indiziert. Also habe ich auf dieses Feld einen Index gesetzt. Dazu meta_value markieren und rechts eines der Index-Kästchen aktivieren. Bei meta_value musste ich Fulltext nehmen, weil der normale Index nicht aktiviert werden konnte. Macht aber nichts.
Mit diesem kleinen Klick war auch diese Slow Query beseitigt.
Und was ist der nächste Schritt? Richtig: Die Datenbank sichern!
6. Cache
Bei hohem Besucheraufkommen und vielen Artikeln sollte man sich überlegen, ob man nicht einen Cache benutzt. Ihr kennt das sicher von Google. Im Cache wird eine HTML-Kopie jeder einmal aufgerufenen Seite Eures Internetauftritts gespeichert, so dass nicht mehr so viele Abfragen erforderlich sind.
Es gibt Cache-Plugins, doch vielleicht genügt bereits der Wordpress-interne Cache, der zwar vorhanden ist, aber aktiviert werden muss. Ich selbst benutze für diese Seite keinen Cache, habe ihn aber für eine von mir betreute Seite mit 400 Besuchern täglich und weit mehr als 1000 Artikeln eingeschaltet.
Zur Aktivierung des Caches müsst Ihr folgenden Code in Eure wp_config eintragen:
define('ENABLE_CACHE', true); // Cache on
define('CACHE_EXPIRATION_TIME', 900); // Time in seconds, default is 900s
So, das war’s. Ich hoffe, Ihr kommt klar. Bei uns haben die og. Maßnahmen zu einem spürbar schnelleren Seitenaufbau geführt.
Bildquelle:
Link zum Thema:
Kommentare:
5 Kommentare to “Wordpress Performance verbessern”
Dein Kommentar:


Vielen Dank. Sehr guter Beitrag.
Hat mir zwar nicht konkret bei meinem Problem geholfen, aber ein vorzeitiger Frühjahrsputz war auch ganz gut.
Einen Fehler hab ich entdeckt: Die Tabelle wp_categories gibt’s seit wp 2.7 nicht mehr. Dafür die drei wp_term-Tabellen.
Grüße,
krabbe
Auf jeden Fall!
Sehr schöne Zusammenstellung, vielen Dank!
Der Link zu dem empfohlenen Plugin funktioniert aber leider nicht mehr.
Ein paar sehr gute Tipps, die ich gerade versuche umzusetzen
Hast du davon auch mal wieder eine neuere Version erstellt?
Ach ja, zwar funktioniert der Link zum DB-Tuning nicht, aber wenn man über seinen WP-Admin Bereich nach Database-Tuning sucht, dann findet man das Plugin immer noch
Hallo web-newspaper,
danke, freut mich, wenn Dir der Artikel gefällt. Vielen Dank für den Plugin-Tipp!
Nein, ich habe den Artikel nicht aktualisiert, da meine neue Seite http://netzkritzler.de auf wpmu basiert und ich mich nicht bei beiden Systemen auf dem neuesten Stand halten kann.