RDS for MySQL连接数过载定位及处理建议
场景介绍
连接数过载主要体现以下两个场景:
- 场景一:连接数持续缓慢上涨导致达到上限。
- 场景二:连接数瞬间飙升导致连接池耗尽。
可能原因
场景一(连接数持续缓慢上涨导致达到上限)主要包含以下原因:
- 应用程序连接池配置不当导致连接泄漏
- 通过华为云控制台的监控指标查看连接数
登录华为云控制台,单击实例名称,进入实例概览页面,在左侧导航栏选择“监控与运维 > 实时监控”,查看“当前活跃连接数”和“总连接数”指标,可切换查看实时数据或历史趋势图。
- 通过SQL命令查询连接情况
```plaintext show status like 'Threads_connected'; show variables like 'max_connections'; ```
- 通过华为云控制台的实时会话功能查看连接来源
登录华为云控制台,单击实例名称,进入实例概览页面,在左侧导航栏选择“智能DBA助手 > 实时会话”,查看所有会话信息,包括客户端IP地址,可按IP进行筛选和统计。
可以排查客户端连接池配置,确保连接能够正常释放和复用。
- 通过华为云控制台的监控指标查看连接数
- 空闲连接未及时释放导致连接堆积
- 通过华为云控制台的实时会话功能查看空闲连接
登录华为云控制台,单击实例名称,进入实例概览页面,在左侧导航栏选择“智能DBA助手 > 实时会话”,在会话列表可通过“Command”列筛选“Sleep”状态的空闲连接,并通过“Time”列查看空闲时间。
- 通过SQL命令查询空闲连接
```plaintext select * from information_schema.processlist where command = 'Sleep' and time > 60; ```
- 通过参数设置空闲超时时间
支持通过参数模板设置“wait_timeout”和“interactive_timeout”参数,默认值为28800秒(8小时),建议根据业务需求设置合理的空闲超时时间(如600秒~1800秒)。同时,客户端连接池也需要配置合理的空闲连接回收参数,如Druid连接池的“minEvictableIdleTimeMillis”和“maxEvictableIdleTimeMillis”参数。更多操作,详见修改RDS for MySQL实例参数。
- 通过华为云控制台的实时会话功能查看空闲连接
- 长事务未提交导致连接被占用
- 通过华为云控制台的实时会话功能查看长事务
登录华为云控制台,单击实例名称,进入实例概览页面,在左侧导航栏选择“智能DBA助手 > 实时会话”,查看执行时间较长的会话,可结合SQL文本判断是否为长事务。
- 通过SQL命令查询长事务
```plaintext select * from information_schema.innodb_trx order by trx_started; ```
可以通过优化事务逻辑、设置事务超时、避免在事务中执行耗时操作来减少长事务。
- 通过华为云控制台的实时会话功能查看长事务
场景二(连接数瞬间飙升导致连接池耗尽)主要包含以下原因:
- 应用程序连接风暴导致瞬间大量连接请求
常见连接风暴场景:
- 类型一:应用启动时初始化大量连接
- 类型二:流量突增导致连接池快速扩容
- 类型三:连接池配置的maxTotal过大,超过实例最大连接数限制
- 类型四:应用程序异常重试导致连接数暴涨
华为云RDS for MySQL支持配置“连接数使用率”监控告警功能,配置监控告警后连接数使用率到达阈值时可收到通知,详见设置告警规则。
- 数据库响应慢导致连接排队堆积
当数据库出现以下情况时,会导致连接处理变慢进而堆积:
对业务的影响
连接数过载会导致新连接无法建立,应用报“Too many connections”错误,严重时会导致服务完全不可用。
处理建议
- 出现过载异常前的建议:
- 合理配置应用连接池参数,建议设置连接池最大连接数不超过实例最大连接数的70%~80%,并配置合理的连接超时时间和空闲连接回收时间。
- 通过华为云控制台配置连接数告警阈值,建议设置为实例最大连接数的70%~80%,当连接数超过阈值时及时收到告警通知。
- 定期检查应用是否存在连接泄漏,确保连接使用后正确关闭。
- 使用华为云RDS for MySQL的参数模板功能,统一管理数据库参数,设置合理的wait_timeout参数值(建议600秒~1800秒)。
- 确保客户端连接池配置的空闲超时时间小于数据库的wait_timeout参数值,避免连接池中的连接被数据库断开后产生无效连接。
- 过载异常中的建议:
- 通过华为云控制台的实时会话功能查看并Kill问题会话。
登录华为云控制台,单击实例名称,进入实例概览页面,在左侧导航栏选择“智能DBA助手 > 实时会话”,查看会话列表,选中空闲连接或问题会话,单击“Kill会话”按钮终止会话。支持批量Kill多个会话。
- 通过华为云控制台的SQL限流功能限制问题SQL的并发执行。
登录华为云控制台,单击实例名称,进入实例概览页面,在左侧导航栏选择“智能DBA助手 > SQL限流”,创建限流规则限制高频问题SQL的并发数,防止连接数进一步上涨。
- 排查连接暴涨的根本原因,检查应用是否存在异常重试逻辑或连接池配置问题。
- 如果业务确实需要更多连接数,可通过控制台修改max_connections参数,或进行规格升配。升配过程中实例可正常访问,但会有秒级连接闪断,建议在业务低峰期进行。
- 通过华为云控制台的实时会话功能查看并Kill问题会话。