当前位置:网站首页>数据库连接数设置多少合适?
数据库连接数设置多少合适?
2022-06-13 11:16:00 【编程一生】
引子
很多工程师习惯于使用一个组件时,参数设置依赖于默认值。或者有时候希望依赖数据分析获取到更合适的值,最终发现考虑的数据过于片面或者数据难以收集最终还是拍脑袋决定了参数的大小。今天咱们就以数据库连接数参数为例说明怎么去设计参数。
前提知识
先说明一下数据库连接数大小是什么概念。数据库连接数一般指数据库连接池。 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数制约。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。

数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1.最大连接数
它(maxActive)是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
2. 最小连接数
它(minIdle)是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费。
3. 最小连接数与最大连接数差距
最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
怎样决定最大连接数?
很多朋友觉得自己的系统需要很大的吞吐,并发量高,那就应该尽量将连接数设置的大一些。我们来看之前歪果仁做的一个实验:
歪果仁对 Oracle 数据库进行了压力测试,模拟 9600 个并发线程来操作数据库,每两次数据库操作之间 sleep 550ms,刚开始设置的线程池大小为 2048。
结果:
每个请求要在连接池队列里等待 33ms,获得连接之后,执行SQL需要耗时77ms, CPU 消耗维持在 95% 左右;
接下来,我们将连接池的大小改小点,设置成 1024,其他测试参数不变。
结果:
获取连接等待时长基本不变,但是 SQL 的执行耗时降低了。
接下来,我们再设置小些,连接池的大小降低到 96,并发数等其他参数不变。
结果:
每个请求在连接池队列中的平均等待时间为 1ms, SQL 执行耗时为 2ms.
其实,对于一般情况来说,最大连接数200是DBA看了都会害怕的数值。200个连接,就意味着有200个并发通道。从系统影响来说,并发量高时,它会影响CPU、内存、磁盘IO的指标,甚至可能打垮服务器。从业务影响来说,很多SQL并行执行,增加了SQL之间相互影响的几率,造成更高的锁等待率。
对服务端的影响可参考我之前对并发数研究的文章。这里要说明的是连接数是对数据库服务器的保护,对一般数据库服务器质量还可以的SSD硬盘设备,无慢查询,平均数据库处理时长在2ms以下的请求,最大连接数10可达到TPS到5000。对于一般的系统足够用。更精确的还是要靠实际压测结果。
编程一生
因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。
想知道自己错过了哪些更新,可参考我不定期更新的《系列文章分类汇总》。
边栏推荐
- The road of ospo construction of Weibo: how to promote enterprise open source through ospo construction?
- pyepics下载和安装
- Performance monster on arm64: installation and performance test of API gateway Apache APIs IX on AWS graviton3
- Model building process 1==miidock
- Vivo large scale kubernetes cluster automation operation and maintenance practice
- Apache APISIX v2.14.1 探索性版本发布,进军更多领域
- 避免让转型企业走入歧途,是时候重新理解下湖仓一体了!| Q推荐
- 音视频技术开发周刊 | 249
- Tamidog knowledge | a comprehensive analysis of the meaning and role of mergers and acquisitions of state-owned enterprises
- 关于 SAP Spartacus CmsService.getComponentData 可能的优化思路
猜你喜欢
随机推荐
Interval modification multiplication and addition (a good example of understanding lazy tags)
很妙的贪心(F2. Nearest Beautiful Number (hard version))
抖音如此重视直播销售外卖套餐,会不会是创业者巨大机会?
[tcapulusdb knowledge base] Introduction to tmonitor stand-alone installation guidelines (I)
Ubuntu installs MySQL compressed package for future reference
【TcaplusDB知识库】Tmonitor系统升级介绍
vivo大规模 Kubernetes 集群自动化运维实践
[dynamic planning] beginner level
21世纪以来的历次“粮食危机”,发生了什么?
Ue5 small knowledge points geometry script modeling
Show/exec and close/hide of QT form are not executed when calling the close destructor
vivo大规模 Kubernetes 集群自动化运维实践
Database system concept (Chapter 17)
ARM64 上的性能怪兽:API 网关 Apache APISIX 在 AWS Graviton3 上的安装和性能测试
2020 ICPC Asia Taiwan Online Programming Contest C Circles
There is no suspense about the first one in the overtime table of the Internet company!
Ipdu handling caused by mode change of COM
Ue5 random point in bounding boxf from stream
恶意代码实战分析Lab05-01
Web3 系统构建:去中心化的原则、模型和方法(上)









