sys.memory_global_total 值不准

1.版本

1)操作系统

cat /proc/version
Linux version 3.10.0-1127.13.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) )

2)mysql数据库版本

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.19    |
+-----------+
1 row in set (0.00 sec)

 

2.问题描述

2.1 发现问题

  数据库服务器报可用内存空间不足200M

1) free -m 查看服务整体内存使用情况

free -m
              total        used        free      shared  buff/cache   available
Mem:           7819        5526         170          10        2122        1983
Swap:          8191        2488        5703

1)通过ps_mem.py 查看各进程具体内存消耗

python ps_mem.py
 Private  +   Shared  =  RAM used	Program

  .......
  .......
  .......
 15.8 MiB + 131.0 KiB =  15.9 MiB	node_exporter
 32.3 MiB + 941.0 KiB =  33.2 MiB	python2.7
178.5 MiB + 124.5 KiB = 178.7 MiB	filebeat
  4.9 GiB + 732.0 KiB =   4.9 GiB	mysqld
---------------------------------
                          5.2 GiB
#省略了大部分内存空间占用较小的进程

#报警时没有记录内存信息,这些信息都是恢复后的信息,但是对于我们分析问题没有响应。我们看到服务器上占用内存最多的为 mysqld进程,占用了 4.9GB

3)通过 sys.memory_global_total 统计mysql内存使用情况

mysql> select * from sys.memory_global_total;
+-----------------+
| total_allocated |
+-----------------+
| 4.21 GiB        |
+-----------------+
1 row in set (1.39 sec)

#我们看到通过 sys.memory_global_total 表我们统计到数据库只使用了 4.21GB的内存。为什么会小于4.9GB?

 

3.分析问题 

sys.memory_global_total 统计值不准有三个原因

1)没有在实例启动时就开启所有的内存监控项

MySQL 8.0 之前版本默认只开启了performance_schema相关内存时间监控项。其他内存监控项默认都未启用,如需启用需要在配置文件中显示指定,可以通过如下方案启动所有内存监控项:

在配置文件中添加 performance-schema-instrument='memory/%=ON' 重启实例

 

 

2)只启用了部分内存监控项

确认是否开启了所有的内存监控项

select * from performance_schema.setup_instruments where name like '%memory%' and enabled!='YES';

 

3)有部分原本就没有进行统计监控

即使我们在数据库启动时就开启了所有的内存监控项,我们通过 sys.memory_global_total 统计到的数据库使用内存量和操作系统层面还是很存在差异。这是因为 mysql 并没有监控所有libiary 的内存分配,也没有监控实例把libiary导入到内存产生的内存使用量

相关连接:

https://dev.mysql.com/doc/refman/8.0/en/memory-use.html

https://bugs.mysql.com/bug.php?id=84174

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渔夫数据库笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值