连接池中的最佳连接数
目前,我们使用的是4 cpu windows box和8gb RAM,MySQL 5.x安装在同一个盒子上。我们正在使用 Weblogic 应用程序服务器作为我们的应用程序。我们的目标是为我们的应用程序提供200个并发用户(显然不是针对相同的模块/屏幕)。那么我们应该在连接池中配置的最佳连接数是多少(最小和最大数)(我们正在使用weblogic AS的连接池机制)?
目前,我们使用的是4 cpu windows box和8gb RAM,MySQL 5.x安装在同一个盒子上。我们正在使用 Weblogic 应用程序服务器作为我们的应用程序。我们的目标是为我们的应用程序提供200个并发用户(显然不是针对相同的模块/屏幕)。那么我们应该在连接池中配置的最佳连接数是多少(最小和最大数)(我们正在使用weblogic AS的连接池机制)?
您的意思是 200 个并发用户还是只有 200 个登录用户?在大多数情况下,浏览器用户每秒无法执行超过 1 个页面请求。因此,200 个用户相当于每秒 200 个事务。对于大多数应用程序来说,这是一个相当高的数字。
无论如何,作为一个例子,让我们每秒处理200个事务。假设每个前端(浏览器)tx 需要 0.5 秒才能完成,在 0.5 秒中,有 0.25 秒在数据库中花费。因此,WebLogic 池中需要 0.5 * 200 或 100 个连接,数据库连接池中需要 0.25 * 200 = 50 个连接。
为了安全起见,我将最大线程池大小设置为至少比您预期的要大 25%,以允许负载峰值。最小值可以是最大值的一小部分,但权衡是某些用户可能需要更长的时间,因为必须创建新连接。在这种情况下,对于数据库来说,50 - 100个连接并不多,所以这可能是一个很好的起始数字。
请注意,要弄清楚您的平均事务响应时间以及平均数据库查询时间,您将不得不进行性能测试,因为您的加载时间可能不是您在单个用户中看到的时间。
这个问题有一个非常简单的答案:
连接池中的连接数应等于 WebLogic 中配置的 exec 线程数。
基本原理非常简单:如果连接数小于线程数,则某些线程可能会等待连接,从而使连接池成为瓶颈。因此,它至少应等于 exec 线程的数量(线程池大小)。