Mailinglisten-Archive |
* Stefan Hofmeir wrote: > seit letzter Stunde bekomme ich von meiner mysql-Datenbank > (mysql 3.23.30-gamma) nur noch die Fehlermeldung Du hast doch auf der iw-tec Liste schon Antworten bekommen, wieso fragst du hier noch mal? Meine Antwort aus iw-tec: mysql_pconnect(). Weil mysql_pconnect() nur für Persistenz innerhalb eines Apache-Prozess für jeweils ein einziges Verbindungsparameter-Tripel (DB - Host, User, Passwort) sorgt. Ein Apache (ich gehe davon aus, dass Apache zum Einsatz kommt) ist ein forkender Webserver, in der Regel hast du also X "stehende" Apache-Prozesse, die auf eine Connection warten: apache (Mutterprozess) \ \-- apache child 1 | | \-- apache child | | \-- apache child | . . . Jeder dieser Prozesse arbeitet einen Request ab. Kommt zum Zeitpunkt X ein Request an Child 1 für index.php an und index.php öffnet mit mysql_pconnect() eine für diesen Apache Child persistente Verbindung. Kommt zum Zeitpunkt X+Y ein weiterer Request an das gleiche Child mit gleichem mysql_pconnect()-DB-Verbindungstripel, so kann die Verbindung zu MySQL, die noch steht, benutzt werden. Landet der Request dagegen bei einem der anderen Childs, so wird eine neue Verbindung zu MySQL aufgemacht. Irgendwann hast du dann so viele Apache-Prozesse, die jeder für sich eine MySQL-Verbindung offen halten, dass die Anzahl der MySQL-Verbindungen zuviel ist. Abhilfe: auf mysql_connect() umstellen oder ein Tool wie SRM (http://www.vl-srm.net/) einsetzen, das echtes Connection- Pooling kann. Das Problem ist nicht auf PHP zurückzuführen, sondern auf die Art und Weise, wie Apache gemacht ist. -- PHP-Support * realitätsnahe Performance-Messungen mit Code-Analyse Webapplikationsentwicklung * PHP-Schulungen * Consulting 0700-THINKPHP -*- bjoern_(at)_thinkphp.de --- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive