给定基础数据库最大连接设置的java最佳jdbc池大小

问题描述 投票:0回答:1

我正在尝试了解应用程序中的连接池。

假设我们使用的max_connections = 100为Postgresql数据库,我的Java(或其他语言)应用程序中连接池大小的最佳值应该是什么?

  1. 使用java jdbc连接池的大小大于max_connections是否有意义?

  2. 在执行查询后立即关闭(释放)连接是一个好主意吗?还是最好让连接打开(以便我们可以重用它)?

java postgresql jdbc database-connection connection-pooling
1个回答
0
投票

您的最大连接池大小应比max_connections配置(并且,如果您的应用程序在多个节点上运行,请考虑所有节点上的总大小!)。您不想冒管理员或维护工具无法连接到数据库的风险,因为您的应用程序使用了所有连接。

配置绝对不应高于max_connections,因为如果连接池尝试分配超出服务器最大值的连接,那只会导致错误。

实际上,根据您的应用程序需求,您可能会放弃一个很小的连接池(可能是5个或10个连接),并请记住,更多的连接并不总是更好。您需要测试对您的应用程序有意义的内容,因为我们不能仅仅说“这是在所有情况下的最佳配置”

关于您的第二个问题:关闭符合JDBC的连接池中的连接就是将连接返回到连接池以供重用的原因。因此,您应该关闭连接并且不要将其打开太长时间。不关闭连接或保持连接打开太长时间会耗尽池,这意味着需要打开更多连接(或耗尽池)才能为您的应用程序提供足够的连接。

连接池将创建物理连接并将其放入池中。当您的应用程序代码从池请求连接时,连接池会“检出”物理连接,将其包装为逻辑连接,然后将逻辑连接返回到您的应用程序代码。

当您的应用程序代码关闭该逻辑连接时,它会向连接池发出该物理连接可供重用的信号。然后,该池将把物理连接返回到该池,或者可能由于池已具有太多空闲连接或连接太旧或其他验证原因而将其关闭。关闭后,逻辑连接和派生对象(如语句和结果集)的行为(或应该表现为)处于关闭状态(即:它不再可用)。

您的代码应在工作单元完成后立即关闭连接,并且工作单元应尽可能小,但不能太小而导致行为中断(例如,您不应提交工作并在某件事中间关闭连接,而预期的应用程序行为要求后续工作应在同一事务中进行。]

© www.soinside.com 2019 - 2024. All rights reserved.