专栏首页moon聊技术【腾讯二面】5s内建立多少个mysql连接?

【腾讯二面】5s内建立多少个mysql连接?

以100每秒的速度向mysql写数据,持续5s,此时我们的程序和mysql建立了多少个tcp连接?

从编程的角度来看,一个问题的解答过程,无非是寻求输入输出,这里输出是多少个tcp连接,那么就要锁定输入,也就是参数,有哪些因素会影响这个问题?

在牛牛看来只有两点:mysql当前处理能力和连接池配置。

参数分析

1.mysql处理能力

  • 如果负载正常的情况,mysql 1s内一定能处理100个请求。
  • 如果负载比较高,那1s内就处理不完,为了方便讨论,这里假设1s能处理50个请求。

PS: 正常实体机的mysql,即使配置差到1核1G,也完全能胜任100/s的单纯插入请求。只有在mysql本身异常,或有其他进程占用系统资源时,才会出现1s处理不过来100个请求的情况。这里的两个分支只是逻辑上的讨论。

2.连接池

连接池是实现连接复用的手段,和mysql交互时,每次需要建立一个连接,用完就会关掉,这就是短连接。如果在高并发场景,反复建立连接的成本是很高的,所以我们可以使用长连接,即连接用完后先不关闭,放到一个池子里等待复用,这个池子就叫连接池。

如图所示,连接池暂存了使用完成之后的mysql连接以待复用,最大空闲连接数就是这个池子的大小。连接池通过一系列参数控制了针对mysql的连接复用策略,一般是由客户端引擎实现,支持哪些参数也由客户端引擎决定,通常而言所有的客户端引擎都支持如下几个主要参数:

  • 最大连接数:支持的最大连接数,即能打开连接的最大上限,如果超过这个阈值,就会出现too many connections的提示,这个数字通常可以设置得较大,以应对突如其来的峰值。
  • 最大空闲连接数: 这个参数在上图有标注,表示连接池中最多有多少个空闲连接 ,某个连接做完事务之后暂时空闲,如果连接池中空闲连接数没有达到上限,即可放入连接池。该参数其实可以理解为一共可维护多少个长连接来节约连接建立的成本。
  • 最长空闲时间: 连接池中连接使用完毕后会等到新的请求到来,表明了连接池中的连接在空闲时能在池子里摸鱼多久,如果长时间没有请求到来,说明请求量非常小,此时就需要释放掉连接来节省资源,等待多久,就是由该参数决定,本牛的建议是通常情况下10-20s就足够了。
  • 最小连接数: 连接池中最小空闲连接数,当连接数少于此值时,连接池会创建新的连接来进行补充,作用主要是保持连接池始终处于就绪状态,如果需要的长连接特别多,且请求是周期性的,比如晚上才有的情况下,可以考虑使用该参数。
  • 初始化连接数:初始化连接数目,实际意义不大,由最小连接数补齐即可。

可以看到,最大连接数、最大空闲连接数以及最大空闲时间,这三个参数是起决定作用的。最大连接数保证了长连接➕短连接的上限,避免了单一程序耗尽mysql的连接资源。最大空闲连接数决定了长连接的个数,最大空闲时间则决定了长连接的持续性。

参数正交

回到该题目上看,我们利用控制变量来分析,最大连接数和最大空闲时间我们假设足够大,以保证mysql的正常响应和长连接的可持续性。剩下的就是mysql本身消费能力,和最大空闲连接数即长连接数两个维度的正交了,我们分如下情况:

  1. 处理能力足够,且连接能完全复用:请求速度为100每秒,如果我们的最大空闲连接参数设置为100,而mysql处于正常状态,每秒能完成100个请求·,则一共建立了100个连接。
  2. 处理能力不足,最大空闲连接数足够大:请求以100每秒,如果我们的最大空闲连接数设置为100, 而mysql有负载压力,每秒完成50个请求,这里我们假设mysql处理都是按先入先出,即同一秒产生的请求,因为会先复用连接池,所以连接池那部分会先处理完毕,处理流程如图所示:

圆圈中50:x表示这50个连接是在第x秒产生;长连接中doing表示准备处理中,done表示做完;短连接默认都是doing;红色字体表示下一秒就会处理,连线表明某个连接的前世今生。

第一秒

由于连接池为空,产生100个

第二秒

复用连接池的50个,产生50个

第三秒

复用连接池的50个,产生50个

第四秒

复用连接池的50个,产生50个

第五秒

连接池都在忙绿中,新产生100个

  1. 处理能力足够,但连接池最大空闲连接数较小:请求速度为100每秒,如果我们的最大空闲连接数设置为50,而mysql处于正常状态,每秒完成100个请求,则100➕4✖50
  2. 处理能力不足,且连接池最大空闲连接数较小:请求速度为100每秒,如果我们的最大空闲连接数设置为50, 而mysql有负载压力,每秒只能完成50个请求。这种情况可按照场景2进行分析,欢迎有兴趣的读者在留言区交流。

小结

简简单单一个问题,牵引出的其实是mysql连接池的本质,这也是面试官面试时想考察的能力。

这个问题至少能考察出面试者两方面的能力,一是看面试者的思路是否清晰,在实际业务场景中提出来的需求,大多需要仔细思考来判断存在哪些影响因素,而在面试中留给面试者思考的时间并不多,大家的能力高下立判;第二点则是了解面试者对这些基本知识点的掌握情况,这也是对面试者的知识储备进行考察。

