记一次数据库MySQL内存只增不减问题

火山引擎云数据库说明

文档

什么是云数据库 MySQL 版?

云数据库 MySQL 版是火山引擎基于开源数据库 MySQL 打造的弹性、可靠的在线关系型数据库服务。 MySQL 实例使用云原生方式部署,结合本地 SSD 存储类型,提供高性能读写能力;完全兼容 MySQL 引擎,并提供实例管理、备份恢复、日志管理、监控告警、数据迁移等全套解决方案,帮助企业简化繁杂的数据库管理和运维任务,使企业有更多的时间与资源聚焦于自己的核心业务。

高可用架构

MySQL 提供一主一备高可用架构的双节点实例类型,在主节点出现故障后,会自动检测并完成秒级主备切换,业务无感知,保障业务稳定性。 MySQL 提供备份能力,支持数据备份及日志备份,支持按备份集恢复及按时间点恢复,保障数据可靠性。

读写分离架构

MySQL 提供一主多读的读写分离架构类型,最多可支持挂载 10 个只读节点,可根据业务需求轻松实现数据读取能力的弹性扩展;支持读写分离,自动将读请求转发至只读节点,分摊主节点数据读取压力,有效应对读多写少的业务场景。

核心组件

  • 主节点:主节点( Primary Node )是 MySQL 实例对外提供服务的基础节点,其他组件依赖主节点而发挥作用。在高可用架构下,主节点接收业务的全部读写请求;在读写分离架构下,主节点接收业务的全部写请求和部分读请求。主节点记录数据修改日志,并将日志传送至其他节点,实现节点间数据同步。
  • 备节点:备节点( Secondary Node )是 MySQL 实例高可用架构的重要节点,保障实例的高可用性。备节点接收主节点传送的日志并进行重放,保证主备节点间数据一致;在主节点故障时,备节点可快速切换为主节点并对外提供服务,保障业务稳定运行。
  • 只读节点:只读节点( Read-Only Node )是 MySQL 实例读写分离架构的重要节点,负责处理只读请求。只读节点接收备节点或主节点的日志并进行重放,保证只读节点与主备节点间数据一致;在读多写少的场景下,可接收并处理只读请求,分摊主节点数据读取压力。

 

起因

火山引擎的云数据库 MySQL 版提供了高效可靠的服务,其一主一备高可用架构和完善的备份功能保障了数据库的稳定性和数据安全性。

不过最近在使用该产品的时候遇到了一个问题,我们发现其中有节点的内存居高不下,内存只增不减,且只有其中一个节点的内存出现只增不减的情况,导致一直出现告警。问题发生在主节点上,内存占用率飙升至 85% 以上,而备用节点的内存占用率仅为 35%

 

分析

刚开始的时候闹了点小乌龙,把内存看成 CPU,结果一直去找慢 SQL,后面发现加上索引后还是没解决问题,不过好在也顺手修复了一个潜在的慢 SQL

运维人员发现问题并未解决后,立即将备用节点切换为主节点,但主节点的内存占用率依然持续升高,并未得到释放。

我们联系火山引擎运维人员协助定位问题。对方通过查看日志发现,MySQL 的性能模式 (Performance Schema - PSM) 功能占用了部分内存。

火山引擎运维人员建议我们将控制台中的 performance_schemaloose_rds_performance_schema 参数设置为 OFF

在将这两个参数设置为 OFF 后,主节点的内存占用率开始下降,最终恢复正常。

 

结论

这次事件让我们了解到 PSM 功能虽然能够提供强大的性能分析功能,但也可能占用大量内存, 尤其是在长时间运行的情况下。

 

扩展

PSM 功能的介绍

Performance Schema,简称 PSM,是一个可选的 MySQL 模块,它可以收集有关 MySQL 服务器性能的实时数据,包括:
  • CPU 使用率
  • 内存使用率
  • I/O 操作
  • 查询执行时间

PSM 功能的优缺点

优点:
  • 性能分析:帮助理解 MySQL 性能,例如哪些 SQL 语句导致性能瓶颈,数据库哪些资源使用较多等
  • 故障诊断:监测数据库性能,识别问题,并帮助快速定位和解决问题
  • 优化设计:分析数据和性能指标,调整数据库配置和应用代码,以提升性能
缺点:
  • 内存占用:PSM 需要消耗一定的内存来存储收集的数据。如果收集的数据量过大,可能会占用大量的内存,甚至导致内存不足
  • 性能影响:收集性能数据本身也会占用部分 CPU 和 I/O 资源,从而略微影响数据库的性能

后续如何避免此情况发生

  • 合理使用 PSM:根据实际需求启用 PSM,例如仅在必要时打开 PSM,例如进行性能分析或故障诊断时。并在使用后及时关闭
  • 合理设置 PSM 参数:包括 collect_interval 和 max_memory_usage,控制数据收集频率和最大内存占用,避免过度消耗内存
  • 定期清理 PSM 数据:定期清理 performance_schema 数据库中的数据,释放内存空间
  • 监控内存使用:定期监控数据库的内存使用情况,及时发现问题,并采取措施

对火山引擎架构特点的点评

火山引擎云数据库 MySQL 版的一主一备高可用架构和完善的备份功能确保了数据库的稳定性和数据安全性。但这次事件也提醒我们需要注意 PSM 功能的潜在风险,并及时采取措施避免内存占用过高。

最终建议

  • 在日常使用中,合理使用 PSM 功能,并根据实际需求设置参数
  • 定期监控数据库性能,及时发现问题,并采取措施
  • 了解云数据库的架构特点,并根据其特点选择合适的配置和使用方式
希望这篇文章能够帮助你更好地了解 PSM 功能,并避免类似的内存问题。
 
posted @ 2024-08-17 09:53  凌雨尘  阅读(77)  评论(0编辑  收藏  举报