目前我们正在使用 4 cpu windows box 和 8gb RAM 和 MySQL 5.x 安装在同一个盒子上。我们正在为我们的应用程序使用 Weblogic 应用程序服务器。我们的应用程序的目标是 200 个并发用户(显然不是针对相同的模块/屏幕)。那么我们应该在连接池中配置的最佳连接数是多少(最小和最大数量)(我们正在使用 weblogic AS 的连接池机制)?
8 回答
您真的是指 200 个并发用户还是仅 200 个登录用户?在大多数情况下,浏览器用户每秒不能执行超过 1 个页面请求。因此,200 个用户每秒转化为 200 个事务。对于大多数应用程序来说,这是一个相当高的数字。
无论如何,作为一个例子,让我们每秒处理 200 个事务。假设每个前端(浏览器)tx 需要 0.5 秒才能完成,在 0.5 秒中,有 0.25 秒用于数据库。因此,您需要 0.5 * 200,即 WebLogic thead 池中的 100 个连接,以及 DB 连接池中的 0.25 * 200 = 50 个连接。
为了安全起见,我会将最大线程池大小设置为至少比您预期的负载峰值大 25%。最小值可以是最大值的一小部分,但代价是某些用户可能需要更长的时间,因为必须创建新连接。在这种情况下,50 - 100 个连接对于数据库来说并不算多,所以这可能是一个很好的起始数字。
请注意,要弄清楚您的平均事务响应时间以及平均数据库查询时间,您将不得不进行性能测试,因为您的负载时间可能不会是您看到的时间用户。
这个问题有一个非常简单的答案:
连接池中的连接数应等于 WebLogic 中配置的 exec 线程数。
原理很简单:如果连接数小于线程数,则可能有一些线程在等待连接,从而使连接池成为瓶颈。因此,它至少应该等于 exec 线程的数量(线程池大小)。
您应该分析不同的预期工作流程以找出答案。理想情况下,您的连接池还将根据最近的使用情况动态调整实时连接的数量,因为负载通常是目标地理区域中当前时间的函数。
从少量开始并尝试达到合理数量的并发用户,然后再增加。我认为您很可能会发现您的连接池机制在您的可扩展性方面几乎没有软件的其他部分那么重要。
连接池应该可以根据实际需要进行增减。通过日志语句或通过 JMX 监视记录在运行系统上进行分析所需的数字。考虑为“检测到峰值:必须在 Y 秒内分配超过 X 个新条目”、“连接在池外超过 X 秒”等场景设置警报,这将使您能够在性能问题出现之前关注它们真正的问题。
这是需要根据个人情况进行测试和确定的事情 - 如果不熟悉您的情况,几乎不可能给出准确的答案。
很难获得这方面的硬数据。它还取决于您未提及的许多因素-
200 个并发用户,但他们的活动中有多少会生成数据库查询?每页加载 10 个查询?1 只在登录时查询?等等等等
查询的大小和数据库很明显。有些查询在几毫秒内运行,有些则在几分钟内运行。
您可以使用“show processlist”监视 mysql 以查看当前活动的查询。这可以让您更好地了解在峰值负载下数据库中实际发生了多少活动。
根据我在高交易金融系统上的经验,如果你想处理每秒 1K 的请求,并且你有32
CPU,你需要对1000/32
你的数据库进行开放的连接轮询。
这是我的公式:
RPS / CPU_COUNT
在大多数情况下,即使数量少得多,您的数据库引擎也能够处理您的请求,但如果数量少,您的连接将处于等待模式。
我认为提到您的数据库应该能够处理这些事务(基于您的磁盘速度、数据库配置和服务器能力)是非常重要的。
祝你好运。