Internet, Computer, Mittwoch 28 November 2007 17:58
So, heute mal ein Hardcore-Tech-Thema
Nachdem ich mich in letzter Zeit viel mit Wordpress und MySQL-Optimierung beschäftigt habe hier ein paar Dinge die bei mir geholfen haben Wordpress zu beschleunigen, ohne aber ein Caching-Plugin zu verwenden:
1. Persistent MySQL-Verbindungen
Wordpress ist so konfiguriert das es bei jedem Zugriff auf eine Seite immer eine neue Verbindung zur Datenbank macht. Das ist ok da damit Wordpress auf sehr vielen Konfigurationen funktioniert, bringt aber jede Menge Overhead, da immer Username und Passwort geschickt werden muss, etc.
PHP bietet die Möglichkeit Datenverbindungen zu Cachen, d.h. Es wird eine Pool an Verbindung zu MySQL hergestellt und jedesmal wenn eine Seite eine Verbindung zur Datenbank braucht wird aus dem Pool eine bereits bestehende Verbindung verwendet, somit muss sich die Seite nicht immer neu einloggen und spart Zeit.
in Wordpress läßt sich diese Funktion sehr einfach einschalten, einfach in der Datei “wp-includes/wp-db.php” folgende Zeile ändern:
$this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);
in:
$this->dbh = @mysql_pconnect($dbhost, $dbuser, $dbpassword);
Schon verwendet Wordpress Permanente Verbindungen, das sieht man daran das z.B. im MySQL-Administrator immer ein paar Verbindungen offen sind.
Wichtig ist auch zu überprüfen ob die “max_connections” in “my.cnf” für den Mysql-Server auch einen entsprechend hohen Wert haben, ansonsten gibts Probleme (500 reichen bei mir locker und auf dem Server laufen noch andere Datenbankapplikationen). Außerdem muss natürlich in der “php.ini” folgendes gesetzt sein:
mysql.allow_persistent = On
Weiters muss die Anzahl der Permanenten Verbindungen in der “php.ini” eingestellt werden (z.B. mysql.max_persistent = -1 für unbegrenzt).
Hat bei mir die Seiten subjektiv beschleunigt, aber vor allem aber etwas Load von Server genommen. Habe auch bis jetzt keinerlei Probleme mit Addons oder ähnlichem (und ich hab viele Addons laufen).
2. PHP-Accelerator verwenden
Für PHP gibt es mehrere Addons die PHP-Skripte vor kompilieren und dann nicht jedesmal das Skript neu übersetzt werden muss wenn eine Seite aufgerufen wird, das spart recht viel Rechenzeit. Ich haben XCache getestet, soll das beste sein nur leider lief es auf meinem Server nicht (Apache ist immer mit einem Core-Dump abgestürzt, obwohl selbst kompiliert). Also hab ich eAccelerator getestet und das läuft wunderbar (die Installationsanleitung ist auch brauchbar). In der Konfiguration (in “php.ini“) hab ich den Speicher für den Cache auf 100MB gestellt (drei Wordpress-Installation und psa-horde), geht sich genau aus
Damit Wordpress gut mit eAccelerator zusammenarbeitet gibt es noch ein Plugin (sowohl für XCache als auch eAccelerator), läuft sehr gut.
Die Geschwindigkeitsverbesserung war gewaltig, vor allem die Response-Time, war aber klar, kenne den Effekt auch von “mod_perl“.
3. MySQL tunen
Als nächstes geht es der Datenbank an den Kragen. Dieses “MySQL Performance Tuning Primer Script” gibt sehr gut Auskunft wo etwas mit der MySQL-Konfiguration nicht stimmt, hat mir sehr viel geholfen (musste unter anderem den “table_cache" als auch den “key_buffer" in meiner “my.cnf” erhöhen) und MySQL schnurrt jetzt wieder.
Hilfreich ist auch den Query-Cache in “my.cnf” einschalten:
query_cache_size= 16M
query_cache_type=1
query_cache_min_res_unit = 4K
Setzt den Cache auf 16 Megabyte, reicht bei mir, einfach testen und nach ein paar Tagen das oben genannte Skript nochmals laufen lassen, dann sieht man ob genug oder nicht. das “query_cache_min_res_unit” soll die Fragmentierung des Caches durch kleine Ergebnisse (anscheinend oft in Wordpress der Fall) verringern.
Das MySQL-tunen hat bei mir geholfen die Last von MySQL zu nehmen wenn andere Skripts, die sehr viel auf die Datenbank zugreifen, laufen. Aber auch für Wordpress hat es dadurch eine Geschwindigkeitssteigerung gegeben.
Was auch der Performance nutzt ist in regelmäßigen Abständen ein “Optimize Table” über alle Wordpress-Tabellen auszuführen, das optimiert die Indizes wieder.
Das waren meine Tipps für Wordpress, wenn es noch andere gibt oder ihr der Meinung seit das man dies oder das eher nicht machen sollte einfach melden!
PS: nicht vergessen, zuerst ein Backup machen
und natürlich sind alle Angaben ohne Gewähr!
RSS Feed











