数据库连接数设置多少合适?
引子
很多工程师习惯于使用一个组件时,参数设置依赖于默认值。或者有时候希望依赖数据分析获取到更合适的值,最终发现考虑的数据过于片面或者数据难以收集最终还是拍脑袋决定了参数的大小。今天咱们就以数据库连接数参数为例说明怎么去设计参数。
前提知识
先说明一下数据库连接数大小是什么概念。数据库连接数一般指数据库连接池。 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数制约。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
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。对于一般的系统足够用。更精确的还是要靠实际压测结果。
编程一生
因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。
想知道自己错过了哪些更新,可参考我不定期更新的《系列文章分类汇总》。
数据库连接数设置多少合适?相关推荐
- mysql8最大连接数设置多少合适
如何解决MySQL超过最大连接数问题 同一时间最多100个链接.能同时在线多少人不好说,因为这要看你的程序了.最大链接100一般够用了,不像WEB服务器的最大链接.max_user_connectio ...
- MYSQL连接数设置
理解qps和tps 1.TPS TPS 即TransactionsPer Second的缩写,每秒处理的事务数目.一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程**(完整处理,即客户端 ...
- 云计算之路-阿里云上:数据库连接数过万的真相,从阿里云RDS到微软.NET Core
在昨天的博文中,我们坚持认为数据库连接数过万是阿里云RDS的问题,但后来阿里云提供了当时的数据库连接情况,让我们动摇了自己的想法. 帐户 连接数 A 4077 B 3995 C 741 D 698 E ...
- mysql buffer_mysql read_buffer_size 设置多少合适
很多朋友都会问mysql read_buffer_size 设置多少合适,其实这个都是根据自己的内存大小等来设置的 key_buffer_size + (read_buffer_size + sort ...
- mysql 增大数据库链接_怎么增大MYSQL数据库连接数
怎么增大MYSQL数据库连接数 怎么增大MySQL数据库连接数,MYSQL数据库安装完成后,默认连接数是100,流量稍微大一点的论坛或网站这个连接数是不够哟用的,那么怎么才能增加默认MYSQL连接数呢 ...
- oracle数据库连接满了,ORACLE数据库连接数满的分析及优化
最近在使用Oracle的过程中,出现了数据库连接数满的情况,导致程序及数据库连接工具连接不上.主要从两个方面来考虑这件事,从程序方面来看: 1.进行数据库连接操作后未释放连接: 2.若使用了数据库连接 ...
- 案例:Oracle 11g RAC 数据库连接数过高处理办法
墨墨导读:近期有一套数据库总是出现如下告警"严重告警:XXX Oracle 服务器:10.10.X.X 数据库的侦听器 LISTENER 状态为 Inactive ",本文详述处理 ...
- mysql连接量设置_mysql连接数设置操作方法(Too many connections)
mysql在使用过程中,发现连接数超了~~~~ [root@linux-node1 ~]# mysql -u glance -h 192.168.1.17 -p Enter password: ERR ...
- ftp服务器连接数修改,ftp服务器连接数设置
ftp服务器连接数设置 内容精选 换一换 GaussDB(for MySQL)全兼容MySQL协议,因此,连接GaussDB(for MySQL) 实例有普通连接和SSL连接.其中,SSL连接实现了数 ...
最新文章
- Unix / Linux世界里的4-2-1
- 数据库查询构建控件集Active Query Builder
- iOS 自定义相机,带水印!
- Servlet3.0 multipart 文件上传技术
- 代码review工具:Review Board
- F - Sugoroku2(期望dp)
- SOCKET入门最简单的程序啊
- sql取得某日期内的数据
- Jasper报表导出pdf中文不显示——Font simsun is not available to the JVM. See the Javadoc for more det,已解决
- 简指南越狱的iOS及原因,负责其
- iOS 几种打包方式
- 2009牛年春节祝福短信集锦
- win7用计算机名无法访问局域网,Win7局域网不能访问的解决方法
- word插入页码问题解决办法
- 《编程人生》15位业界传奇人物 (zz.IS2120)
- PHP中smart原则,SMART原则的五大原则是什么
- Zoho One平台正式发布 或将颠覆企业软件和SaaS行业
- less/sass中属性选择器使用方法
- 红帽linux挑战赛题目,浅谈红帽linux挑战赛(三)
- java从入门到放弃(二)