Mailinglisten-Archive |
Hi Ihr, Alexander Weber schrieb: > Nimm auf jeden Fall connect. Vor allem, wenn es sich um eine größere > Seite mit vielen Besuchern handelt, mit pconnect kannst Du Dir schnell > den ganzen Speicher zumüllen, da die Verbindungen nicht automatisch > geschlossen werden und ob wirklich jeder User dort landet, wo eine > Verbindung manuell geschlossen wird, weiß man auch nicht unbedingt. Woran liegt es, dass der pconnect doof ist ? Afaik speichert der pconnect doch die Mysql-Connections anhand des Tripels ("Host+Port", "User", "Passwort") im aktuellen Apache-Child, wenn es sich um die Modulversion handelt. Wenn ich jetzt z.B. eine größere Site habe, die nur ein einziges dieser Tripel benutzt (was bei mir meist der Fall ist), dann schaut mein pconnect nach, ob der Link schon vorhanden ist - und ist er das, dann wird dieser weiterbenutzt. Es gibt also pro Apachechild genau 1 persistente MySQL-Connections. Und die gibt es auch nur solange, wie der Mysql keinen Timeout macht. Ich hätte also in meiner Einfältigkeit folgendes gedacht: Solange nur wenige Tripel ("Host+Port", "User", "Passwort") auf dem Server bestehen, macht Pconnect Sinn, weil die Startup-Time einer neuen Mysql-Connection wegfällt, und viele offene Clients für MySQL aufgrund der recht schlanken Thread-Architektur kein grosses Problem darstellen. Bei vielen unterschiedlichen Nutzern wirkt connect() vermutlich besser. Selbst wenn dank connection-keepalive wahrscheinlich im Apachechild beim nächsten Request die gleiche Connection wiederverwendet wird, kann es bei einem schlecht konfiguriertem MySQL mit hoher Timeout-Zeit zu dem genannten Effekt der zu vielen Verbindungen kommen* . Bei Massenprovidern wie Schlund, Puretec, One2One oder Strato spielt es ehedem keine Rolle, da ein pconnect bei der CGI-Variante von PHP einem connect entspricht. Aber irgendwo gibt es einen Grund, dass pconnect pauschal doof ist, den ich übersehe. Kann mir jemand weiterhelfen ? Liebe Grüße - johann *) Warum, um Himmels Willen, macht PHP bei "too many open persistant links" nicht einfach einen nicht-persistenten connect ?
php::bar PHP Wiki - Listenarchive