[...] Wordpress & MySQL beschleunigen » This Summary is from an article posted at Wissen belastet on Wednesday, November 28, 2007 This [...]
Ich habe den internen Cache von WordPress aktiviert. Reduziert die Datenbank-Abfragen um rund ein Drittel.
Wie funktioniert “Optimize Table” mit MySQL-Admin? - Danke im voraus
Dieses Tuning würde auch Ritchie’s Blog ganz gut tun
Bis morgen Abend
in mysql-admin weiss ich es nicht, aber wenn du irgendwo sql-befehle eingeben kannst einfach
optimize table TABELLENNAME;
und dann tut mysql das.
ritchie hat sich wohl von seinem neuen server mehr erwartet
yezzz, I know - die vielen schönen Plugins und die vielen mysql-Abfragen
werd mich demnächst mal drum kümmern und Punkt für Punkt durchgehen…
Blogistan Panoptikum Woche 47 2k7…
Was für eine Woche, was für ein Rückblick: der Advent hat begonnen, doch von Besinnlichkeit keine Spur: stattdessen bloß Performancetipps und burgenländische Holzdiebe soweit das Auge blickt.
……
@vienna22 @ritchie
“Wie funktioniert “Optimize Table” mit MySQL-Admin? - Danke im voraus”
Verbinde dich per phpMyAdmin zu Deiner Datenbank, wähle die DB aus die du optimieren möchtest, ganz unten (normal unter wp-users) ist ein Link “Alle auswählen” diesen anklicken und in der selben Zeile ist ein Drop down Feld, dort “optimiere Tabelle” auswählen. fertig. Hoffe das war es was Du wolltest?
[...] hat, musste ich mich Notgedrungen um WP Optimierung kümmern. Die Tipps von sw-guide und wissenbelastet waren sehr hilfreich und mit den Ergebnissen bin ich erstmal zufrieden. Bookmark to: Technorati [...]
Prima Bericht! Und ein toller Hinweis! Da habe ich bestimmt auch noch Optimierungspotential!
ab in die Bookmarks
http://wiki.mobbing-gegner.de/Linux/MySql/optimieren
Hallo,
ist das auch auf andere CMS umzusetzen ? wir haben zur Zeit ein Problem das unser Server in die Knie geht, laut unserem Serveranbieter ( All-inkl.) liegt das an zu vielen Datenbank Anfrager der Webseite ( läuft mit Drupal ), kann man da generell was machen ?
Danke und Gruß
naja, drupal ist eigentlich schon recht gut optimiert, vielleicht solltest du mal schauen ob du die tabellen in mysql (stichwort: indexe) optimieren kannst.
Der tuning-primer ist wirklich ein sehr hilfreiches Tool. Mir hat es schon mehr als einmal das Leben gerettet.