20190710 - 数据库连接池大小如何设置

误区:数据库连接池设置的越大,性能越高,吞吐量越大。
错错错。

为啥呢?? 【CPU + 磁盘I/O + 网络I/O】
主要原因:
【CPU】:因为单核CPU的计算机,运行数百个线程,也是CPU去快速调度,切换,执行,使它看起来并行,但其实并不是哒。而且一旦线程的数量超过了CPU核心的数量,再加线程,系统只会更慢,因为上下文切换很耗费额外性能。如果说不考虑其他因素,那么服务器是几核,数据库的连接数就设置成几就能提供最优性能。
其他原因:
【磁盘I/O】:磁盘是由旋转的金属碟片和装在步进马达上的读写头组成的,要数据,就得先寻址。所以,磁盘的操作就会带来寻址的耗时和旋转的耗时,毕竟你要旋转到位才能操作,在这过程中,线程都是阻塞等待状态的,那么其实CPU可以服务于其他的线程。所以说,如果线程处理的是I/O密集型的业务,就可以设置的比CPU核心稍微大一点,这样就可以充分利用空闲时间完成更多的工作,如果是SSD固态硬盘,不需要寻址和旋转,减少线程阻塞的时间,那么更接近于CPU核心数会发挥出更高的性能。
【网络I/O】:网络带宽越高,线程阻塞可能性越小,那么线程数量越接近CPU核心数越好。

连接数计算公式

连接数 = ((核心数 * 2) + 有效磁盘数) (PostgreSQL 提供)
如果服务器CPU是四核i7的,那么连接数的大小为:(4*2)+1 = 9

当然公式不是万能的啦,也要根据具体场景具体分析,例如:
如果系统中混合了长事务和短事务,那么,可以创建两个连接池,一个服务于长事务,一个服务于短事务。
或者说,业务要求同一时间内只执行一定数量的任务,那么并发任务数就应该去适配连接池连接数。

参考链接:https://mp.weixin.qq.com/s?__biz=Mzg2MzE5MjMxNQ==&mid=2247489376&idx=1&sn=0b33a6e05909366cb984452c509b6603&chksm=ce7d02f4f90a8be259b546dc1d355f5eb2cef612fa34886447dff21990060fab6fe2097e01dd&mpshare=1&scene=1&srcid=&rd2werd=1#wechat_redirect

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值