phpbar.de logo

Mailinglisten-Archive

[php] PHPLIB, DB-Class

[php] PHPLIB, DB-Class

Johann-Peter Hartmann php_(at)_phpcenter.de
Tue, 11 Sep 2001 09:17:49 +0200


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