一、现象描述
注意:说明:
注意:可在监控告警页下查询实例的内存使用率情况。
注意:
在突增之后,或者长期缓慢增长的过程中,最终达到一个过高的水平(>96%),且在一定范围内小幅度变动,有可能会经常性的触发自定义的腾讯云可观测平台内存告警。
二、故障风险
低效的 SQL 语句或数据库参数设置不当都可能会导致内存利用率升高,遇到突发业务高峰时,可能会导致云数据库内存 OOM(Out Of Memory),当云数据库由于 OOM 导致不可用时,会触发主备切换,主备切换的过程中会导致业务在短时间内不可用,实例不可用的时长正常情况下不超过60秒。如果在业务高峰期发生了主备切换,则会严重影响业务的稳定和连续性。
三、解决思路
TDSQL-C MySQL 版的内存大体可以分为 global 级的共享内存和 session 级的私有内存两部分:
·共享内存是实例创建时即分配的内存空间,并且是所有连接共享的。
·私有内存用于每个连接到 TDSQL-C MySQL 版服务器时才分配各自的缓存。
一些特殊的 SQL 或字段类型会导致单个线程可能分配多次缓存,因此当出现 OOM 异常,都是由各个连接的私有内存造成的,通过限制数据库的连接数和优化低效 SQL,可降低内存利用率过高的风险,若 TDSQL-C MySQL 版的内存利用率依然过高,可通过升级内存配置来提升数据库的整体并发量和稳定性。
四、处理步骤
1. 优化慢 SQL,减少 session 级的私有内存使用量。可以通过 DBbrain 对慢 SQL 进行分析。
2. 减少无效的长连接,在不影响业务的情况下,降低程序侧的连接池配置或者降低程序侧的并发度。可以通过 DBbrain 查看当前会话信息。
3. 监控内存使用情况(可选):开启 performance_schema 的内存监控功能,需要开启 performance_schema 后,在 performance_schema 库中查询名字为 memory_summary 开头的表来得知内存使用情况,例如,全局维度的内存利用率分析表:memory_summary_global_by_event_name。
4. 优化完成之后的手段:调整计算配置 和 调整存储空间
注意:说明: