Moin,
zur allgemeinen Info: die gesuchte Einstellung nennt sich
mysql.max_links. Wenn du dort -1 eintraegst, wird das Limit komplett entfernt. Bevor du aber das Limit ewig weit hochstellst, bedenke aber eines: es gibt ein paar Cache-Sizes, die
pro Verbindung reserviert haben. Ich hab die genauen Conf-Eintraege grad nicht im Kopf, aber kann sie bei Interesse gerne raussuchen. Beim Starten des
MySQL-Servers wird der natuerlich versuchen, diesen Speicher zu reservieren. Soll heissen: wenn du 2MB einstellst, und als Connection-Limit 1000 einstellst, wird der Server versuchen, 2 GB Speicher zu reservieren. Hinzu kommen noch saemtliche anderen Speichergroessen. Da kommst schnell ueber das, was unter 32 Bit moeglich ist, bzw. auch ueber das Hardware-Limit. Wir haben uns da nen Server mal auf sagenhafte 24 GB Speicher konfiguriert, da wundert man sich erstmal warum man beim Neustart des Servers erstmal ne Fehlermeldung um die Ohren geworfen kriegt.
Und um ganz kurz etwas Licht ins Dunkel zu bringen, da ich grad deinen Blog gelesen hab: mysql_pconnect() oeffnet nicht eine permanente sondern eine
persistente Verbindung zum
DB-Server. Diese Verbindungen werden erstellt aber erst nach einer bestimmten Zeit (die in der
MySQL-Config definiert wird) geschlossen. PHP laesst solche Verbindungen offen wenn dein Script terminiert. Dass diese Verbindungen natuerlich "immer" da sind, duerfte einleuchten. Das Ganze ist allerdings kein Fehler oder Nachteil. V.a. wenn viele Besucher auf der Seite sind hat der Server teilweise viel zu tun, die einkommenden Verbindungen zu verwalten. Bei persistenten Verbindungen aendert sich das Verhalten: beim Aufruf von mysql_pconnect() guckt PHP erstmal nach, ob eine
freie (Verbindungen koennen immer nur von einem Thread/Prozess verwendet werden) Verbindung zum angegebenen Server mit den angegebenen Credentials verfuegbar ist. Wenn ja, dann wird diese Verbindung zurueckgegeben und dein Script laeuft so weiter, als ob eine neue Verbindung erstellt worden waere. Nur wenn keine Verbindung frei ist, wird eine neue erstellt (vorausgesetzt das Limit fuer persistente Verbindungen wurde nicht erreicht). Dies spart dir natuerlich die Zeit die benoetigt wird, die Verbindung zum Server herzustellen. Vor allem wenn
MySQL- und HTTP-Server nicht auf der selben Maschine laufen kann dies durchaus einige Zeitvorteile mit sich bringen.
Natuerlich wird die Verbindung dann auch nicht geschlossen, sobald das Script beendet wird - dies wuerde das System natuerlich ad absurdum fuehren.
Die normale 0815-Webanwendung ist normalerweise nicht auf persistente Verbindungen angewiesen, jedoch gibt es genug Faelle, wo diese Verbindungen Sinn machen.
Zitat von
Valle:
Das Problem ist doch ganz einfach: Eine Permanente Verbindung hält eine
TCP-Verbindung zum Server. Je mehr es von diesen Verbindungen gibt, desto weniger sind noch verfügbar. Sofern ich mich nicht irre, gehen die verfügbaren
TCP-Ports nur bis 65536, was heißt, dass es (weniger als) 65536 Verbindungen gleichzeitig geben kann.
Verwechsle nicht
TCP/
IP-Verbindungen mit Datenbankverbindungen. Eine Verbindung zum
MySQL-Server muss nicht unbedingt ueber
TCP erfolgen. Es gibt genug Moeglichkeiten, diese ueber Named Pipes oder sonstige
IPC-Methoden laufen zu lassen
Greetz
alcaeus