1

Comment allez-vous configurer de façon dynamique le nombre maximal de connexions dans un pool de connexions DB?comment déterminer (dynamiquement) le nombre optimal de connexions?

J'ai presque abandonné l'utilisation d'un nombre de connexions «codées en dur» (fichier de configuration, mais quand même). Parfois, plus de connexions fournissent de meilleures performances. D'autres fois, moins de connexions font un meilleur travail. Quelle mesure utiliseriez-vous pour déterminer si vous avez ouvert trop de connexions et si vous en souffrez réellement les performances? S'il vous plaît gardez à l'esprit que je ne peux pas juste "arrêter le monde" pour faire un test de performance - j'ai besoin de quelque chose que je pourrais répondre à mes propres questions (dont je n'ai pas de mesures spécifiques) ne sais pas à l'avance qui est lequel) à déterminer.
(Veuillez noter que j'utilise Java JDBC avec des pilotes DataDirect sous-jacents)

Cette approche est-elle utilisée quelque part (et a-t-elle été utilisée avec succès)? Si non, comment allez-vous résoudre le "quel est le nombre optimal de connexions" quand vous devez supporter à la fois Oracle et MS SQL, à la fois pour plusieurs versions et les requêtes varient énormément dans la nature (recherche indexée/non indexée/extraction de données en masse/correspondance de conditions (indexée et non indexée, avec et sans caractères génériques))?

[Je sais ce qui est similaire à optimal-number-of-connections-in-connection-pool question, mais je pose la question sur la configuration dynamique alors qu'il demande au sujet statique]

Répondre

0

fermeture au manque d'intérêt. Nous avons fini par utiliser une valeur maximale élevée et cela ne semblait pas déranger beaucoup la DB.

0

Si vous file d'attente aux utilisateurs d'attendre une connexion de base de données libre, ils attendent quelque chose inconnu ou artificiellement imposé. Si vous les laissez dans la base de données, vous découvrirez au moins quelle ressource est combattue (le cas échéant). Par exemple, s'il s'agit d'E/S de disque, vous pouvez déplacer vos fichiers pour répartir l'activité sur plusieurs disques ou acheter un disque SSD ou plus de mémoire pour le cache. Mais au moins vous savez quel est votre goulot d'étranglement et pouvez prendre des mesures pour y remédier.

S'il existe une ressource d'interrogation ou de service fastidieuse, vous devriez chercher dans le gestionnaire de ressources pour séparer/limiter ces sessions.

Vous souhaitez probablement également fermer les sessions inutilisées (vous pouvez donc avoir un pic de 500 sessions à l'heure du déjeuner, mais le réduire à 50 pendant la nuit lorsque quelques tâches par lots plus volumineuses sont en cours d'exécution).

+0

pas sûr de comprendre. Vous dites que je n'ai pas du tout besoin d'une taille maximale dans le pool de connexion, juste du temps "fermer la connexion après avoir été inutilisé pendant X secondes"? Qu'en est-il de la taille "sanity" (maximum réel pour éviter le crash de l'application) - 500? 1k? plus? –

0

Vous avez besoin d'une piscine à connexion libre qui s'adapte automatiquement en fonction de la charge. Il devrait donc avoir: - 1) Taille minimale: 0 2) Taille max: selon la configuration DB 3) incrémenter de 1 si les connexions disponibles sont en rupture de stock 4) abandonner la connexion si elle est idel pour X (configuré time) secondes 5) Le pool de connexion doit libérer les connexions abandonnées.

Avec ces paramètres, le pool de connexions doit gérer dynamiquement le nombre de connexions en fonction de la charge.

+1

C'est exactement ce que nous utilisons. La question est - quelles valeurs assigner au nombre de connexions minimales? quelle valeur attribuer au numéro de connexion maximal? –