Buffer Pool Size of Total RAM No data

Posted 渔夫数据库笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Buffer Pool Size of Total RAM No data相关的知识,希望对你有一定的参考价值。

1.问题描述

1)问题现象

通过prometheus监控mysql实例和服务器,使用grafana做可视化展示,grafana 中添加 7362 号dashboard 作为mysql看板,添加 11074 号dashboard 作为主机看板。但是添加后查看 MySQL Overview 看板发现 Buffer Pool Size of Total RAM 这个panel 显示 No data,截图如下:

 2) prometheus 中关于mysql实例和主机监控配置方式如下:

prometheus 配置文件中指定了mysql监控任务及mysql服务器监控任务

 下面我们来看一下具体的mysql实例及对应的mysql服务器监控怎么配置的

先看服务器监控配置文件
vi prd_host.yml
- targets: ['172.25.xx.xxx:9100']
  labels:
    instance: '172.25.xx.xxx'
    env: 'xxx mysql 服务器'
    group: 'xxx'

再看mysql实例监控配置文件
vi prd_mysql.json
[
    "targets": [ "172.25.xx.xxx:9104" ],
    "labels": 
      "instance": "172.25.xx.xxx:3306",
      "env": "xxx mysql",
      "job": "mysqld"
    
  
]

像上面这样一通配置下来,最终导致MySQL Overview 看板的 Buffer Pool Size of Total RAM 这个panel 显示 No data。

2.问题分析

我们先看一下Buffer Pool Size of Total RAM 这个panel的计算公式:

(mysql_global_variables_innodb_buffer_pool_sizeinstance="$host" * 100) / on (instance) node_memory_MemTotal_bytesinstance="$host"

#这个公式中用到了 mysql_global_variables_innodb_buffer_pool_size 和 node_memory_MemTotal_bytes 两个收集值

分别获取mysql监控和node监控所有的收集值
curl http://127.0.0.1:9104/metrics >mysql_metrics.txt
curl 127.0.0.1:9100/metrics >node_metrics.txt

   检查发现mysql_global_variables_innodb_buffer_pool_size 这个值是mysql监控收集的,但是node_memory_MemTotal_bytes 这个值是node监控收集的。

  所以上面的查询是在一个计算公式中即使用了node_export收集的值又使用mysqld_exprot使用的值。以上面的公式为例,我们怎么让他能够同时获取两个不同监控客户的的信息呢?我们看到上面的公式中根据 instance 来识别和获取监控值,如果我们在配置文件中不显示指定instance 标签的话,默认使用target指定值作为instance值,比如上面的主机监控如果没有指定 instance 值,那么默认的instance值即为172.25.xx.xxx:9100。如果在target 下显示指定了 instance 标签那么instance值即为标签指定值172.25.xx.xxx。

  所以如果我们给172.25.xx.xxx 它的服务器监控和mysql实例监控都指定同样的instance标签,就可以同时获取到不同监控客户端的值了。

NOTE:有个疑问,如果两个监控客户端都收集了同样的信息比如node_memory_MemTotal_bytes,我们指定同样的instance 标签会出现什么问题呢?

3.问题处理

  给mysql监控配置和主机监控配置指定同样的instance标签,这再观察Buffer Pool Size of Total RAM 这个panel,就会正常显示数据了。

例如:

先看服务器监控配置文件
vi prd_host.yml
- targets: ['172.25.xx.xxx:9100']
  labels:
    instance: '172.25.xx.xxx_3306'
    env: 'xxx mysql 服务器'
    group: 'xxx'

再看mysql实例监控配置文件
vi prd_mysql.json
[
    "targets": [ "172.25.xx.xxx:9104" ],
    "labels": 
      "instance": "172.25.xx.xxx_3306",
      "env": "xxx mysql",
      "job": "mysqld"
    
  
]

以上是关于Buffer Pool Size of Total RAM No data的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL碰到The total number of locks exceeds the lock table size 问题解决记录

navicat for mysql 导入sql大文件报out of memory 错误,怎么解决?

navicat for mysql 导入.sql 大文件 报out of memory 错误,怎么解决

navicat for mysql 导入.sql 大文件 报out of memory 错误,怎么解决?

innodb_buffer_pool_size 配置原则和方式

MySQL参数-innodb_buffer_pool_chunk_size