mysql_connect AND mysql_pconnect [fermé]
-
05-07-2019 - |
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.
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 parmysql_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 /