
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)에 있다고 생각했습니다.
현재 Innodb_buffer_pool_bytes_data가 490MB인 상태에서 시간 경과에 따른 Interger Overflow를 보여주는 Grafana 그래프
-하지만 MySQL을 직접 쿼리하면 내 모니터링 솔루션이 아닌 MySQL에서 가져온 것으로 보입니다.
SHOW GLOBAL STATUS WHERE Variable_name = "Innodb_buffer_pool_bytes_data"
490371968
-위의 Grafana에서 볼 수 있는 것과 거의 동일한 샘플 타임스탬프에 대한 결과입니다 .
실제 값을 정확하게 모니터링하려면 어떻게 해야 합니까?
답변1
해당 그래프는 약 12:16에 MySQL이 다시 시작된 것(또는 서버가 다시 시작된 것)처럼 보입니다. buffer_pool은 에 도달할 때까지 커집니다 innodb_buffer_pool_size
.
buffer_pool(및 기타 항목)에 대한 RAM이 충분하지 않으면 충돌이 발생할 수 있습니다. 해당 설정은 사용 가능한 RAM의 약 70%로 설정되어야 합니다.