by:

1. PHP caching mit eaccelerator
2. MySQL und Indexes
3. MySQL socket over TCP
4. PHP Sessionhandler DB
5. Temp- Dateien von MySQL und PHP
6. Codeprofiling
7. MySQL- Proxy
8. Benchmarking


1. Caching mit eaccelerator

eaccelerator ist eine gute Wahl für Server, die eine hohe Last bewältigen müssen.
Die Vorteile liegen darin, dass PHP Skripte nicht bei jedem Aufruf neu gelesen und
interpretiert werden müssen, was bei mehreren Anfragen Zeit spart.
Ausserdem schont es die Festplatte, da der interpretierte Code im RAM gehalten wird.
Es gibt diverse Benchmarks die belegen sollten, dass eaccelerator eines der besten Cachingsysteme für PHP ist.
Ich selber verwende eaccelerator seit mehreren Jahren und bin sehr zufrieden.

2. MySQL und Indexes

Etwas worauf man immer wieder stößt, wenn man sich mit Performance und MySQL beschäftigt, ist die Aufforderung Indexe richtig zu setzen. Dem kann man eigentlich wenig hinzufügen.
Es hat sich gezeigt, dass gerade bei größeren DBs die Geschwindigkeit dramatisch gesteigert werden kann, wenn man seine Indexes richtig setzt.
Die MySQL Funktion "explain" hilft dabei queries zu optimieren.

3. MySql und Sockets

Wenn es möglich ist, sollte man Socket- Verbindungen der TCP- Verbindung vorziehen, da TCP- Verbindungen meist nur ein unnötiger Overhead sind. Manche Seiten berichten von einem Performancegewinn bis zu 20 %.
Die Verbindung lässt sich in PHP relativ einfach aufbauen,
entweder man verwendet beim mysql_connect localhost, dann versucht die Funktion
selbstständig eine Socket- Verbindung aufzubauen, oder man gibt den Pfad direkt an:

Code

<?php mysql_connect("/tmp/mysql.sock""root""pass"); ?>


4. PHP Sessionhandler

Ich verwende seit kurzem für mein CMS einen Datenbank- Sessionhandler, weniger aus Performance- Gründen, als mehr zur Lastverteilung.
Wie ein Datenbank- Sessionhandler ausschaut, könnt ihr euch hier ansehen:
http://www.codejungle.org/tag/Database_Session_handler_for_php/3.html

5. Temp- Dateien von MySQL und PHP

Temporäre Dateien von MySQL und PHP kann man auch im RAM speichern,
dazu legt man einfach ein Verzeichnis im tmp Ordner an:
mkdir /tmp/ram
und weist einen Teil des Arbeitsspeichers diesem Verzeichnis zu (in dem Fall 150mb):
/bin/mount -t tmpfs /dev/shm /tmp/ram/ -o size=150m

Danach muss man MySQL und PHP nur noch sagen wo sie die Temp Dateien speichern sollen.

MySQL mit dem Parameter --tempdir=/tmp/ram/ starten
und in der php.ini den session.save_path auf /tmp/ram/ setzen.

Nach meinen Tests hat dies zwar nicht viel Performance gebracht, aber naja, Kleinvieh macht auch Mist.

6. Code Profiling

Code Profiling ist eine nützliche Methode um seinen Code zu verbessern.
Man sieht, welche Funktionen wie viel Speicher, CPU und Zeit brauchen und kann
dann seinen Code optimieren. Ich selber habe xdebug zum optimieren verwendet,
es gibt aber auch noch eine Reihe anderer Profiler.
mod-top z.B. habe ich mir bisher zwar noch nicht näher angeschaut, es scheint aber auch relativ brauchbar zu sein.

7. MySQL- Proxy

MySQL- Proxy kann man als DB Lastenverteiler, aber auch als eine Failover Lösung benutzen.
Ich selber habe einige Lastenverteiler getestet und hier meine Ergebnisse veröffentlicht:

http://www.codejungle.org/tag/Lastenverteilung_mit_MySQL_und_SQLrelay/5.html


8. Benchmarking

Bevor man in den produktiven Betrieb geht sollte man seine Anwendung immer einem Benchmark unterziehen.
Eine einfache Methode ist AB, was für Apache Benchmark steht.
Mit AB ist es möglich mehrere Anfragen paralell an den Webserver zu senden und in den meisten Fällen kann man so auch die Grenzen des Servers ermitteln.

Beispiel für einen Befehl:
ab -c 100 -n 100 http://testserver.com/

Apache Benchmark ist bei der Default- Installation von Apache dabei.



Desweiteren möchte ich auf memcache aufmerksam machen, ich selber habe zwar keine praktischen Erfahrungen mit dem Object- Cachingsystem, doch ich denke, dass es für HighLoad Anwendungen durchaus interessant ist.

Ich hoffe euch hat der Beitrag gefallen.

MFG

Andreas


Quellen:

http://eaccelerator.net/
http://www.xdebug.org/
http://www.mod-top.org/
http://forge.mysql.com/wiki/MySQL_Proxy
http://www.mysqlperformanceblog.com/
http://www.h07.org/projects/apachetuning/#21
http://www.danga.com/memcached/