- 这两个设置之间有什么区别?
- 在什么实际情况下,您可能会为maxActive和maxIdle设置不同的值?
maxActive (int):该池可以同时分配的活动连接的最大数量。默认值为100
maxIdle (int):应始终保留在池中的连接的最大数量。默认值为maxActive:100。空闲连接定期进行检查(如果启用),并且已空闲时间超过minEvictableIdleTimeMillis的连接将被释放。(还请参见testWhileIdle)
maxActive (int):该池可以同时分配的活动连接的最大数量。默认值为100
maxIdle (int):应始终保留在池中的连接的最大数量。默认值为maxActive:100。空闲连接定期进行检查(如果启用),并且已空闲时间超过minEvictableIdleTimeMillis的连接将被释放。(还请参见testWhileIdle)
maxActive很简单。maxIdle可以这样解释——假设你有100个最大活动连接,并且将maxIdle设置为80。如果没有请求发送到数据库,那么只有80个连接将通过验证查询进行测试并保持活动状态。其他20个将会被关闭。因此,在任何时刻,您只能拥有80个空闲连接。
您可能希望将其设置为不同的数字,以防止额外的(不必要的)连接发送到数据库。因为每个由数据库提供服务的连接都会消耗资源(如内存)。
但是,假设您已将maxActive大小设置为100,并且几乎所有时间都使用了全部100,则此设置显然无关紧要。
the maximum number of active connections that can be allocated from this pool at the same time.
该属性用于限制连接池可以打开的连接数。
(int) The maximum number of connections that should be kept in the pool **at all times.**
这是为了限制空闲连接。 连接(不大于maxIdle的值)将不会被释放,以便下一次连接请求速度更快。
因此,总之,maxActive是用来限制最大连接数的。
但空闲连接(maxIdle或minIdle)更多地涉及性能问题(用时间和空间/资源进行交换),其中,maxIdle是用来限制你要与之交换时间的最大连接数(资源)。
假设您已将属性定义为:
maxActive = 100
本质上意味着
Size of the pool = maxActive = 100
仅使用maxActive存在的问题
Size of pool under heavy load = maxActive
Size of pool under no/low load = maxActive
即使没有负载(实际上没有连接被使用
),所有100个连接都正在消耗资源。应用程序正在使用所有可用连接
),可用连接的上限也会降至80。maxActive = 100
maxIdle = 80
这基本上意味着
Size of pool under heavy load = maxActive = 100
Size of pool under low load = maxIdle = 80
maxIdle属性能够使连接池适应负载情况。在高负载(正在使用的连接数 > maxIdle
)期间,maxActive 属性是唯一决定连接池大小的属性。
但是,在没有负载的情况下(正在使用的连接数 < maxIdle
),maxIdle 属性就成了决定连接池大小的唯一属性。
因此,正确设置maxIdle属性可以确保连接池不会影响性能。
maxWait
毫秒。如果在此期间没有连接返回到池中,它将抛出一个异常。 - Mike Mike