现象描述
数据库 MySQL 出现内存突增,内存持续增长不释放的情况。具体表现在实例监控的内存利用率监控图表中,如下图所示:
在突增之后,或者长期缓慢增长的过程中,最终达到一个过高的水平(>96%),且在一定范围内小幅度变动,有可能会经常性的触发自定义的可观测平台内存告警。
故障风险
低效的 SQL 语句或数据库参数设置不当都可能会导致内存利用率升高,若您使用的是云数据库 MySQL 双节点、三节点架构,遇到突发业务高峰时,可能会导致云数据库内存 OOM(Out Of Memory),当云数据库由于 OOM 导致不可用时,会触发主备切换,主备切换的过程中会导致业务在短时间内不可用,实例不可用的时长正常情况下不超过60秒。如果在业务高峰期发生了主备切换,则会严重影响业务的稳定和连续性。
解决思路
MySQL 的内存大体可以分为 global 级的共享内存和 session 级的私有内存两部分:
共享内存是实例创建时即分配的内存空间,并且是所有连接共享的。
私有内存用于每个连接到 MySQL 服务器时才分配各自的缓存。
一些特殊的 SQL 或字段类型会导致单个线程可能分配多次缓存,因此当出现 OOM 异常,都是由各个连接的私有内存造成的,通过限制数据库的连接数和优化低效 SQL,可降低内存利用率过高的风险,若 MySQL 的内存利用率依然过高,可通过升级内存配置来提升数据库的整体并发量和稳定性。
处理步骤
1.
优化慢 SQL,减少 session 级的私有内存使用量。
2.
减少无效的长连接,在不影响业务的情况下,降低程序侧的连接池配置或者降低程序侧的并发度。
3.
监控内存使用情况(可选,适用于 MySQL 5.7 及以上版本):开启 performance_schema 的内存监控功能,需要开启 performance_schema 后,在 performance_schema 库中查询名字为 memory_summary 开头的表来得知内存使用情况,例如,全局维度的内存利用率分析表:memory_summary_global_by_event_name。
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 第6期 MySQL数据库内存使用率过高
第6期 MySQL数据库内存使用率过高
26-03-01 - 【MySQL 8.x】定制化 MySQL 8.2.0 编译选项(文末彩蛋)
- Xtrabackup 2.4.18:Unable to obtain lock. Please try again later.
- MySQL 5.7 DDL 与 GH-OST 对比分析
MySQL 5.7 DDL 与 GH-OST 对比分析
26-03-01 - 【MySQL 8.x】在 Rocky 9 上编译 MySQL 8.2.0 Debug 版本编译指南
- 【MySQL 8.x】从参数变化解读 MySQL 8.2.0 发版说明
【MySQL 8.x】从参数变化解读 MySQL 8.2.0 发版说明
26-03-01 - Navicat Premium 17 激活教程
Navicat Premium 17 激活教程
26-03-01 - MySQL 数据被误删除drop!无备份,如何恢复?
MySQL 数据被误删除drop!无备份,如何恢复?
26-03-01 - MySQL 亿级数据平滑迁移实战
MySQL 亿级数据平滑迁移实战
26-03-01 - MySQL MHA计划性主从切换都会导致同步失败?
MySQL MHA计划性主从切换都会导致同步失败?
26-03-01
