Seite 1 von 1

Allgemeine Optimierungstipps fuer PHP & mySQL ?

Verfasst: 28.04.2005, 11:36
von Airport1
Koennen wir evtl. mal ein paar Optimierungstipps fuer PHP & mySQL zusammentragen? Vielleicht kennt ja jemand gute Kniffe die bei ihm/ihr/es die Performance enorm gesteigert haben? Ab und zu erlebt man doch immer wieder Erstaunliches und sozusagen "AHA!-Effekte" ;-)


Beginne mal mit:


MySQL:

Indexe setzen fuer sehr haeufig abzufragende Spalten

wenn Result uninteressant (z.B. nur UPDATE):
mysql_unbuffered_query statt mysql_query

"Vorfilterung" im mySQL Query statt IF-Abfragen in PHP Beispiel:
IF (x > 0 && curtime() >= refetch, x, 0) AS x

"Vorberechnung" von Zeitdifferenzen statt in PHP:
SELECT TO_DAYS(NOW()) - TO_DAYS(tstamp) AS diffdays


PHP:

Funktionen die nicht mehr verwendet werden rauswerfen -> "interpretation time" niedriger

Unnoetiges Rumschaufeln/Kopieren von Variablen vermeiden (WENNs auf Performance ankommt)

Funktionsparameter per Referenz uebergeben (WENNs auf Performance ankommt)

Verfasst:
von

Allgemeine Optimierungstipps fuer PHP & mySQL ?

Verfasst: 28.04.2005, 12:14
von pebosi
ah cool danke wie macht man z.b. das "Funktionsparameter per Referenz uebergeben (WENNs auf Performance ankommt)"

gruß pebosi

Allgemeine Optimierungstipps fuer PHP & mySQL ?

Verfasst: 28.04.2005, 12:19
von seobug
Performance optimieren von mysql? Habe ich mir geschenkt bis auf das Setzen einigen Indexen bei großen Tabellen (ab 10 000 Datensätzen). Mysql ist bei mir nie ein Flaschenhals gewesen.

Allgemeine Optimierungstipps fuer PHP & mySQL ?

Verfasst: 28.04.2005, 12:42
von Nexus
Hi,

für MySQL:

Damit kann man Bücher füllen :wink: Was viele nicht wissen, MySQL benutzt pro Abfrage immer nur einen Index.

D.h. wenn ich eine Abfrage über zwei Spalten habe, z.B.:

Code: Alles auswählen

SELECT * FROM table WHERE x=x1 AND y=y1;
dann sollte ein gemeinsamer Index auf beiden Spalten liegen. Falls einzelne Indizes auf x und y liegen, wird derjenige ausgewählt, der weniger Ergebnisse liefert, und der zweite ignoriert.

Vergleiche mit LIKE auf einer Spalte, die einen Index hat, benutzen diesen nicht, falls der Vergleich mit einem Wildcard-Character anfängt.

Code: Alles auswählen

SELECT * FROM table WHERE string LIKE '%test';
Viele suchen in Spalten mit mit '%ausdruck%' und auch dabei wird kein Index verwendet. Auf so etwas stoße ich immer wieder.
Besser wäre es sowieso den FULLTEXT-Index zu verwenden.

PHP: PHP als Modul laufen lassen, und nicht als CGI bringt 'ne Menge. Für wirklich krische Applikation bietet sich die Zend-Plattform an, ansonsten wenigsten einen Accelerator einsetzen, z.B. Turck MMCache.
Funktionsparameter per Referenz uebergeben
Das stimmt nur bei Arrays und Objekten (und auch nur bei PHP4). Bei einfachen Datentypen verwendet PHP auch bei Deklaration als "pass by value" intern eine einfache Referenz, die sogar schneller ist, als wenn ich den Parameter explizit als "pass by reference" angebe.

Ansonsten kann ich dir folgende Artikel empfehlen:

A HOWTO on Optimizing PHP: https://phplens.com/lens/php-book/optim ... ng-php.php
Large Scale PHP: https://talks.php.net/show/lt2004-lamp/

Gruß
Nexus

Allgemeine Optimierungstipps fuer PHP & mySQL ?

Verfasst: 28.04.2005, 13:19
von Airport1
Das mit nur einem Index ist ja sehr interessant, DANKE :)

Achja, nie im laufenden Nutzungsbetrieb Indexe rausloeschen, hab das mal gemacht was darin resultierte dass immer mehr mySQL Connections geoeffnet wurden bis keine mehr uebrig waren. Musste dann den Port kurzerhand von 3306 auf 3307 umstellen damit ich ueberhaupt noch reinkam ;)

Noch ne Idee: Datenbankinhalt auslesen und im Shared Memory halten, und z.B. nur alle 5 Min wieder in die DB schreiben? Machbar? Schonmal jemand gemacht ;) ?

Allgemeine Optimierungstipps fuer PHP & mySQL ?

Verfasst: 29.04.2005, 11:22
von wurzel
wer es noch nicht kennt:
https://www.blueshoes.org/en/developer/php_bench/

dos & don'ts für schleifen in php

Allgemeine Optimierungstipps fuer PHP & mySQL ?

Verfasst: 29.04.2005, 17:56
von d0nut
auch sehr gut und ausführlich ist folgendes tutorial..
auch wenn das meiste eine Selbstverständlichkeit ist

https://www.thegeek.de/blog/index.php?t ... ost=200412

Allgemeine Optimierungstipps fuer PHP & mySQL ?

Verfasst: 30.04.2005, 10:53
von Airport1
Das war auch spitze - daher: mehr mehr meeehr ;-)

Gerne auch Tipps zu Apache2 Tuning!
So musste ich einst persistente Connections untersagen, weil es zu viele Anfragen waren, nun habe ich persistente Connections wieder erlaubt, musste dafuer jedoch deutlich an der Keep Alive Timeout Schraube drehen.

Wahrscheinlich sollte man den Apache mal so langsam in den Worker-Modus bringen? Denn die 256 max. sollen ja hart code-basiert sein, weil das unterliegende OS nicht mehr als 256 verwalten kann ... oder irgendwie sowas ;-)

Schon mal jemand gemacht?

Allgemeine Optimierungstipps fuer PHP & mySQL ?

Verfasst: 30.04.2005, 12:03
von sandoba
Hier ein paar weitere Tipps zur Optimierung (+ zur Erhöhung der Server-Sicherheit):

-> Directory-Listing deaktivieren
-> Frontpage-Extensions deinstallieren
-> immer aktuelle Versionen von PHP, MySQL, Apache usw. verwenden
-> nicht benötigte Apache-Module entfernen (z.B. mod_speling, mod_proxy, mod_info, mod_asis, mod_auth_db, mod_autoindex, mod_include, mod_auth_dbm) über httpd.conf/Confixx (LoadModule/AddModule)
-> phpSysInfo zum Server-Monitoring installieren
-> Anzahl der max. gleichzeitigen Zugriffe in xinetd.conf begrenzen (gegen DDOS-Angriffe)
-> Zugriff auf externe Dateien wie unter /etc/passwd verhindern
-> SrvReport für das tägliche Monitoring installieren