4 votes

Quelle est la meilleure façon de réduire le nombre de connexions ?

Mon hôte dispose d'un, vraiment faible nombre de connexions maximales pour un utilisateur de base de données. Voici l'erreur que mes utilisateurs obtiennent :

L'utilisateur 'username_here' a dépassé la ressource 'max_user_connections' (valeur actuelle : 15).

Je ne pense pas qu'il soit en mon pouvoir d'augmenter cette valeur, à moins de passer à un plan beaucoup plus cher, et je cherche donc un moyen d'utiliser efficacement ces 15 connexions. Ma façon de gérer les connexions est la suivante : Je me connecte à la base de données dans un script que je charge au début de chaque chargement de page, puis je passe cette connexion à une fonction qui exécute les requêtes. Je pensais pouvoir minimiser le temps d'ouverture d'une connexion en ouvrant la connexion à l'intérieur de la fonction de requête et en la fermant juste après la déclaration de retour, est-ce que cela convient ou est-ce que je complique les choses sans raison ?

En dernier recours, je pensais mettre la connexion à l'intérieur d'un try/catch et tenter de se reconnecter toutes les quelques secondes pour quelques fois de plus. Est-ce que c'est quelque chose de judicieux à faire, ou est-ce que c'est encore pire ?

5voto

Dharman Points 1540

Voici comment optimiser le nombre de connexions :

  • Assurez-vous que vous êtes no en utilisant une connexion persistante n'importe où. C'est le moyen le plus simple de perdre la trace des connexions ouvertes et la raison la plus fréquente pour laquelle il n'y a plus de connexions disponibles. Dans mysqli, la connexion persistante est ouverte en ajoutant le préfixe p: au nom d'hôte lors de la connexion.
  • Assurez-vous que vous n'ouvrez qu'une seule connexion pour chaque requête HTTP. Ne les ouvrez pas et ne les fermez pas, car cela peut rapidement devenir incontrôlable et avoir un impact négatif sur les performances de votre application. Disposez d'une connexion globale unique que vous transmettez aux fonctions qui en ont besoin.
  • Optimisez vos requêtes afin qu'elles soient traitées plus rapidement et qu'elles libèrent la connexion plus vite. Cela s'applique également à l'optimisation des index et à l'élimination du problème N+1. (Par expérience, je peux dire que PDO aide beaucoup à remanier votre code pour éviter les requêtes mal conçues).
  • Si vous devez effectuer d'autres tâches exigeant du temps dans le même processus, effectuez d'abord toutes vos opérations SQL, puis fermez la connexion. Il en va de même pour l'ouverture de la connexion. N'ouvrez la connexion que lorsque vous savez que vous en aurez besoin.

Si vous rencontrez un problème de dépassement de la limite "max_user_connections", cela signifie que votre serveur web n'est pas configuré correctement. Dans un scénario idéal, la connexion MySQL serait illimitée, mais dans le cadre d'un hébergement mutualisé, cette limitation doit être mise en place pour protéger les ressources contre les abus (qu'ils soient accidentels ou intentionnels). Cependant, le nombre de connexions MySQL disponibles doit correspondre au nombre de threads disponibles sur le serveur. Il s'agit d'un sujet très controversé, mais je dirais que si votre application doit effectuer une opération SQL à chaque requête, le nombre de connexions serveur disponibles ne doit pas dépasser le nombre de connexions MySQL disponibles. Sur Apache, vous pouvez calculer le nombre de connexions possibles comme indiqué dans ce lien.

Sur une application raisonnablement conçue, même avec 15 connexions MySQL simultanées, vous devriez toujours être en mesure de gérer un nombre satisfaisant de requêtes par seconde. Par exemple, si chaque requête prend 100 ms, vous pouvez traiter 150 requêtes par seconde.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X