
Я пытаюсь отслеживать общее количество используемых байтов в буферном пуле MySQL 5.7 InnoDB, размер которого может достигать 100 ГБ, используя , 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)-
- но прямой запрос к 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 (плюс другие вещи), то это может привести к сбою. Эта настройка должна быть установлена примерно на 70% от доступной оперативной памяти.