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