web-dev-qa-db-fra.com

Nombre optimal de connexions dans le pool de connexion

Actuellement, nous utilisons 4 vitres CPU avec 8GB RAM avec MySQL 5.x installé sur la même boîte. Nous utilisons Weblogic Application Server pour notre application. Nous ciblons 200 utilisateurs simultanés pour notre application. (Évidemment pas pour le même module/écran). Donc, quel est le nombre optimal de connexions devrions-nous configurer dans le pool de connexion (numéro min et max) (nous utilisons Weblogic comme "Mécanisme de mise en commun de la connexion)?

32
Silent Warrior

Il y a une réponse très simple à cette question:

Le nombre de connexions dans le pool de connexion doit être égal au nombre de threads Exec configurés dans Weblogic.

La justification est très simple: si le nombre de connexions est inférieur au nombre de filets, une partie du fil peut-être attendre une connexion rendant ainsi le pool de connexion un goulot d'étranglement. Donc, il devrait être égal au moins au nombre des threads Exec (taille de la piscine de fil).

10
Slava Imeshev

Avez-vous vraiment voulu dire 200 simultanément utilisateurs ou seulement 200 utilisateurs connectés? Dans la plupart des cas, un utilisateur navigateur ne sera pas capable de faire plus de 1 page de page par seconde. Donc, 200 utilisateurs se traduisent par 200 transactions par seconde. C'est un très grand nombre pour la plupart des applications.

Quoi qu'il en soit, comme exemple, allons avec 200 transactions par seconde. Dites que chaque extrémité avant (navigateur) TX prend 0,5 seconde à compléter et de 0,5 seconde, 0,25 sont dépensés dans la base de données. Donc, vous auriez besoin de 0,5 * 200 ou 100 connexions dans la piscine THEAD WELLOGIC et 0,25 * 200 = 50 connexions dans le pool de connexion DB.

Pour être en sécurité, je définirais la taille du pool de fil max à au moins 25% plus grand que vous ne prévoyez de permettre des pointes de charge. Les minimums peuvent être une petite fraction du max, mais le compromis est que cela pourrait prendre plus de temps pour certains utilisateurs, car une nouvelle connexion devrait être créée. Dans ce cas, 50 - 100 connexions ne sont pas que beaucoup pour un dB, donc c'est probablement un bon numéro de départ.

Remarque, que pour déterminer les temps de réponse de vos transactions moyens, ainsi que votre temps de requête de DB moyen, vous devrez faire un test de performance car votre temps à la charge ne sera probablement pas les moments où vous voyez avec un seul utilisateur.

54
AngerClown

Le piscine de connexion de dimensionnement n'est pas une chose triviale à faire. Vous avez essentiellement besoin de:

  • métriques pour enquêter sur l'utilisation de la connexion
  • mécanismes de basculement pour quand il n'y a pas de connexion disponible

Flexypool vise à vous aider à déterminer notre taille de pool de connexion droite.

Vous pouvez vérifier les articles suivants:

9
Vlad Mihalcea

Vous devriez connaître les différents flux de travail attendus pour le savoir. Idéalement, votre pool de connexion ajustera de manière dynamique le nombre de connexions en direct basées sur une utilisation récente, car il est assez courant que la charge est fonction de l'heure actuelle de la journée dans votre zone géographique cible.

Commencez par un petit nombre et essayez d'atteindre un nombre raisonnable d'utilisateurs simultanés, puis de le manier. Je pense qu'il est probable que votre mécanisme de mise en commun de la connexion n'est pas aussi déterminant dans votre évolutivité que le reste du logiciel.

6
Greg D

Le pool de connexion doit pouvoir croître et siffler en fonction des besoins réels. Connectez-vous les numéros nécessaires à l'analyse sur le système d'exécution, via des relevés de journalisation ou via la surveillance JMX. Envisagez de configurer des alertes pour des scénarios comme "Peak détecté: plus que X Nouvelles entrées devaient être attribuées en y seconde", "La connexion était hors de la piscine pendant plus de x secondes", ce qui vous permettra de faire attention aux problèmes de performance avant qu'ils ne reçoivent de vrais problèmes.

2

C'est quelque chose qui doit être testé et déterminé sur une base individuelle - il est assez impossible de donner une réponse précise pour votre situation sans intimement connaître avec eux.

1
matt b

Il est difficile d'obtenir des données difficiles pour cela. Cela dépend également d'un certain nombre de facteurs que vous ne mentionnez pas -

  • 200 utilisateurs concurrents, mais combien de leur activité générera des requêtes de base de données? 10 requêtes par page charge? 1 question juste sur la connexion? etc.

  • Taille des requêtes et la DB évidemment. Certaines requêtes fonctionnent en millisecondes, certaines en quelques minutes.

Vous pouvez surveiller MySQL pour regarder les requêtes actives actuelles avec "Afficher les processus". Cela pourrait vous donner un meilleur sens de la quantité d'activité en réalité dans la DB sous charge maximale.

1
Steve B.

Sur la base de mon expérience sur les systèmes financiers de transaction élevée, si vous souhaitez gérer par exemple demandes de 1 km par secondes et vous avez 32 CPU's, vous devez avoir 1000/32 Ouvrez les sondages de connexion à votre base de données.

Voici ma formule:

Rps/cpu_count

Si la plupart des cas, votre moteur de base de données sera en mesure de gérer vos demandes même en nombre beaucoup plus bas, mais vos connexions seront en mode d'attente si le nombre est faible.

Je pense qu'il est assez important de mentionner que votre base de données devrait être en mesure de gérer ces transactions (en fonction de votre vitesse de disque, de votre configuration de la base de données et de l'alimentation du serveur).

Bonne chance.

0
Farsheed