牛牛比较认可这种结合实际场景的面试题目,希望阅读完本篇文章之后大家能有所收获。

本文分享自微信公众号 - moon聊技术(onetraveller_llxz)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-10-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手把手教你使用 Prometheus 监控 MySQL 与 MariaDB

    roc,腾讯高级工程师,Kubernetes Contributor,热爱开源,专注云原生领域。目前主要负责腾讯云TKE 的售中、售后的技术支持,根据客户需求...

    腾讯云原生
  • 手把手教你使用 Prometheus 监控 MySQL 与 MariaDB

    roc,腾讯高级工程师,Kubernetes Contributor,热爱开源,专注云原生领域。目前主要负责腾讯云TKE 的售中、售后的技术支持,根据客户需求输...

    CNCF
  • 客户容灾案例--利用CDN备份源站实现COS双写双读

    腾讯云对象存储 COS 为客户提供了99.95%的可用性和99.999999999%的可靠性。由此可见,数据可靠性是极高的,即使在极端故障场景下,也可以保证客户...

    yiwei
  • 迎接重生,微盟数据库全面上云纪实

    在经历了惨痛的黑天鹅事件以及激烈的数据恢复过程后,作为微盟DBA的我们进行了深刻的反省和自查,作为公司的核心资产,数据库也得到了前所未有的重视。如何保证数据安全...

    腾讯云数据库 TencentDB
  • 腾讯云MySQL数据库代理正式发布,支持自动读写分离

    2021年7月22日,腾讯云数据库正式发布数据库代理(又名proxy)服务,支持MySQL 5.7 版本和8.0 版本,可为用户提供透明且安全的网络代理服务,...

    腾讯云数据库 TencentDB
  • MySQL 新手安装教程(windows版)

    通常情况下 Windows 系统经常使用 SQL Server 数据库,但由于 SQL Server 属于收费产品需要您自行授权,也可购买 数据库 CDB 实例...

    腾讯云数据库 TencentDB
  • 一文教你迅速解决分布式事务 XA 一致性问题

    腾讯云发布了分布式数据库解决方案(DCDB),其最明显的特性之一就是提供了高于开源分布式事务 XA 的性能。

    腾讯云数据库团队
  • 存储总量达 20T 的 MySQL 实例,如何完成迁移?

    为保证业务迁移顺利进行,对迁移流程,工具进行了前期的调查研究,并对过程中发现的 4 大问题进行及时解决,本文为实际迁移经验分享。

    王亮
  • 磊哥测评之数据库篇:自建数据库VS云数据库,到底怎么选?

    最近在学习数据库相关知识,经常跟一个在某金融公司做DBA的大学朋友交流问题。听说他们公司最近在使用云数据库,我立马来了兴趣,以前只听说过云主机,没想到数据库这种...

    腾讯云数据库 TencentDB
  • 相比原生,腾讯云数据库MySQL 8.0带来了哪些新的极致体验?

    官方MySQL 8.0 是非常大的版本,以前的版本号是 5.6、5.7,现在一下飞跃到 8.0,对于 Oracle MySQL官方来说也是非常大的版本,有很多的...

    腾小云
  • 数据库篇:自建数据库VS云数据库,到底怎么选?

    最近在学习数据库相关知识,经常跟一个在某金融公司做DBA的大学朋友交流问题。听说他们公司最近在使用云数据库,我立马来了兴趣,以前只听说过云主机,没想到数据库这种...

    勤劳的小蜜蜂
  • 前沿观察 | 如何选择合适的数据库代理

    版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,...

    腾讯云数据库 TencentDB
  • 连载 | 深入浅出理解云数据库,年薪百万DBA之路 · 第三回

    为帮助开发者更好的了解和运用数据库,腾讯云数据库团队特出品《深入浅出理解云数据库》系列文章,从数据库的基本概念到云数据库特性及应用,从数据库基础原理知识到腾...

    腾讯云数据库 TencentDB
  • MySQL 最佳实践:gh-ost 工具使用详解

    MySQL 的同步机制比较单纯,主库上执行过的 DML 和 DDL 会在从库上再执行一次,那么主库上需要 10min 才能执行完的 DDL 理论上在从库至少也要...

    王文安@DBA
  • 自建数据库VS云数据库,到底怎么选?

    https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=6f5f5aedea72d213ca3...

    勤劳的小蜜蜂
  • 本地IDC机房数据库容灾解决方案

    下文以腾讯云数据库 MySQL为例,介绍如何充分利用腾讯云的优势,减轻DBA的负担,轻松来搭建数据库。

    腾讯云数据库 TencentDB
  • 十面阿里,七面头条

    先解释一下十面阿里,总共分为阿里云四面,蚂蚁两面,菜鸟四面;七面头条分为金融三面,抖音一面,效率工程三面;六个Offer分别是阿里、腾讯、头条、华为、蘑菇街、三...

    好好学java
  • 【腾讯云的1001种玩法】几种在腾讯云建立WordPress的方法(Linux)(二)

    续前文《几种在腾讯云建立WordPress的方法(Linux)(一)》。

    ZNing
  • 前沿观察 | 如何选择合适的数据库代理

    点击上方蓝字关注每天学习数据库 版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处。翻译目的在于传...

    腾讯云数据库 TencentDB

扫码关注云+社区

领取腾讯云代金券