前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云数据库内存使用 100%原因分析

腾讯云数据库内存使用 100%原因分析

原创
作者头像
迁云小助手
修改2022-05-22 16:42:37
1.8K0
修改2022-05-22 16:42:37
举报
文章被收录于专栏:上云那些事上云那些事

背景

腾讯云数据库内存 100% 确实是常年以来的热点咨询问题,以下是针对此问题的介绍说明。

一、现象分析

当遇到数据库内存长期过满,以下两种现象情况请注意和把握:

1、如果从监控中看到内存并没有持续增长,是有做回收的,说明没有持续泄露的问题 ,如果是内存持续上涨一直无法降下来 ,这明显是有问题的是需要特别关注的。

2、如果是前期内存涨的比较快(还未进入稳定平衡状态),但是后期持续保持稳定,实例也是正常稳定的。

二、原因分析

由于各家云厂商对内存的使用和统计并不完全一样,这里监控内存的显示是会有区别的,但这并不完全意味着性能或能力上存在差异。这里咱们在腾讯云侧购买规格跟阿里是一样的,但要注意的是两家云厂商的数据库实例不一定参数也是一样。因此这里不可能完全对标对比,如果要对比的话,需要在阿里云开下performance_schema 参数,保持两边的内存参数设置一致,最后再对比下两边的统计输出,因为假设腾讯云侧默认的 tmp_table_size 是 1G ,阿里 tmp_table_size 默认值很低的只有几 M ,这都会导致内存显示差异。

三、原理分析

通常内存使用分为两大类:公共和私有 。

公共部分就是上边提到的大头 innodb_buffer_pool的使用 ,这部分内存不使用就等于浪费 ,bp 会将磁盘中的数据加载到内存中处理,内存的速度是比磁盘快很多的 ,如果 bp 装不下会淘汰相对较冷的数据页加入新的数据页,所以长时间运行稳定的数据库 bp 通常是会持续占满的,可以简单理解 bp 缓存的越多,性能越好。另一部分是私有内存,私有部分是为每个数据库连接分配使用的 ,这部分内存会随着连接数增多而增多,但连接断开后并不一定会立即释放给操作系统,mysql 的内存分配器会继续保留一部分 ,当下次新连接进来的时候就不用单独再去问操作系统申请内存了,也是一种优化 ,因为从操作系统申请内存也是比较重的操作。整体两部分内存加在一起,长期稳定运行的话内存会稳定到一个值,这个值可能会比较高比如 98%-100%这样 。其实客户这个实例已经运行很久了,可以观察到之前内存一直都是这个水平的,并不是最近才突然涨到 100%的,实例也是一直在稳定运行的 ,不会是到 100%就会触发 oom 重启。

注:后续腾讯云侧也会优化下这里内存监控的显示,让客户能更直观的观测到具体用了多少内存。

参考资料

1、关于 mysql 内存使用介绍可参考:

/developer/article/1727167

2、performance_schema 的使用可以参考下

https://blog.csdn.net/qq_33158376/article/details/106256988

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 一、现象分析
  • 二、原因分析
  • 三、原理分析
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com