[AlternC-dev] connect ou pconnect

Retour à l'archive de la liste
Le site d'AlternC
Google Custom Search

The Anarcat anarcat at anarcat.ath.cx
Mar 19 Oct 18:31:10 CEST 2004


Olivier HUET wrote:
> 
> -----Message d'origine-----
> De:	The Anarcat [SMTP:anarcat at anarcat.ath.cx]
> Date:	mardi 19 octobre 2004 16:53
> A:	stef at heberge.net; Developpement de nouvelles fonctionnalite s pour 
> AlternC
> Objet:	Re: [AlternC-dev] connect ou pconnect
> 
> Pourquoi? Eh bien c'est simplement a cause que le pconect ne
> fonctionne tout simplement pas sous PHP. Chaque "process" PHP est tres
> ephemere: il est charge a l'execution d'une page et souvent decharge a
> la fin de l'execution de ladite page. La "cache" de connection ne
> fonctionne pas *entre* les differentes pages PHP, contrairement a ce
> que l'on aurait tendance a croire.
> 
> [Olivier HUET]  Apparement c'est pourtant bien le cas :
> 
> http://fr2.php.net/function.mysql-pconnect
> 
> [...]
> "First, when connecting, the function would first try to find a 
> (persistent) link that's already open with the same host, username and 
> password. If one is found, an identifier for it will be returned instead of 
> opening a new connection. "
> [...]
> 
> et
> 
> [...]
> "You also may consider using pconnect if you have transactions that span 
> multiple pages. For example, in applications that I develop, I start a 
> transaction on the moment I query selecting the data that the user plans on 
> editing. I then commit the transactions after the user hits the submit 
> button and the data is committed."
> [...]
> 
> Par contre :
> 
> "Warning : Using persistent connections can require a bit of tuning of your 
> Apache and MySQL configurations to ensure that you do not exceed the number 
> of connections allowed by MySQL. "
> 
> Je suppose qu'il faut augmenter le nombre de connexions possibles dans la 
> config de MySQL. Pour Apache par contre je vois pas quoi parametrer...

Le problème avec cette approche, c'est qu'elle est flouée 
fondamentalement à cause du modèle de "pre-fork" de Apache. La 
persistence des connexions ne se fait qu'à l'intérieur d'un seul process 
Apache (je crois). Apache lance et détruit régulièrement des process 
enfants, et j'irais même jusqu'à dire qu'il n'est pas possible pour deux 
process Apache enfant de partager une connexion mysql ouverte avec 
mysql_pconnect(), à moins que PHP partage ces connexions dans les zones 
de mémoires partagées d'apache, cedont je doute fort.

Probablement que les mysql_pconnect() deviennent intéressant dans Apache 
2, avec le modèle de threading, car alors les threads roulent dans le 
même process UNIX, et peuvent alors mieux partager des resources. Mais 
même là, je ne suis pas certain que ça fonctionne correctement.

Maintenant, pour répondre à ton autre question, je crois que les 
mysql_pconnect() peuvent être utiles lorsque, dans le même script, on 
appelle plusieurs fois mysql_pconnect(), ce qui peut être utile dans 
certains cas, si par exemple on fait plusieurs requêtes dans des 
"scopes" PHP différents et que l'on ne partage pas un pointeur vers le 
résultat de mysql_connect().

Mais peu importe cette théorie, en pratique, j'ai eu des énormes 
problèmes avec les connexions vers mysql, jusqu'à ce que je désactive 
les mysql_pconnect() globalement. Si ça fonctionne pour vous, tant mieux. :)

YMMV,

A.


Plus d'informations sur la liste de diffusion Dev