MySQL: "too many connections"
am 16.01.2008 - 14:24 Uhr in
Hallo :-) !
Wir betreiben zu mehreren eine Community (http://www.pandoras-eck.de) mit z.Zt. 80 Mitgliedern, aber täglich gewinnen wir etwa ein neues hinzu.
Neuerdings häuft sich die MySQL-Fehlermeldung "too many connections". Wir sind bei Domainfactory in einem unteren Tarif untergebracht. Dort gestattet man uns 50 gleichzeitige MySQL-Zugriffe. Die Fehlermeldung kommt auch schon vor, wenn sich nur 4 Mitglieder eingeloggt haben und dazu 3 nichteingeloggte Leute draussen sind.
Ich frage mich:
1) Bedeutet 1 Seitenaufruf auch 1 Datenbankzugriff, oder bedeutet er 15 Datenbankzugriffe, wenn 15 unterschiedliche Blöcke auf der Seite sind?
2) Kann man mit der Lastenreduzierung (Throttle) das Problem entschärfen?
Liebe Grüße
Frank
- Anmelden oder Registrieren um Kommentare zu schreiben
Du bist nicht
am 20.01.2008 - 18:22 Uhr
Du bist nicht alleine:
http://www.drupalcenter.de/node/7607
Ich bekomme auch die Meldung und bei uns kackt der Server direkt ab.
ich vermute das Problem
am 20.01.2008 - 21:10 Uhr
ich vermute das Problem liegt vlt. an der Verwendung von CCK und Views, denn für eine Views braucht man schon 2 DB Connections, dann für jedes CCK Feld nochmal eine
--------------
Mein Blog: www.freeblogger.org
Deutscher IRC-Channel: irc.freenode.net #drupal.de je mehr desto besser
... Jabber-me: dereine@jabber.ccc.de Warum Jabber?
dereine schrieb ich vermute
am 20.01.2008 - 21:37 Uhr
ich vermute das Problem liegt vlt. an der Verwendung von CCK und Views, denn für eine Views braucht man schon 2 DB Connections, dann für jedes CCK Feld nochmal eine
Wie kommst du darauf?
--
"Look, Ma, I'm dead!"
Cell, Stephen King
Mal so am Rande: Im Grunde
am 21.01.2008 - 12:20 Uhr
Mal so am Rande:
Im Grunde benötigt jedes gerade ausgeführte PHP Skript lediglich eine einzige Verbindung. Wenn ich auf ner Site 500 Leute rumturnen habe, kann ich schlecht meine Datenbank konfigurieren mehrere Tausend gleichzeitige Verbindungen verdauen zu müssen.
Ich denke eher hier herrscht etwas Konfusion beim Auseinanderhalten der Begrifflichkeiten DB-Verbindung und DB-Abfrage.
Wie gesagt brauche nur eine Verbindung pro DB, mit der ich im Skript arbeiten will. Diese wird bei Beendigung des Skripts wieder geschlossen und für die kann ich mit so vielen Abfragen befeuern, wie ich lustig bin. Etwas anders sieht der Fall aus, wenn man persistente Verbindungen benutzt. Die sind dazu gedacht den Oberhead zur Erstellung und dem Schließen einer Verbindung zu vermeiden. PHP legt einen Pool aus Verbindungen an, die bei Bedarf erzeugt werden und diese wird erst geschlossen, wenn sie eine Zeit x lang nicht benutzt wurde. Fordert ein Skript eine Verbindung an, wird zunächst nach einer gerade nicht benutzten aber noch geöffneten Verbindung im Pool gesucht.
In der Praxis kranken persistente Verbindungen oft daran, dass sie viel zu lange gehalten und der Pool nicht ordentlich genutzt wird. Dadurch handelt man sich einen ganzen Schwarm von offenen Verbindungen ein und damit eben auch DB-Instanzen aufm Server, die Ressourcen (RAM) verbrauchen.
Aber selbst wenn ich von Begriffsverwirrung ausgehe, stimmt obige Aussage von "dereine" noch nicht. Ich brauche für einen View auch nicht zwei und für ein CCK Feld eine weitere DB-Abfrage. Die Abfrage des Views wird gecachet und wer Drupal programmiert hat hat mehr als nur einen VHS-Kurs SQL belegt. Es werden im Grunde immer und überall JOINs zur Abfrage benutzt, ganz egal ob ich nun einen Satz Daten mit keinem, einem oder 20 CCK-Feldern auslesen will.
Ein guter JOIN und die DB ist dein Freund...
--
"Look, Ma, I'm dead!"
Cell, Stephen King