
Ich versuche, die Gesamtzahl der verwendeten Bytes in einem MySQL 5.7 InnoDB-Pufferpool zu überwachen, der bis zu 100 GB groß sein kann, Innodb_buffer_pool_bytes_data
aber es scheint, dass diese Statusvariable eine vorzeichenlose 32-Bit-Ganzzahl ist, wenn ich sie abfrage, sodass sie überläuft, wenn die Anzahl der Bytes 2^32 überschreitet.
Es scheint sich intern in MySQL um einen vorzeichenlosen Long Integer zu handeln (https://github.com/mysql/mysql-server/blob/5.7/storage/innobase/include/srv0srv.h#L892)?
Zuerst dachte ich, der Überlauf liege in meinem Überwachungsstapel (Telegraf+InfluxDB+Grafana)-
-aber eine direkte Abfrage von MySQL scheint zu ergeben, dass es von MySQL stammt und nicht aus meiner Überwachungslösung:
SHOW GLOBAL STATUS WHERE Variable_name = "Innodb_buffer_pool_bytes_data"
- ergibt 490371968
ungefähr denselben Beispiel-Zeitstempel wie oben in Grafana.
Wie kann ich den tatsächlichen Wert genau überwachen?
Antwort1
Dieses Diagramm sieht aus, als ob MySQL (oder der Server) um etwa 12:16 neu gestartet wurde. Der Pufferpool wächst, bis er erreicht innodb_buffer_pool_size
.
Wenn Sie nicht genügend RAM für den Pufferpool (und andere Dinge) haben, kann es abstürzen. Diese Einstellung sollte auf etwa 70 % des verfügbaren RAM eingestellt werden.