
最大 100 GB になる可能性がある MySQL 5.7 InnoDB バッファー プールで使用されているバイトの合計数を監視しようとしています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)にあると考えていました。
Innodb_buffer_pool_bytes_data が現在 490 MB である状態で、時間の経過に伴う整数オーバーフローを示す Grafana グラフ
-ただし、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
。
buffer_pool (およびその他のもの) 用の十分な RAM がない場合、クラッシュする可能性があります。その設定は、使用可能な RAM の約 70% に設定する必要があります。