Après de longues recherches, j'ai finalement trouvé une solution.
Je ne suis pas très écrivain, je ferai donc de mon mieux pour que cela soit aussi concis que possible.
Pour autant que je puisse trouver, il y a 2 solutions possibles:
Relais SQL
http://sqlrelay.sourceforge.net/
Cela fait exactement ce que la question demandait, et bien plus encore. Je n'entrerai pas dans trop de détails sur ce que j'ai pu découvrir à ce sujet, mais je mentionnerai que ce n'était pas une solution viable car elle n'est pas transparente. Cela signifie que le flux est le suivant:
PHP -> Queries -> SQL Relay Extension -> SQL Relay -> Externally hosted MySQL
Cela aurait donc impliqué de réécrire tout notre code de mysql vers sql relay. Pas une option dans notre cas.
Cela étant dit, si quelqu'un prévoit un nouveau projet à grande échelle qui nécessite l'une des nombreuses fonctionnalités de SQL Relay, cela semble magnifique.
Mysql Proxy
http://forge.mysql.com/wiki/MySQL_Proxy
C'est la solution que nous avons finalement utilisée.
La clé pour faire faire ce que nous voulons qu'il fasse est le script de pooling LUA pour le proxy mysql.
Cette extension LUA est disponible à l'adresse suivante:
https://github.com/cwarden/mysql-proxy/blob/315ab806bb95b8223f5afd3d238eff2a40af03d8/lib/ro- Covoiturage.lua
Sans entrer dans trop de détails, voici quelques statistiques de base ... A l'esprit, elles sont testées à faible temps d'utilisation:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
6433 38598 572537
Après être passé à mysql-proxy et avoir laissé les choses se régler:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
32 192 2848
Comme vous pouvez le voir clairement, les ports TIME_WAIT vers mysql sont tombés à presque aucun.
Les connexions sont maintenant en fait persistantes SANS utiliser mysql_pconnect / mysqli_connect (... p: hostname ...).
Il convient de mentionner qu'il semble y avoir quelques paramètres configurables près du haut du script pooler lua.
connexions locales min_idle_connections
et
max_idle_connections locales
Ceux-ci semblent assez explicites. Sauf que: Il semblerait que chaque combinaison de nom d'utilisateur (et de mot de passe? Non testé ... probablement pas le cas) crée son propre ensemble de connexions persistantes.
Multipliez donc max_idle_connections par le nombre d'utilisateurs mysql uniques qui se connecteront à la base de données. Et cela devrait vous donner une idée du nombre de connexions inactives que vous finirez par avoir.
Alors, permettez-moi de répéter pour que ce petit texte de présentation frappe certains mots clés pour ceux qui recherchent via Google:
Lors de l'utilisation de PHP, est-il possible d'avoir des connexions mysql persistantes SANS mysql_pconnect?
Oui, cela peut être fait via SQL Relay si cela ne vous dérange pas de reconstruire la plupart de votre code pour diriger vos requêtes via leur extension OU de manière transparente en utilisant mysql-proxy avec le script ro-pooling.lua.
Nous voulons quelque chose comme ça depuis environ un an maintenant.
PRENDRE PLAISIR!
mysql_pconnect
et démarrer chaque connexion avec quelques "fonctions de nettoyage"?