Question

J'ai ce doute, j'ai fait des recherches sur le Web et les réponses semblent être diversifiées. Est-il préférable d'utiliser mysql_pconnect sur mysql_connect lors de la connexion à une base de données via PHP? J'ai lu que pconnect évolue beaucoup mieux, mais d'un autre côté, étant une connexion persistante ... avoir 10 000 connexions en même temps, toutes persistantes, ne me semble pas évolutif.

Merci d'avance.

Était-ce utile?

La solution

Les connexions persistantes ne devraient pas être nécessaires pour MySQL. Dans d'autres bases de données (telles qu'Oracle), établir une connexion coûte cher et prend du temps. Par conséquent, si vous pouvez réutiliser une connexion, vous gagnerez beaucoup. Mais ces marques de bases de données offrent le regroupement de connexions, ce qui résout le problème mieux.

La connexion à une base de données MySQL est rapide comparée à celle des autres marques. Par conséquent, l’utilisation de connexions persistantes offre proportionnellement moins d’avantages pour MySQL que pour une autre marque de base de données.

Les connexions persistantes présentent également un inconvénient. Le serveur de base de données alloue des ressources à chaque connexion, que les connexions soient nécessaires ou non. Vous voyez donc beaucoup de ressources inutiles si les connexions sont inactives. Je ne sais pas si vous atteindrez 10 000 connexions inactives, mais même quelques centaines coûtent cher.

Les connexions ont un état et il serait inapproprié de demander à une requête PHP d'hériter " informations d'une session précédemment utilisée par une autre requête PHP. Par exemple, les tables temporaires et les variables utilisateur sont normalement nettoyées lors de la fermeture d'une connexion, mais pas si vous utilisez des connexions persistantes. De même, les paramètres basés sur la session tels que le jeu de caractères et le classement. De même, LAST_INSERT_ID () indiquerait le dernier identifiant généré pendant la session, même s'il s'agissait d'une requête PHP précédente.

Pour MySQL au moins, les inconvénients des connexions persistantes l'emportent probablement sur leurs avantages. Et il existe d’autres techniques plus performantes permettant d’atteindre une évolutivité élevée.

Mise à jour de mars 2014:

La vitesse de connexion à MySQL était toujours faible comparée à celle d’autres marques de SGBDR, mais elle s’améliore encore.

Voir http://mysqlserverteam.com/improving-connectdisconnect-performance/

  

Dans MySQL 5.6, nous avons commencé à travailler sur l’optimisation de la gestion du code, des connexions et des déconnexions. Et ce travail s'est accéléré dans MySQL 5.7. Dans ce billet de blog, je vais d'abord montrer les résultats que nous avons obtenus, puis décrire ce que nous avons fait pour les obtenir.

Lisez le blog pour plus de détails et des comparaisons de vitesse.

Autres conseils

Fondamentalement, vous devez équilibrer le coût de la création de connexions par rapport à la conservation des connexions. Même si MySQL est très rapide pour configurer une nouvelle connexion, cela coûte quand même - en temps de configuration du thread et en temps de configuration TCP / IP depuis votre serveur Web. Cela se remarque sur un site à trafic suffisant. Malheureusement, PHP ne dispose d'aucun contrôle sur la persistance des connexions. La solution consiste donc à réduire considérablement le délai d'inactivité dans MySQL (jusqu'à 20 secondes, par exemple) et à augmenter la taille du cache des threads. Ensemble, cela fonctionne généralement remarquablement bien.

D'un autre côté, votre application doit respecter l'état de la connexion. Il est préférable de ne pas présumer de l'état de la session. Si vous utilisez des tables temporaires, utiliser CREATE IF NOT EXISTS et TRUNCATE TABLE aide beaucoup, tout comme le fait de les nommer de manière unique (par exemple, en tant qu'id utilisateur). Les transactions sont un peu plus problématiques; mais votre code peut toujours faire ROLLBACK en haut, juste au cas où.

Il est très peu probable que vous atteigniez 10 000 connexions. Quoi qu'il en soit, accédez à la source officielle . (Souligné par moi).

  

Si les connexions persistantes n'ont pas   toute fonctionnalité ajoutée, quels sont   ils sont bons pour?

     

