Nach langem Suchen habe ich endlich eine Lösung gefunden.
Ich bin kein großer Schriftsteller, deshalb werde ich mein Bestes geben, um dies so kurz wie möglich zu halten.
Soweit ich das beurteilen konnte, gibt es zwei mögliche Lösungen:
SQL-Relay
http://sqlrelay.sourceforge.net/
Dies macht genau das, was die Frage verlangt, und ein paar mehr. Ich werde nicht zu sehr ins Detail gehen, was ich darüber herausfinden konnte, aber ich werde erwähnen, dass es keine praktikable Lösung war, da es nicht transparent ist. Dies bedeutet, dass der Fluss wie folgt ist:
PHP -> Queries -> SQL Relay Extension -> SQL Relay -> Externally hosted MySQL
Das hätte also dazu geführt, dass wir unseren gesamten Code von MySQL auf SQL Relay umgeschrieben hätten. In unserem Fall keine Option.
Wenn jedoch jemand ein neues Großprojekt plant, das eine der zahlreichen Funktionen von SQL Relay erfordert, klingt dies sehr schön.
Mysql Proxy
http://forge.mysql.com/wiki/MySQL_Proxy
Dies ist die Lösung, die wir letztendlich verwendet haben.
Der Schlüssel dazu ist das Pooling-LUA-Skript für den MySQL-Proxy.
Diese LUA-Erweiterung finden Sie unter:
https://github.com/cwarden/mysql-proxy/blob/315ab806bb95b8223f5afd3d238eff2a40af03d8/lib/ro-pooling.lua
Hier sind einige grundlegende Statistiken, ohne auf allzu viele Details einzugehen.
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
6433 38598 572537
Nachdem Sie zu mysql-proxy gewechselt und die Dinge regeln lassen haben:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
32 192 2848
Wie Sie deutlich sehen können, sind die TIME_WAIT-Ports für mysql auf fast keinen gesunken.
Die Verbindungen bleiben nun tatsächlich OHNE mysql_pconnect / mysqli_connect (... p: hostname ...) bestehen.
Erwähnenswert sind anscheinend einige konfigurierbare Einstellungen oben im pooler lua-Skript.
lokale min_idle_connections
und
lokale max_idle_connections
Diese scheinen ziemlich selbsterklärend zu sein. Ausgenommen das: Es scheint, dass jede Kombination aus Benutzername (und Passwort? Ungetestet ... höchstwahrscheinlich nicht.) Einen eigenen Satz persistenter Verbindungen erzeugt.
Multiplizieren Sie also max_idle_connections mit der Anzahl der eindeutigen MySQL-Benutzer, die eine Verbindung zur Datenbank herstellen. Und das sollte Ihnen eine Vorstellung davon geben, wie viele freie Verbindungen Sie am Ende haben werden.
Lassen Sie mich noch einmal wiederholen, damit dieser kleine Klappentext einige Keywords für Suchende über Google enthält:
Ist es bei Verwendung von PHP möglich, dauerhafte MySQL-Verbindungen OHNE MySQL_Pconnect zu haben?
Ja, dies kann über SQL Relay erfolgen, wenn es Ihnen nichts ausmacht, den größten Teil Ihres Codes neu zu erstellen, um Ihre Abfragen durch ihre Erweiterung zu leiten, ODER wenn Sie mysql-proxy mit dem Skript ro-pooling.lua transparent verwenden.
So etwas wollen wir schon seit einem Jahr.
GENIESSEN!
mysql_pconnectjede Verbindung mit einigen "Bereinigungsfunktionen" verwenden und starten?