当前位置:首页 > 技术分析 > 正文内容

第44问:MySQL 的内存消耗, 哪些不在 performance_schema 的统计范围

ruisui885个月前 (02-07)技术分析17

当 MySQL 内存异常上涨, 我们可以通过 performance_schema 观察内存的使用, 我们在实验5中进行过介绍。

但我们也会发现操作系统统计的 MySQL 内存用量比 performance_schema 统计的 MySQL 内存用量要多。

那么 MySQL 的内存消耗, 有哪些是不在 performance_schema 统计内的呢?

本期我们设计实验来观察这个问题

实验

我们先安装 google-perftools:

安装后, 可以找到相关的库:

宽油起一个数据库:

记下数据库的启动参数, 并关掉数据库:

我们在数据库启动命令前, 增加两个环境变量 LD_PRELOAD 和 HEAPPROFILE.

其中 LD_PRELOAD 指向刚才我们安装的 tcmalloc 库, HEAPPROFILE 是输出文件的路径.

启动数据库后, 我们看到日志中输出了两个 heap 文件.

我们在数据库中增加一些压力, 还是用我们熟悉的翻倍法:

多做点数据:

观察到输出了更多的 heap 文件:

下面我们安装 pprof 来解析这些 heap 文件.

先下载 golang , 此步骤需要挂代理:

安装 golang :

安装 pprof :

用 pprof 解析我们刚才生成的 heap 文件:

我们让 pprof 生成一个 svg 文件, 我们将 svg 文件放到 Chrome 中打开查看:

图比较大, 每根线都标记了内存的分配流, 我们用红色箭头标注了三个汇集点 (所有的连线都会流向这三个汇集点中的某一个).

其中 pfs_malloc 是可以被 performance_schema 跟踪的内存分配, 而其他两个汇集点则不能.

下面我们将图的一部分放大, 举例来做个大致介绍 (本图中我们用红色箭头增强了原图的连线):

我们可以看到有16384.53kB是 由 log_allocate_buffer 函数调用 ut_allocator 分配的, 这部分无法被 performance_schema 跟踪到.

查看一下代码, 得知 log_allocate_buffer 是根据 log_buffer_size 参数申请内存的:

查看参数, 证实 log_buffer_size 的配置与我们在图中观察到的内存分配一致:

总结

本实验中, 我们使用了 tcmalloc 作为 MySQL 的内存分配器, 并使用 tcmalloc 提供的 heap dump 功能, 追踪 MySQL 的内存分配。

通过内存分配图, 能让我们直观地理解 MySQL 的内存分配:

我们可以从中观察到 每一部分的内存 是从哪个代码路径进行分配的, 以及哪些内存是 performance_schema 能追踪到的。

此功能对性能影响不大, 可以在生产上比较平稳的使用, 用于探索生产环境的一些内存分配异常。


关于 MySQL 的技术内容,你们还有什么想知道的吗?赶紧留言告诉小编吧!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1762.html

标签: pprof
分享给朋友:

“第44问:MySQL 的内存消耗, 哪些不在 performance_schema 的统计范围” 的相关文章

2024前端面试真题之—VUE篇

添加图片注释,不超过 140 字(可选)1.vue的生命周期有哪些及每个生命周期做了什么? beforeCreate是new Vue()之后触发的第一个钩子,在当前阶段data、methods、computed以及watch上的数据和方法都不能被访问。 created在实例创建完成后发生,当前阶段已...

「2022」打算跳槽涨薪,必问面试题及答案——VUE篇

1、为什么选择VUE,解决了什么问题?vue.js 正如官网所说的,是一套构建用户界面的渐进式框架。与其它重量级框架不同的是,vue 被设计为可以自底向上逐层应用。vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另外一方面,当与现代化工具链以及各种支持类库结合使用时,vu...

学无止境:Git 如何优雅地回退代码

来源:https://zhenbianshu.github.io前言从接触编程就开始使用 Git 进行代码管理,先是自己玩 Github,又在工作中使用 Gitlab,虽然使用时间挺长,可是也只进行一些常用操作,如推拉代码、提交、合并等,更复杂的操作没有使用过,看过的教程也逐渐淡忘了,有些对不起 L...

三维家-系统快捷键使用

快键件使用:通过简单的键盘+鼠标操作,快速完成搭配。1.基础快捷键1) Ctrl+V:复制选中对象第一步:鼠标左击物体,按下Ctrl+V 即可复制选中对象。2) Ctrl+G:组合多选对象第一步:按住Ctrl键多选对象--按住Ctrl+G--确定。3) Ctrl+B:解组选中对象第一步:左击选中对象...

《暗黑破坏神 2:重制版》PC 版 2.3 版本发布,支持英伟达 DLSS

IT之家 12 月 3 日消息,暴雪为《暗黑破坏神 2:重制版》PC 版发布了更新 2.3 版本,添加了“离线难度缩放”滑块(玩家可以在单人游戏时增加挑战和奖励的级别)、多项辅助功能和用户界面改进,以及英伟达 DLSS 支持。玩法改进:玩家现在可以在离线游戏的选项菜单中使用“游戏难度等级”,它提供与...

有效地简化导航-Part 1:信息架构

「四步走」——理想的导航系统要做一个可用的导航系统,网页设计师必须按顺序回答以下4个问题:1. 如何组织内容?2. 如何解释导航的选项?3. 哪种导航菜单最适合容纳这些选项?4. 如何设计导航菜单?前两个问题关注构建和便签内容,通常称为信息架构。信息架构师通常用网站地图(site map diagr...