DBAtlas · Атлас эксплуатации баз данных

Достаточен ли buffer pool: hit ratio, wait_free и изменение размера онлайн

MySQLПамять

Команда

SELECT ROUND(@@innodb_buffer_pool_size / 1024 / 1024) AS bp_mb,
       @@innodb_buffer_pool_chunk_size / 1024 / 1024 AS chunk_mb,
       @@innodb_buffer_pool_instances AS instances;
SELECT
  ROUND(100 * (1 - (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_reads')
                 / NULLIF((SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_read_requests'), 0)), 3) AS hit_pct,
  (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_pages_free') AS pages_free,
  (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_pages_dirty') AS pages_dirty,
  (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_wait_free') AS wait_free;

-- Online resize and status tracking
SET PERSIST innodb_buffer_pool_size = 8589934592;
SELECT VARIABLE_NAME, VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME LIKE 'Innodb_buffer_pool_resize_status%';

Что делает

Показывает размер buffer pool, коэффициент попаданий в кэш, число свободных / грязных страниц и счётчик ожиданий свободной страницы (wait_free); меняет размер без перезапуска и отслеживает ход операции.

Когда использовать

При высоком IO на чтение, после добавления / удаления RAM или при планировании мощностей.

Внимание

Сам по себе hit ratio обманчив: даже 99% может означать тысячи чтений с диска в секунду. Смотрите на прирост Innodb_buffer_pool_reads в секунду; wait_free > 0 означает, что buffer pool слишком мал или page cleaner не успевают. Новый размер округляется до кратного innodb_buffer_pool_chunk_size × instances. При изменении размера возможны кратковременные подвисания, особенно при уменьшении; избегайте часов пик. На выделенном сервере начинайте с 60–75% RAM; оставьте место под память на соединения, кэш ОС и другие процессы, так как своппинг всегда хуже, чем меньший buffer pool.

Открыть в DBAtlas →