監控大型 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 圖表顯示隨著時間的推移整數溢出,目前 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% 左右。

相關內容