sys.memory_global_total 值不准

Posted 渔夫数据库笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

 

以上是关于sys.memory_global_total 值不准的主要内容,如果未能解决你的问题,请参考以下文章

剔除“异常值”的一般原则是什么?

缺失值(NaN 值)与填充值的重叠图

R语言︱异常值检验离群点分析异常值处理

R语言︱异常值检验离群点分析异常值处理

R语言之缺失值和异常值处理

MySql怎么给列设置默认值 mysql修改默认值