如何确定连接池中所需的连接数?

时间:2009-09-15 09:30:31

标签: java database hibernate connection-pooling c3p0

我在我的应用程序中使用hibernate 3.2.2。对于连接池,我们使用的是c3p0 0.9.1。  我在View模式中使用Generic DAO Pattern和Open Session来进行数据库操作 我们正在开发现有网站的新网站。现在,在现有应用程序中,访问次数为50万次。我对c3p0配置感到困惑。在什么基准,我决定打开连接的否定。 max-connection,min-connection,idletime,timeout等....

2 个答案:

答案 0 :(得分:3)

如果请求进入并且没有可用的免费连接,您首先需要确定池将执行的操作。它会抛出异常吗?返回null?阻止,直到另一个连接返回到池?

一旦你知道在超出容量时会发生什么,请考虑如何在调用代码中处理这个问题,以及在什么情况下可以接受这种情况。在某些时候,随着连接数量的增加,您将不得不开始拒绝提供某些请求,但只有您可以决定这一点。实际点取决于很多因素,包括

  • 您当前的空闲和忙碌请求率
  • 这些费率的波动性(如果费率大幅上涨,你想要更多的“喘息空间”)
  • 与硬件改进和预算修改此代码的开发人员时间相比,任何未来的容量增长预测(如果您计划在几个月内进行升级,则需要的开销少于为了保持运行而需要的开销。几年)
  • 贵公司对处理能力的任何保证
  • 客户理解“稍后再试”请求的能力 - 例如如果你知道它是另一端的自动脚本,它在503上睡了一分钟并再次尝试,这比一个人获得“容量暂时超出”的消息更好,并且两者都比得到非的批处理脚本好得多200响应,只是退出并出现错误。
  • 请求的紧迫性 - 一些请​​求(查看小猫的照片)可以合理地延迟,但其他(股票交易订单)可能是非常时间敏感的。

依此类推。

希望从上面你可以得出你需要能够同时处理的请求数量(如果有不同的类型请求,你可能需要这个也关注)。然后,只需查看传入请求如何获取并使用连接,推理和分析,直到您发现池中连接的数量,这是维持目标连接速率所需的。

不要忘记考虑非请求线程(例如工作池)从同一个池获取自己的连接(池需要更大),以及仅为其部分执行持有连接的请求(游泳池可以更小)。

答案 1 :(得分:0)

对测试实例进行概要分析,进行小配置更改,然后最终通过负载测试进行验证。