如何确定连接池中所需的连接数量?
问题描述:
我使用休眠在我的应用程序3.2.2。对于连接池,我们使用的是c3p0 0.9.1。 我使用通用DAO模式和打开会话在查看模式做数据库操作。
我们正在对现有网站的新网站。目前,在现有应用程序中,访问量为50万次。我对c3p0配置感到困惑。在什么样的基准测试中,我决定打开没有连接。最大连接,最小连接,空闲时间,超时等....如何确定连接池中所需的连接数量?
答
您首先需要确定是否收到请求时,有没有免费的连接服务它的游泳池会做什么。它是否会抛出异常?返回null?阻塞,直到另一个连接返回到池?
一旦你知道超过容量时,会发生什么,思考如何,你可以在调用代码处理这,在什么情况下,它是可以接受的这种情况发生。在某些时候,作为连接数量的增加你将不得不开始拒绝服务的一些请求,但只有你自己才能决定这一点是什么。实际点取决于很多因素,包括诸如
- 当前的闲置和繁忙的请求速率
- 这些利率的波动性(你想要更多的“喘息空间”,如果利率周围有很多跳)
- 与硬件改进和开发人员时间预算相比,任何未来的容量增加预测都会修改此代码(如果您计划在几个月内升级它,则需要的开销要比它保持运行几年)
- 您的公司提出有关处理能力任何保证
- 客户理解“稍后再试”请求的能力 - 例如如果你知道这是在另一端的自动脚本,睡上一503一分钟,然后再尝试,这比一个人得到一个“能力暂时超过”消息更好,两者都比一个批处理脚本,得到一个非好得多200的回应,只是因为错误而退出。
- 请求的紧迫性 - 一些请求(看着小猫的图片),可以合理地推迟,但其他人(股票交易订单)可能是非常时间敏感。
等等等等。
希望从上面你应该能够拿出你需要能够同时处理的请求的数量(如果有不同的请求类型类型,你可能也需要考虑到这一点) 。然后,只需查看传入请求如何获取并使用连接,推理和分析,直到您发现池中连接数量达到目标连接速率所需的数量即可。
不要忘记考虑诸如非请求线程(例如,工作者池)从同一个池(池需要更大)获取自己的连接,以及只需要为其部分连接保留连接的请求执行(池可以更小)。
答
简介你的测试实例,使得小配置的变化,然后最后用负载测试验证。
5 LAKS = 500,000,是吗? – 2009-09-15 09:36:30
是的。谢谢..我把它改成了50万。 – Shashi 2009-09-15 09:39:44
嗨Shashi。你可能想看看http://stackoverflow.com/questions/1208077/optimal-number-of-connections-in-connection-pool。 – 2009-09-15 20:51:49