数据库连接池到底应该设多大?

数据库连接池到底应该设多大?

对Oracle数据库进行了压力测试,使用9600个并发线程执行数据库操作。连接池大小为2048时,每个请求要在连接池队列中等待33毫秒,并且获得连接后执行SQL需要77毫秒。此时,数据库的等待事件中出现了各种bufferbusywaits,数据库CPU占用率约为95%。接着,连接池大小减少到1024,性能数据发生了变化。连接池大小减半之后,吞吐量保持不变,但等待事件减少了一半。最后,将数据库连接池大小减少到96,仍然保持并发线程数为9600不变。结果显示,连接池平均等待时间只有1毫秒,执行SQL平均耗时为2毫秒。等待事件几乎消失,吞吐量上升。只是通过缩小中间件层的数据库连接池响应时间从100毫秒缩短到了3毫秒,而且没有进行其他任何调整。

这个结果让我们对数据库连接池的大小设定有了新的认识:我们并不需要一个大连接池来应对高并发的访问量,相反,我们需要的是一个小连接池连接池中的连接数量应该等于数据库能够同时进行有效的查询任务数量,通常不会超过2倍的CPU核心数。除此之外,我们还需要让剩下的业务线程在队列中等待。

posted @ 2023-10-04 19:57  delphi中间件  阅读(225)  评论(0编辑  收藏  举报