Resourcenverteilung Apache Internetpräsenz und aufwendige Scripts

Andi22

New Member
Hallo,

ich habe ein paar sehr aufwendige PHP-Scripts auf meinem Server, die Millionen von Datensätzen in einer MySQL Datenbank verarbeiten und vom Administrator über ein Webinterface aufgerufen werden (also über Apache). Jedesmal wenn so ein Script aufgerufen wird, geht die normale Internetpräsenz, die ebenfalls auf dem Apache läuft natürlich in die Knie, weil das Script sämtliche Ressourcen (CPU 80%) verbraucht, die da sind.

Ist es irgendwie möglich unter Linux die Ressourcenzuteilung so zu gestalten, dass die normale Internetpräsenz die über Apache läuft und hauptsächlich aus PHP Scripts besteht die auf dieselbe MySQL-DB zugreifen so viele Ressourcen zugeteilt bekommt wie sie benötigt und die Ressourcen für den Rest (aufwändige Adminscripts) eben so verteilt werden wie sie zur Verfügung stehen. Sprich bei viel Last auf der Internetpräsenz soll diese genauso schnell weiterlaufen egal ob das aufwendige Script im Hintergrund auch läuft oder nicht.

Betriebssystem Suse 10.0.
RAM: 512 MB
CPU 1,8 Ghz AMD Athlon

Vielen Dank.
 
Bauern Tipps:
Indexe (darf man doch heute sagen, oder?) klug setzen
Abfragen optimieren, EXPLAIN hilft dabei
In das Adminscript ein paar sleep einstreuen (dann bekommen die andern mehr Zeit)
 
Keine Sorge,

ich bin nicht ganz auf der Brennsuppen dahergeschwommen. Die Scripts und die Datenbank sind bereits optimiert. Mir ist auch egal ob das Script 10 Sekunden oder 10 Stunden läuft - wenn es eben so lange braucht, dann braucht es eben so lang - und meine Kiste braucht halt nun mal ein paar Stunden um 5 Millionen Datensätze entsprechend zu verarbeiten. Aber das mit sleep ist ein guter Tipp, mal sehen ob das was bringt.

Was ich trotzdem gerne wissen wollte, ob man einzelne Prozesse priorisieren kann, sodass diese immer genügend Prozessorzeit und Ram bekommen. Das Problem ist wahrscheinlich nur, dass mein das aufwendige Script eben auch über den Apache prefork läuft, aber das könnte ich evtl. ändern und als root direkt php übergeben. Dann bleibt aber noch mysqld - woher soll mysql wissen ob die aktuellen Queries priorisiert (Internetpräsenz) behandelt werden sollen oder nicht (aufwendiges Script).
 
Hallo.

Mir ist auch egal ob das Script 10 Sekunden oder 10 Stunden läuft - wenn es eben so lange braucht, dann braucht es eben so lang - und meine Kiste braucht halt nun mal ein paar Stunden um 5 Millionen Datensätze entsprechend zu verarbeiten.

Ich habe zwar mit Webanwendungen eher wenig zu tun, aber ich wuerde mir da spontan Gedanken ueber session timeouts machen, wie dem auch sei, nichts was man nicht in den Griff bekaeme...

Ansonsten fielen mir spontan zwei Ansaetz ein.
1. Wenn moeglich den MySQLd mit entsprechend geringer Prioritaet laufen lassen und sofern moeglich die Verarbeitung in der DB mittels stored procs laufen lassen (das verspricht angesichts des Mengengeruests auf jeden Fall Besserung), die koennen sehr maechtig sein und man spart den overhead der beim Datentransfer zwischen DB und webanwendung anfaellt. Wenn das was da verarbeitet wird als Stapelverarbeitung laufen kann sollte das machbar sein. Allerdings wuerde man an der Prioritaet der DB-Prozesse rumfummeln.
2. Ich weiss nicht, ob es geht aber ich wuerde schauen, ob ich aus einem duennbrustigen PHP-call einen externen Prozess aufmachen kann mit entsprechend niedriger Prioritaet, der dann die intensive Verarbeitung erledigt (cgi).

Eine Kombination daraus, sprich Datenshcaufelnde Verarbeitung als stored proc zuhandeln und den Rest in einem externen Prozess zu erledigen der bg-Prioritaet hat waere auch noch denkbar.

Soweit meine adhoc-Ideen.

Ciao,
Mercy.

P.S.: Wenn wir ueber mehrere Millionen Zeilen reden koenne mehr RAM fuer die DB auch Wirkung zeigen! Rechne doch mal aus, ob die Indices ueberhaupt in den Arbeitsspeicher passen, den MySQL bei 512 MB insgesamt hat, dann noch uebbig Raum fuer die Verarbeitung.
Achso und ich gehoere zu den Pragmaten, die keine Skrupel haben im Zweifel zwecks Performance einen Index ueber alle benoetigten Spalten einer Tabelle zu legen, RAM kostet nicht mehr die Welt. ;>
 
Last edited by a moderator:
Back
Top