web-dev-qa-db-fra.com

Quelle est la différence entre maxActive et maxIdle pour les pools de connexions Tomcat?

Le pool de connexions Tomcat a un paramètre appelé maxActive et un paramètre appelé maxIdle mes questions. 

  1. Quelle est la différence entre ces deux paramètres? 
  2. Quel est un exemple de scénario du monde réel dans lequel vous pourriez avoir une valeur différente pour maxActive par rapport à maxIdle? 

Pour une raison quelconque, les docs n’ont pas de sens pour moi. maxActive et maxIdle existent à la fois sur Apache dbcp et sur tomact 7 jdbc-pool conformément à la documentation située à http://Tomcat.Apache.org/Tomcat-7.0-doc/jdbc-pool.html

maxActive (int) Nombre maximal de connexions actives pouvant être alloués à partir de ce pool en même temps. La valeur par défaut est 100

maxIdle (int) Nombre maximal de connexions à conserver dans la piscine en tout temps. La valeur par défaut est maxActive: 100 Idle les connexions sont vérifiées périodiquement (si activé) et les connexions été inactif depuis plus longtemps que minEvictableIdleTimeMillis sera publié . (voir aussi testWhileIdle)

34
ams

maxActive est simple. maxIdle peut être expliqué de cette manière - disons que vous avez 100 connexions actives max et que vous définissez maxIdle sur 80. En supposant qu'aucune requête ne soit envoyée à la base de données, seules 80 connexions seront testées (via la requête de validation) et resteront actives. Les 20 autres seront fermés. Donc, à tout moment, vous ne pouvez avoir que 80 connexions inactives.
Vous pouvez définir un nombre différent pour éviter que des connexions supplémentaires (inutiles) soient transmises à la base de données. Chaque connexion servie par la base de données consomme des ressources (comme de la mémoire).
Mais si vous définissez la taille maxActive sur 100 et que toutes les 100 sont utilisées presque tout le temps, ce paramètre n’aura évidemment aucune importance.

31
souser

maxActive

the maximum number of active connections that can be allocated from this pool at the same time.  

Cet attribut est utilisé pour limiter le nombre de connexions qu'un pool peut avoir ouvertes.

maxIdle

(int) The maximum number of connections that should be kept in the pool **at all times.** 

Ceci est pour limiter les connexions inactives. Les connexions (pas plus grandes que la valeur de maxIdle) ne seront pas libérées afin que la prochaine demande de connexions soit beaucoup plus rapide.

Donc, dans Word, maxActive consiste à limiter le nombre maximal de connexions.

Mais inactif (maxIdle ou minIdle) correspond davantage à un problème de performances (temps d'échange avec espace/ressources), parmi lesquels, le maxIdle consiste à limiter le nombre maximal de connexions (les ressources) avec lesquelles vous allez échanger du temps.

14
Jaskey

Dans les environnements de petite taille, les connexions aux bases de données ne posent aucun problème, car elles sont peu nombreuses et les ressources du serveur sont presque intactes. Dans les environnements de grande taille, le nombre de connexions à la base de données consomme beaucoup de ressources. Vous devez donc optimiser la façon dont vous gérez les connexions à la base de données. Utiliser le moins de connexions possible vous donnera de meilleures performances. À ce stade, maxActive définit le nombre maximal de connexions pouvant être établies vers la base de données par ce pool, en limitant les ressources affectées au demandeur. Avec maxIdle, vous indiquez que si une connexion est "inactive", elle sera fermée, sauf s'il existe des connexions min "maxIdle". Pourquoi pas moins que maxIdle ?, car vous avez besoin de connexions prêtes pour les prochaines requêtes à la base de données; vous n'avez donc pas besoin d'ouvrir et de refermer autant de connexions si le pool doit être rempli. Vous libérez ainsi beaucoup de ressources. .

4
ChoCho

Disons que vous avez défini la propriété comme

maxActive = 100

ce qui signifie essentiellement 

Size of the pool = maxActive = 100

Problème avec juste maxActive

Size of pool under heavy load = maxActive
Size of pool under no/low load = maxActive

Même en l'absence de charge (none of the connections are actually in use), les 100 connexions consomment des ressources

Vous pouvez certainement réduire maxActive à 80. Toutefois, cela signifiera également que vous abaisserez la limite supérieure des connexions disponibles pendant une charge importante (when application is consuming all available connections), également à 80.

Ainsi, vous êtes coincé avec maxActive comme taille du pool

Comment maxIdle résout le problème ci-dessus

Disons que vous avez défini les propriétés comme 

maxActive = 100
maxIdle = 80

ce qui signifie essentiellement

Size of pool under heavy load = maxActive = 100
Size of pool under low load = maxIdle = 80

maxIdle donne au pool de connexions la flexibilité nécessaire pour s'adapter à la charge . Pendant une charge élevée (number of connections-in use > maxIdle), maxActive est la seule propriété qui détermine la taille du pool de connexions.

Mais en l'absence de charge (number of connections in-use < than maxIdle), maxIdle détermine la taille du pool de connexions

Ainsi, une valeur correcte de maxIdle garantit que le regroupement de connexions n'a pas d'incidence inutile sur les performances.

0
narayan