Подтвердить что ты не робот

В чем разница между maxActive и maxIdle для пулов соединений Tomcat?

Пул соединений tomcat имеет параметр maxActive и параметр, называемый maxIdle, который задает мои вопросы.

  • В чем разница между этими двумя настройками?
  • Что такое сценарий реального мира, где у вас может быть другое значение maxActive, чем для maxIdle?

По какой-то причине документы не имеют для меня смысла. maxActive и maxIdle существуют как на apache dbcp, так и на tactact 7 jdbc-pool согласно документам на http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

maxActive (int) Максимальное количество активных соединений, которые могут быть выделяется из этого пула одновременно. Значение по умолчанию - 100

maxIdle (int) Максимальное количество подключений, которое необходимо сохранить в бассейне во все времена. Значение по умолчанию: maxActive: 100 Idle соединения проверяются периодически (если включено) и соединения, которые простаивал дольше, чем minEvictableIdleTimeMillis будет выпущен. (также см. testWhileIdle)

4b9b3361

Ответ 1

maxActive - прямолинейный. maxIdle можно объяснить таким образом - скажем, у вас есть 100 максимальных активных подключений и утверждают, что вы устанавливаете maxIdle на 80. Предполагая, что в базе данных нет запросов, будет проверено только 80 подключений (через проверку правильности) и останется активным. Остальные 20 будут закрыты. Поэтому в любой момент вы можете иметь только 80 простоя. Возможно, вы захотите установить это для другого номера, чтобы предотвратить добавление дополнительных (ненужных) соединений в базу данных. Потому что каждое соединение, которое обслуживается базой данных, потребляет ресурсы (например, память).
Но, предположив, что вы установили максимальный размер до 100, и все 100 используются почти все время, этот параметр, очевидно, не имеет значения.

Ответ 2

maxActive

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

Этот атрибут используется для ограничения количества подключений, которые пул может открыть.

maxIdle

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

Это ограничение ограниченных соединений. Соединения (не превышающие значение maxIdle) не будут выпущены, так что следующий запрос на соединения будет намного быстрее.

Таким образом, maxActive должен ограничить максимальные соединения.

Но idle (maxIdle или minIdle) больше подходит для производительности (время обмена с пространством/ресурсами), среди которых maxIdle - ограничение максимальных подключений (ресурсов), которые вы собираетесь менять время с.

Ответ 3

В небольших средах соединения с базами данных не являются проблемой, потому что соединений не так много, а серверные ресурсы практически не повреждены. В больших средах количество подключений к базе данных потребляет много ресурсов, поэтому вам нужно оптимизировать способ управления соединениями с базой данных, используя меньшее количество соединений, что даст вам лучшую производительность. В этом пункте maxActive устанавливает максимальное количество подключений, которые могут быть внесены в базу данных этим пулом, ограничивая ресурсы, назначенные запрашивающему. С maxIdle вы указываете, что если соединение "простаивает", оно будет закрыто, если не будет минимальных "maxIdle" соединений. Почему не меньше maxIdle?, потому что вам нужно, чтобы некоторые соединения были готовы для последующих запросов к базе данных, поэтому вам не нужно открывать и закрывать так много подключений, если пул должен быть заполнен, поэтому вы освобождаете много ресурсов.

Ответ 4

Я думаю, что это точно так же, как банк, maxActive решить, что у работника есть банк. И maxIdle определяет количество наименее работающих oncall, даже нет клиента.