phpbar.de logo

Mailinglisten-Archive

[php] Wie leistungsstart ist PHP_MySQL

[php] Wie leistungsstart ist PHP_MySQL

Sascha Grossenbacher saschagros at bluewin.ch
Son Okt 29 02:18:19 CEST 2006


René Thiel wrote:
> Hallo,
>
> ich hatte im Sommer einen Auftrag, Log-Dateien auszuwerten.
> Dafür wurden mir Log-Dateien mit max. 52.000 Zeilen zur Verfügung
> gestellt. Klappte alles wunderbar.
>
> Jetzt kam der Auftraggeber mit Problemen beim Einlesen in die DB.
> Also forderte ich die kompletten Archive an und fand darin Dateien mit
> fast 1.000.000 Zeilen (für einen Monat! Die Auswertung soll jahreweise
> geschehen).
>
> Damit braucht Apache/2.0.55 (Win32) PHP/5.1.6 (in Kombination mit
> MySQL 5.0.17) mehr als die eingestellten 600 sec, um die einzelnen
> Zeilen in jeweils mehrere DB-Felder zu überführen  :-( 
> Einfach nur jede Zeile unbearbeitet in die DB zu schreiben, dauerte
> soeben gewaltige 336 sec! (122 MB)
>
> Kann es sein, das PHP/MySQL (unter Windows - so die Vorgabe)
> doch nicht für derartige Datenmengen geeignet ist?
> Oder gibt es Möglichkeiten zur Optimierung?
Hallo

Es gäbe sicher Möglichkeiten, die schneller wären als PHP, aber man muss
es ja sowieso in die DB schreiben, von wird der Vorteil einer anderen
Sprache begrenzt sein.

Was Optimierung angeht kann ich ohne deinen Code zu kennen nur raten.
Wird jede Zeile als einzelnes Insert an MySQL geschickt?
Wenn ja, kann man da sicher optimieren, entweder prepared Statement
benutzen oder mehrere Datensätze gleichzeitig eintragen.
(Beispiel: INSERT INTO table (id, name) VALUES (1, 'wert1'), (2,
'wert'), ...)

Was ist den das eigentliche Problem mit der Geschwindigkeit, woher
kommen diese 600 Sekunden? Je mehr Daten das verarbeitet werden, desto
länger dauert es, wenn der Kunde im nächsten Jahr doppelt soviele
Logfiles hat, muss das auch irgendwie gehen. Wenn die Auswertung
jahresweise geschieht, wird das Script ja nicht sehr häufig aufgerufen
nehme ich an. Ev. ist es auch eine Möglichkeit, eine Art
Fortschrittsanzeige einzubauen, damit man weiss, ob das Script "noch
tut". Datei x / y verarbeitet, xxx Zeilen verarbeitet, etwas in der Art.

Gruss Sascha

php::bar PHP Wiki   -   Listenarchive