1. 根据告警的数据库组,及IP信息,登录grafana查看对应的数库组
根据告警触发的时间,监控的【Mysql Memory Usage】指标有断崖式的突降,以及数据组的重启时间与其对应,则是因 oom 导致数据库重启
2.查看内存高的原因
-
释放长连接
监控查看【MySQL Connections】指标,查询范围如一周。Threads Connected 长连接的平均值达到1000 以上,
Threads Running正在运行的活动连接数,只有10来个。活跃连接数(Threads Running)远远低于常驻空闲连接(Threads Connected),过多的空闲长连接会mysql内存使用量增高
建议业务owner对常驻空闲连接数进行释放,或合理调整 连接池 空闲超时等参数
-
慢SQL优化
监控查看【MySQL Slow Queries】指标,查询范围可拉一周,存在大量的慢查询。复杂的慢查询会使mysql内存使用增高
查询慢SQL:
点击【日志分析】,时间范围可选择一周。查看慢SQL数量
建议:让业务owner对其优化慢查,避免全表扫描、对大表排序、复杂连接查询等。
-
mysql内存扩容
mysql内存长期处于高位,且一周内发生oom有好几次的现象
建议对 MySQL 进行申请 内存 扩容操作
-
innodb_buffer_pool_size调整(DBA操作)
业务低峰期,减小innodb_buffer_pool_size参数值(牺牲一定innodb性能)
innodb_buffer_pool_size建议范围值:申请的mysql内存总和 * (0.6 ~ 0.75)
一、补充信息:数据的长连接与短连接
1、定义
2、区别
| 特性 | 长连接 | 短连接 |
| 生命周期 | 较长,通常与用户会话或应用程序生命周期一致 | 较短,通常与单次操作一致 |
| 连接开销 | 初始建立连接的开销较大,但后续操作开销较小 | 每次建立和关闭连接的开销较大 |
| 资源占用 | 占用数据库连接资源时间较长 | 占用数据库连接资源时间较短 |
| 适用场景 | 需要频繁与数据库交互的场景,如实时数据处理、长时间运行的后台服务 | 需要偶尔与数据库交互的场景,如 Web 应用中的单次查询或更新 |
| 管理复杂性 | 需要管理连接的健康状态和超时机制 | 管理相对简单,每次操作后关闭连接 |
| 性能影响 | 如果连接过多可能导致数据库资源耗尽 | 如果频繁建立和关闭连接可能导致性能瓶颈 |
3、对数据库的影响
长连接
短连接
4、如何避免大量的长连接
5、总结
- 长连接适合需要频繁与数据库交互的场景,但需要合理管理连接的生命周期,避免资源耗尽。
- 短连接适合偶尔与数据库交互的场景,但需要注意连接开销对性能的影响。
- 连接池是解决长连接和短连接问题的有效工具,通过合理配置连接池,可以有效提高数据库的性能和资源利用率。
- 优化应用程序逻辑和监控分析也是避免大量长连接的重要手段。
长连接和短连接的使用,要遵循一个平衡原则。
长连接持续存在,会一直占用内存资源,不会在短时间内释放。
线程栈空间:每个连接都会分配一个线程栈,通常默认大小为 256KB。
连接缓冲区:MySQL 为每个连接分配缓冲区,用于存储查询和结果集。
临时表和排序缓冲区:如果查询涉及临时表或排序操作,每个连接还会分配额外的临时表空间和排序缓冲区。
二、补充信息:wait_timeout 和 interactive_timeout 参数与空闲连接的控制
简单记忆:• 写代码 → 受 wait_timeout 控制• 敲命令行 → 受 interactive_timeout 控制
-- 动态生效(重启失效)
SET GLOBAL wait_timeout = 600;
-- 10 分钟
SET GLOBAL interactive_timeout = 600;
-- 仅对当前会话生效
SET SESSION wait_timeout = 600;
三、补充信息:mysql排查连接被长时间占用
1、确认连接状态
SHOW PROCESSLIST;
2、获取连接详细信息
SHOW ENGINE INNODB STATUS;
3、查找长时间执行的查询(获取慢查)
# SET GLOBAL slow_query_log = 'ON';
# 记录执行时间超过1秒的查询
SET GLOBAL long_query_time = 1;
# 慢日志存放路径
SHOW VARIABLES LIKE 'slow_query_log_file';
4、使用性能模式
# 默认是开启,以下是手动开启
SET GLOBAL performance_schema = 'ON';
#
SELECT * FROM performance_schema.events_statements_history;
5、优化sql语句(一般是加索引)
6、关闭闲置连接(wait_timeout 和 interactive_timeout)
通过以上方式,我们可以有效地排查和解决MySQL连接被长时间占用的问题。监控、分析和优化是提高数据库性能的重要环节。定期检查连接状态、保持良好的编码习惯和数据库设计,能显著减少连接占用的问题。建议在生产环境中定期执行这些检查,以保持系统的高可用性和高性能。
四、补充信息:mysql长连接的监控
1、内置工具
2、第三方外部工具
五、补充信息:优化mysql长连接
MySQL长连接在现代Web应用中扮演着重要的角色。通过监控和优化长连接,可以提高数据库的性能和稳定性。本文介绍了MySQL长连接的监控与优化策略,包括使用MySQL内置工具和外部监控工具,以及优化连接池、处理逻辑和服务器配置等策略。通过实施这些策略,可以确保MySQL长连接的高效和可靠。