
我正在嘗試監視 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% 左右。