La réponse ici est extrêmement simple -   Efficacité. Les connexions persistantes sont   bon si les frais généraux pour créer un lien   à votre serveur SQL est élevé. Que ce soit ou   pas cette surcharge est vraiment élevé   dépend de nombreux facteurs. Comme ça   type de base de données, qu’il soit ou non   pas, il est assis sur le même ordinateur   votre serveur Web, comment   chargé la machine le serveur SQL est assis   sur est et ainsi de suite. La ligne du bas   est-ce que si cette surcharge de connexion est   des connexions élevées et persistantes vous aident   considérablement . Ils causent l'enfant   processus pour se connecter simplement une fois   pour toute sa durée de vie, au lieu de   chaque fois qu'il traite une page   nécessite une connexion au serveur SQL.   Cela signifie que pour chaque enfant qui   ouvert une connexion persistante   avoir sa propre persistance ouverte   connexion au serveur. Par exemple,   si vous avez eu 20 enfants différents   les processus qui ont exécuté un script qui a fait   une connexion persistante à votre SQL   serveur, vous auriez 20 différents   connexions au serveur SQL, un   de chaque enfant.

     

Notez cependant que cela peut avoir des   inconvénients si vous utilisez une base de données   avec des limites de connexion qui sont   dépassé par l'enfant persistant   les liaisons. Si votre base de données a   limite de 16 connexions simultanées,   et au cours d'un serveur occupé   session, 17 fils enfants tentent de   connecter, on ne pourra pas. Si   il y a des bugs dans vos scripts   ne pas laisser les connexions se fermer   vers le bas (comme des boucles infinies), le   base de données avec seulement 16 connexions peut   être rapidement submergé. Vérifier votre   documentation de base de données pour information   sur le traitement abandonné ou inactif   connexions.

mysql_connect () et mysql_pconnect () fonctionnent tous les deux pour la connexion à la base de données, mais avec peu de différences. Dans mysql_pconnect () , p correspond à une connexion de persistance.

Lorsque nous utilisons la fonction mysql_connect () , chaque fois qu'il ouvre et ferme la connexion à la base de données, en fonction de la requête.

Mais dans le cas de la fonction mysql_pconnect () :

  • Tout d'abord, lors de la connexion, la fonction essaie de trouver une connexion (persistante) déjà ouverte avec le même hôte, le même nom d'utilisateur et le même mot de passe. S'il en trouve un, son identifiant sera renvoyé au lieu d'ouvrir une nouvelle connexion.

  • Deuxièmement, la connexion au serveur SQL ne sera pas fermée à la fin de l'exécution du script. Au lieu de cela, la connexion restera ouverte pour une utilisation future ( mysql_close () ne fermera pas la connexion établie par mysql_pconnect () ).

mysql_pconncet () est utile lorsque vous avez beaucoup de traffice sur votre site. À ce moment-là, pour chaque demande, il n'ouvrira pas de connexion mais le prendra du pool. Cela augmentera l'efficacité de votre site. Mais pour une utilisation générale, mysql_connect () est préférable.

MYSQL_CONNECT ()

1.mysql_connect peut être utilisé pour fermer la connexion.Chaque fois qu'il ouvre et ferme la connexion à la base de données, en fonction de la requête.

La base de données 2.Here est ouverte à chaque fois que la page est chargée dans MYSQL Connect

3.Une fois la page chargée, la base de données est chargée à chaque fois

4.Il est utilisé pour fermer la connexion

Exemple:

<?php $conn = mysql_connect(‘host’, ‘mysql_user’, ‘mysql_password’); if(!$conn){ die(‘Could not connect: ‘ . mysql_error()); } echo ‘Connected successfully’; mysql_close($conn); ?>

Description:

hôte: spécifie un nom d'hôte ou une adresse IP tel que localhost.

mysql_user: spécifie le nom d'utilisateur MySQL

mysql_password: Spécifie le mot de passe MySQL

MYSQL_PCONNECT ()

1.Nous utilisons mysql_pconncet (), il essaie initialement de trouver une connexion persistante ouverte.

2.Le mysql_pconncet () ouvre une connexion persistante

3.Le mysql_pconnect () ne supporte pas la connexion fermée

4.mysql_pconnect () ne peut pas fermer la connexion. Ouvrez ici une connexion persistante à la base de données

5.La base de données n'a pas besoin d'être connectée à chaque fois.

6.La base de données n'a pas besoin d'être connectée à chaque fois dans mysql_pconncet ().

plus de détails: http://prittytimes.com/difference-between-mysql_connect- et-mysql_pconnect /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top