返回顶部
首页 > 资讯 > 数据库 >MySQL的MaxIdleConns不合理,会变成短连接的原因
  • 240
分享到

MySQL的MaxIdleConns不合理,会变成短连接的原因

MySQLMaxIdleConnsMySQL的MaxIdleConns不合理MySQL变成短连接 2022-05-27 07:05:18 240人浏览 安东尼
摘要

1 背景 最近石墨文档线上业务出现了一些性能问题,在突发流量情况下,有个业务性能急剧下降。该服务是依赖于数据库的业务,会批量获取数据库里的数据。在经过一系列的排查过程后,发现该服务到数据库的连接数经常超过MaxId

1 背景

最近石墨文档线上业务出现了一些性能问题,在突发流量情况下,有个业务性能急剧下降。该服务是依赖于数据库的业务,会批量获取数据库里的数据。在经过一系列的排查过程后,发现该服务到数据库的连接数经常超过MaxIdleConns,因此怀疑是数据库的配置导致的性能问题,所以以下针对数据库的代码进行了剖析,并做了相关实验。

2 配置解读


maxIdleCount      int                    // zero means defaultMaxIdleConns; negative means 0
maxOpen      int          // <= 0 means unlimited
maxLifetime    time.Duration     // maximum amount of time a connection may be reused
maxIdleTime       time.Duration          // maximum amount of time a connection may be idle before being closed

可以看到以上四个配置,是我们Go Mysql客户端最重要的配置。

maxIdleCount 最大空闲连接数,默认不配置,是2个最大空闲连接

maxOpen 最大连接数,默认不配置,是不限制最大连接数

maxLifetime 连接最大存活时间

maxIdleTime 空闲连接最大存活时间

3 源码解析

我们的场景是客户端与mysql建立的连接数经常大于最大空闲连接数,这会导致什么问题?我们看下下图中的源码

我们可以看到,当最大空闲连接数小于客户端与数据库建立的连接数的时候,那么就会返回false,并且最大连接数关闭计数器加1。

然后上图中,我们就可以看到,连接被关闭了(Mysql源码里也不留点缓冲时间再关闭)。Go的MySQL客户端这个操作,就会导致当突发流量情况下,由于请求量级过大,超过了最大空闲连接数的负载,那么新的连接在放入连接池的时候,会被无情的关闭,变成短连接,导致你的服务性能进一步恶化。

4 实验

4.1 模拟线上并发数大于MaxIdConns情况

测试代码 , 为了检测以上逻辑,假设了以下场景,设置最大连接数为100,最大空闲连接数为1,并发数为10的goroutine来请求数据库。我们通过MySQL的stats的maxIdleClosed的统计,可以看到下图,我们的连接不停的被关闭。

4.2 模拟线上并发数小于MaxIdConns情况

测试代码 ,假设了以下场景,设置最大连接数为100,最大空闲连接数为20,并发数为10的goroutine来请求数据库,可以看到下图中,无MaxIdleClosed的关闭统计。

4.3 抓包验证线上并发数大于MaxIdConns情况

测试代码 ,为了验证没有理解错代码,抓个包最稳妥。我们将main函数里放个select{},程序执行完mysql的语句后,看下tcp状态和抓包数据。

可以发现确实是tcp的状态统计与MySQL客户端的统计是一致的,并且存在fin包。

5 总结

当突发流量情况下,由于请求量级过大,超过了最大空闲连接数的负载,那么新的连接在放入连接池的时候,会被关闭,将连接变成短连接,导致服务性能进一步恶化。为了避免这种情况,下面列举了,可以优化的措施。

提前将maxIdleConns设大,避免出现短连接

做好mysql读写分离

提升mysql的吞吐量:精简返回字段,没必要的字段不要返回,能够够快复用连接

吞吐量的包尽量不要太大,避免分包

优化连接池,当客户端到MySQL的连接数大于最大空闲连接的时候,关闭能够做一下延迟(官方不支持,估计只能自己实现)

读请求的最好不要放MySQL里,尽量放Redis

6 测试代码

https://GitHub.com/gotomicro/test/tree/main/gORM

以上就是MySQL的MaxIdleConns不合理,会变成短连接的原因的详细内容,更多关于MySQL的MaxIdleConns不合理的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL的MaxIdleConns不合理,会变成短连接的原因

