Datenbank auf externen Server ausgelagert - Last noch höher!?



frabovmeier

New Member
Hallo,

da mein dedizierter Server mittlerweile unter zu hoher Last steht, habe ich die MySQL-Datenbank auf einen externen Server ausgelagert. Die Anwendung läuft unter Apache & PHP.

Allerdings hilft die Auslagerung erstmal garnicht, denn auf dem Server entstehen aufeinmal Unmengen an apache2 Prozessen die den Server noch mehr auslasten und eine Load Average von über 60 erzeugen und jeder einzelne apache prozess ca. 15-20% CPU brauch?

Woran kann das liegen??? Wenn ich wieder auf die interne DB wechsel sind die Apache Prozesse wieder normal wie vorher!

Ich versteh das nicht? Oder sind es soviele Prozesse, weil der Verbindungsaufbau zur externen DB zu lange dauert?

Danke für mögliche Tipps!
 
Kann sehr gut sein, dass du mit deiner Vermutung richtig liegst. Wie sind die beiden Server denn miteinander verbunden?

Um was für eine PHP Anwendung handelt es sich denn?

Wäre es für dich eine Möglichkeit einen Reverse Proxy vorzuschalten und diesen Load Balancing machen zu lassen?

Eventuell auch einen Varnish Cache zwischenschalten, um Requests gegen die Datenbank zu reduzieren?
 
Wenn die Apache-Prozesse "rumhängen", ist es gut möglich, dass sie auf die Datenbank warten. Die Server sollten mindestens im gleichen RZ stehen (per Gigabit angebunden), besser jedoch direkt verkabelt sein. Ein guter Ping ist hier nicht ausreichend; aus dem einfachen Grund, dass sich das alles aufsummiert.

Hast du bereits geprüft, ob dein Server auf Anwendungsebene angegriffen wird? Eine Load von 60 ist schon sehr übel.
 
Wie sieht die my.conf aus?

Evtl. fehlt einfach nur ein skip-name-resolve oder ähnliches....

Ansonsten wie schon gesagt: Latenz zwischen den beiden Servern messen.


besser jedoch direkt verkabelt sein. Ein guter Ping ist hier nicht ausreichend; aus dem einfachen Grund, dass sich das alles aufsummiert.
Das kann ich so nicht unterschreiben. Wir haben Jahrelange ein Setup gefahren, bei dem die Web-Server und Datenbanken-Server in unterschiedlichen RZ standen und "nur" mit 100 mbit verbunden waren. Und das auch unter anderem in einer Master/Slave-Replikation.

Natürlich ist die Latenz bei einem "entfernten" Setup etwas schlechter - aber nicht so schlecht, wie vom TS beschrieben.
 
Last edited by a moderator:
Wenn die Prozesse wirklich 25% CPU-Last haben (und wirklich ALLE CPU-Kerne ausgelastet sind) würde ich nicht unbedingt davon ausgehen, dass die Prozesse auf die Datenbank warten - denn beim Warten braucht der Prozess keine Rechenzeit.

Könnte es vielleicht auch ganz einfach so sein, dass die Datenbank nun als Flaschenhals weggefallen ist und jetzt der Apache verstopft?


Prüfe auch mal, wie die Last währenddessen auf dem SQL-Server aussieht, insbesondere wie viele Prozesse in der MySQL-Prozessliste vorhanden sind.
Werden persistente SQL-Verbindungen genutzt? Das kann viel helfen, gerade bei TCP-Verbindungen...
 
Back
Top