Java 连接池中的最佳连接数

Java 连接池中的最佳连接数,java,mysql,performance,weblogic,connection-pooling,Java,Mysql,Performance,Weblogic,Connection Pooling,目前,我们使用的是4 cpu windows机箱,8gb内存,MySQL 5.x安装在同一个机箱上。我们正在为我们的应用程序使用Weblogic应用程序服务器。我们的应用程序的目标是200个并发用户(显然不是同一个模块/屏幕)。那么,我们应该在连接池中配置什么样的最佳连接数(最小和最大连接数)(我们使用weblogic作为“连接池机制”)您应该分析不同的预期工作流程以找到答案。理想情况下,您的连接池还将根据最近的使用情况动态调整活动连接的数量,因为负载通常是目标地理区域中当前时间的函数 从一个小

目前,我们使用的是4 cpu windows机箱,8gb内存,MySQL 5.x安装在同一个机箱上。我们正在为我们的应用程序使用Weblogic应用程序服务器。我们的应用程序的目标是200个并发用户(显然不是同一个模块/屏幕)。那么,我们应该在连接池中配置什么样的最佳连接数(最小和最大连接数)(我们使用weblogic作为“连接池机制”)

您应该分析不同的预期工作流程以找到答案。理想情况下,您的连接池还将根据最近的使用情况动态调整活动连接的数量,因为负载通常是目标地理区域中当前时间的函数


从一个小数目开始,尝试达到一个合理的并发用户数,然后再增加。我认为您可能会发现,您的连接池机制在可伸缩性方面远不如软件的其他部分那么重要。

这是一个需要单独测试和确定的问题-如果不密切关注,就几乎不可能对您的情况给出准确的答案熟悉它们。

很难获得这方面的硬数据。这还取决于一些你没有提到的因素-

  • 200个并发用户,但他们有多少活动将生成数据库查询?每页加载10个查询?1只在登录时查询?等等等等

  • 查询和数据库的大小。有些查询以毫秒为单位运行,有些查询以分钟为单位运行


您可以通过“ShowProcessList”监视mysql以查看当前的活动查询。这可以让您更好地了解在峰值负载下,数据库中实际进行了多少活动。

连接池应该能够根据实际需要增长和更新。通过日志语句或JMX监视,记录在运行系统上进行分析所需的数字。考虑设置诸如“峰值检测:超过X个新条目必须在Y秒中分配”、“连接超过X秒以上”等场景的警报,这将允许您在出现真正问题之前关注性能问题。

您是指200个并发用户还是仅仅200个登录用户?在大多数情况下,浏览器用户每秒不能执行超过1个页面请求。因此,200个用户转换成每秒200个事务。对于大多数应用程序来说,这是一个相当高的数字

无论如何,作为一个例子,让我们以每秒200个事务为例。假设每个前端(浏览器)发送需要0.5秒才能完成,在0.5秒中,0.25秒花费在数据库中。因此,在WebLogic thead池中需要0.5*200或100个连接,在DB连接池中需要0.25*200=50个连接

为了安全起见,我将最大线程池大小设置为至少比您预期的负载峰值大25%。最小值可以是最大值的一小部分,但折衷是,对于某些用户来说,可能需要更长的时间,因为必须创建新连接。在这种情况下,50-100个连接对于一个DB来说并不是那么多,所以这可能是一个很好的起点


请注意,要计算平均事务响应时间以及平均数据库查询时间,您必须进行性能测试,因为您的负载时间可能不是您在单个用户中看到的时间。

这个问题有一个非常简单的答案:

连接池中的连接数应等于WebLogic中配置的exec线程数


原理非常简单:如果连接数少于线程数,则一些线程可能正在等待连接,从而使连接池成为瓶颈。因此,它至少应该等于exec线程数(线程池大小)

调整连接池的大小不是一件小事。你基本上需要:

  • 用于调查连接使用情况的指标
  • 无可用连接时的故障切换机制

旨在帮助您确定正确的连接池大小。

根据我在高交易量金融系统方面的经验,如果您想处理例如1K请求/秒,并且您有
32个
CPU,则需要
1000/32
打开对数据库的连接轮询

这是我的公式:

RPS/CPU\U计数

如果在大多数情况下,您的数据库引擎将能够处理您的请求,即使请求的数量要少得多,但如果请求的数量很低,您的连接将处于等待模式

我认为非常重要的一点是,您的数据库应该能够处理这些事务(基于您的磁盘速度、数据库配置和服务器电源)


祝你好运。

有什么公式/机制可以让我获得连接池中的大致连接数吗?你可能想通过确定并发事务(或用户)的数量开始计算实际上,您可以预期它几乎每页1个查询,每个查询最多3000条记录。这个问题可能属于serverfault。@Elijah-它与编程非常相关。H/W cofig描述用于详细说明问题。所以,这是回答这个问题的最佳位置。我建议用4(CPU)除以等待时间百分比。我建议最多不超过50个并行连接,可能更少。你的CPU一次只能运行4个线程,再多的配置也比不上。它唯一有帮助的方法是处理IO等待,这取决于您的应用程序。其他信息请求。在pastebin.com上发布并共享链接。A) 完成(未编辑)my.cnf或my.ini文本结果:B)显示全局状态;至少24小时正常运行后C)显示全局变量b