首页 > 数据库 >坑!火山引擎云数据库 MySQL 版节点内存只增不减

坑!火山引擎云数据库 MySQL 版节点内存只增不减

时间:2024-08-17 09:48:39浏览次数:11  
标签:只增 架构 PSM 数据库 内存 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_schema 和 loose_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 功能,并避免类似的内存问题。  

标签:只增,架构,PSM,数据库,内存,MySQL,节点
From: https://www.cnblogs.com/lyc94620/p/18364078

相关文章

  • Mysq-造数工具mysql_random_data_load
    1.背景实际开发中,做sql优化,为确保可行性,可能需要模拟出大量数据验证。此处,介绍一个造数工具mysql_random_data_load,体验了下,很方便。2.使用2.1下载下载:mysql_random_data_load(releases页面)选择合适的版本,例如。2.2安装上传到服务器直接解压即可。tar-zxvfmysql_r......
  • C++编程:内存栅栏(Memory Barrier)详解及在多线程编程中的应用
    文章目录0.引言1.什么是内存栅栏?2.为什么需要内存栅栏?本质原因是什么?2.1编译器优化2.2CPU乱序执行3.ARM64和x86架构下的内存栅栏差异3.1x86架构3.2ARM64架构4.代码示例4.1代码解析4.2memory_order_release和memory_order_acquire解释4.3为什么是“releas......
  • 浅看MySQL数据库
    有这么一句话:“一个不会数据库的程序员不是合格的程序员”。有点夸张,但是确是如此。透彻学习数据库是要学习好多知识,需要学的东西也是偏难的。我们今天来看数据库MySQL的一些简单基础东西,跟着小编一起来看一下吧。什么是数据库数据库(Database)是按照数据结构来组织、存储和管......
  • MySQL在Windows和Ubuntu上的安装与远程连接配置指南
    MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种应用程序和网站中。MySQL5.7虽不是MySQL的最新版本,但仍具有许多新功能和改进,提供了更高的性能、安全性和可靠性。本文将详细介绍MySQL5.7,并提供在Ubuntu 22.04上安装、初始化配置和开通远程访问的步骤。在Ubuntu22......
  • C/C++内存管理
    文章目录前言C/C++内存分布C语言内存管理malloccallocreallocreallocarrayfreeC++内存管理new/delete内置类型自定义类型operatornew/operatordelete定位new内存泄漏前言        C++的内存管理是程序设计中的一个关键部分,涉及到内存的分配、使用和释......
  • C++八股文——内存管理(堆和栈的区别? C++内存分区? 内存泄漏?如何避免?什么是智能指针?有哪
    文章目录C++内存管理堆和栈的区别C++内存分区内存泄漏?如何避免?1、什么是内存泄露?2、内存泄漏的分类3、什么操作会导致内存泄露?4、如何防⽌内存泄露?5、智能指针有了解哪些?6、构造函数,析构函数要设为虚函数吗,为什么?什么是智能指针?有哪些种类?new和malloc有什么区别?d......
  • 【mysql】mysql安装部署以及用户误删恢复
      本站以分享各种运维经验和运维所需要的技能为主《python零基础入门》:python零基础入门学习《python运维脚本》: python运维脚本实践《shell》:shell学习《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战《k8》从问题中去学习k8s《docker学习》暂未更新......
  • 2024.8.15(python管理mysql、Mycat实现读写分离)
    一、python管理mysql1、搭建主mysql[root@mysql57~]#tar-xfmysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [root@mysql57~]#cp-rmysql-5.7.44-linux-glibc2.12-x86_64/usr/local/mysql[root@mysql57~]#rm-rf/etc/my.cnf[root@mysql57~]#mkdir/usr/local/......
  • python管理MySQL数据库 mysql5.7读写分离 配置mycat(twenty-nine day)
    一、pymysql管理数据库1、搭建主mysql5.7[root@mysql57~]#lsanaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz[root@mysql57~]#tar-xfmysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [root@mysql57~]#lsanaconda-ks.cfgmysql-5.7.44-linux-glibc2......
  • Mysql库表无索引查询优化
    情况单表三千万数据量,只有id这一个索引无其他索引,这时候使用无索引的kh字段查询数据分页查询优化explainSELECT *FROM dev_log_27_2024WHEREjd_kh='14344692103'ORDERBY idDESCLIMIT0,10000带where不带wheresql执行流程全表扫描(FullTableSc......