本文链接: https://lsjlt.com/news/10112.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL的MaxIdleConns不合理,会变成短连接的原因
    1 背景 最近石墨文档线上业务出现了一些性能问题,在突发流量情况下,有个业务性能急剧下降。该服务是依赖于数据库的业务,会批量获取数据库里的数据。在经过一系列的排查过程后,发现该服务到数据库的连接数经常超过MaxId...
    99+
    2022-05-27
    MySQL MaxIdleConns MySQL的MaxIdleConns不合理 MySQL 变成短连接
  • mysql突然连接不上的原因有哪些
    MySQL连接不上的原因可能有以下几种:1. 服务器故障:服务器宕机、网络故障、硬件故障等情况都可能导致MySQL无法连接。2. M...
    99+
    2023-10-18
    mysql
  • MySQL远程连接不上的原因有哪些
    MySQL远程连接不上的原因可能包括以下几点: 未正确配置MySQL服务器允许远程连接。需要在MySQL服务器的配置文件中(一般...
    99+
    2024-04-18
    MySQL
  • MySQL数据库连接不上的原因有哪些
    MySQL数据库连接不上的原因可能有以下几种: 服务器未运行:检查 MySQL 服务器是否已启动。 服务器不在运行的端口:默认 M...
    99+
    2024-04-09
    MySQL
  • qt信号和槽连接不成功的原因有哪些
    Qt信号和槽连接不成功的原因可能有以下几种:1. 忘记使用connect函数进行连接:在使用Qt信号和槽进行连接时,需要调用conn...
    99+
    2023-09-27
    qt
  • 云服务器连接不上是什么原因造成的
    云服务器连接不上可能是以下几种原因造成的: 网络连接问题:可能是服务器本地网络连接不稳定或者服务器本身出现故障。建议联系云服务器服务提供商或者服务提供商客服,以获取准确的网络状况和服务器故障解决方案。 操作系统问题:如果云服务器的操作系...
    99+
    2023-10-26
    连接不上 服务器
  • 详解MySQL连接挂死的原因
    目录一、背景架构问题现象二、分析过程连接池陷入焦灼拨开云雾见光明三、解决方案四、小结一、背景 近期由测试反馈的问题有点多,其中关于系统可靠性测试提出的问题令人感到头疼,一来这类问题有时候属于“偶发”现象,难以在环境上...
    99+
    2022-05-28
    mysql 挂死
  • redis连接不上的原因有哪些
    服务未启动:可能是因为Redis服务未启动或者已经停止了。 防火墙设置:防火墙设置可能会阻止与Redis服务器的连接。 网络问题:...
    99+
    2024-04-09
    redis
  • 造成vps连不上的原因有哪些
    造成vps连不上的原因有:1、客观原因,比如连接vps过程中出现网络故障问题、vps硬件出现故障、vps受到恶意网络攻击等因素导致无法连接;2、配置原因,比如vps管理人员在配置vps过程中出现防火墙配置不当、远程连接端口配置不当、限制连接...
    99+
    2024-04-02
  • 云服务器连接不上是什么原因造成的呢
    云服务器连接不上可能是以下几种原因造成的: 网络连接问题:可能是服务器本地网络连接不稳定或者服务器负载过大导致网络连接不稳定; 系统设置问题:可能是服务器系统设置出现问题,可以尝试重新设置服务器的系统设置; 服务器配置问题:可能是服务器...
    99+
    2023-10-26
    连接不上 服务器
  • MySQL远程无法连接的常见原因
    前言 MySQL是目前非常流行的数据库之一,也是中小企业持久化存储的首选数据库。 不同于我们日常学习,在实际应用中,MySQL服务都会挂载在某台服务器上。如果MySQL部署在某台云服务器上,这样一来,操纵数据库每次都需要先连接服务器,再进入...
    99+
    2023-09-01
    mysql docker
  • centos网络连接不上的原因有哪些
    CentOS网络连接不上的原因有以下几种可能性:1. IP地址设置错误:检查IP地址、子网掩码、网关等设置是否正确。2. DNS配置...
    99+
    2023-08-09
    centos
  • 云服务器连接不上是什么原因造成的呢苹果
    如果您的云服务器连接不上,以下是一些可能的原因: 网络连接不稳定:可能是因网络连接不稳定导致的问题。请确保您的网络连接稳定、可靠。 防火墙或其他网络隔离措施未启用:可能是因为防火墙或其他网络隔离措施没有启用,这可能导致云服务器受到攻击或...
    99+
    2023-10-26
    连接不上 苹果 服务器
  • 聊聊Docker不适合跑 MySQL 的N个原因
    目录数据安全问题性能问题1)数据库程序与数据分离2)跑轻量级或分布式数据库3)合理布局应用状态问题资源隔离方面难道 MySQL 不能跑在容器里吗?容器的定义:容器是为了解决&ldqu...
    99+
    2022-12-08
    Docker 跑 MySQL Docker 为什么不适合跑 MySQL Docker不适合跑 MySQL
  • 聊聊Docker不适合跑 MySQL 的N个原因
    目录数据安全问题性能问题1)数据库程序与数据分离2)跑轻量级或分布式数据库3)合理布局应用状态问题资源隔离方面难道 mysql 不能跑在容器里吗?容器的定义:容器是为了解决“在切换运行环境时,如何保证软件能够...
    99+
    2022-12-05
    Docker 跑 MySQL Docker 为什么不适合跑 MySQL Docker不适合跑 MySQL
  • mysql连接报错的原因和解决方法
    mysql连接报错怎么办?相信很多新手小白对此束手无策,通过这篇文章的总结,希望你能找到解决的方法。以下是mysql连接报错的原因和解决方法。报错如下:ERROR 1129 (HY000): Host &#...
    99+
    2024-04-02
  • MySQL连接出现挂死的原因是什么
    MySQL连接出现挂死的原因是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。架构首先,本系统以 MySQL 作为主要的数据存储部件。整一个是典型的微服务架构...
    99+
    2023-06-15
  • MySQL初始化不成功的原因有哪些
    MySQL初始化不成功的原因可能有以下几种: 配置文件错误:配置文件中的参数设置不正确或者配置文件本身存在错误会导致初始化失败。 ...
    99+
    2024-04-28
    MySQL
  • 云服务器连接不上是什么原因造成的怎么解决
    检查是否有服务器出现错误或数据库错误,尝试重启服务器或数据库。 检查服务是否正常,查看是否有权限修改云服务器,或者是否已设置云服务器的权限。 检查是否需要备份数据到云服务器,可以尝试将数据备份到本地磁盘中,或者将数据保存到其他的服务器中。...
    99+
    2023-10-26
    连接不上 服务器
  • 云服务器连接不上是什么原因造成的呢苹果13
    云服务器是一种虚拟化技术,可以为用户提供可扩展的云计算平台。当用户将数据存储在云服务器上时,需要确保其与云服务器之间的网络连接是可靠的。如果网络连接不稳定或出现问题,就会导致云服务器无法正常工作。 云服务器的连接是一个复杂的问题,其中包括...
    99+
    2023-10-28
    连接不上 苹果 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作