监控大型 MySQL InnoDB 缓冲池的字节使用情况?

监控大型 MySQL InnoDB 缓冲池的字节使用情况?

我正在尝试监视 MySQL 5.7 InnoDB 缓冲池中使用的字节总数,该缓冲池最多可达到 100GB,Innodb_buffer_pool_bytes_data但当我查询它时,这个状态变量似乎是一个 32 位无符号整数,因此当字节超过 2^32 时它就会溢出。

在 MySQL 内部它似乎是一个无符号长整数(https://github.com/mysql/mysql-server/blob/5.7/storage/innobase/include/srv0srv.h#L892)?

起初我以为溢出发生在我的监控堆栈(Telegraf+InfluxDB+Grafana)中-

Grafana 图表显示 Interger Overflow 随时间的变化情况,目前 Innodb_buffer_pool_bytes_data 为 490MB

- 但直接查询 MySQL 似乎表明它来自 MySQL 而不是在我的监控解决方案中:

SHOW GLOBAL STATUS WHERE Variable_name = "Innodb_buffer_pool_bytes_data"

- 产生的490371968样本时间戳与上面 Grafana 中看到的大致相同。

如何才能准确监测真实值?

答案1

该图显示 MySQL 大约在 12:16 重启(或服务器重启)。buffer_pool 将不断增长直至达到innodb_buffer_pool_size

如果没有足够的 RAM 用于 buffer_pool(以及其他内容),则它可能会崩溃。该设置应设置为可用 RAM 的 70% 左右。

相关内容