Назад | Перейти на главную страницу

Частота попаданий в пул буферов InnoDB отсутствует в выходных данных состояния двигателя

Я хочу проверить частоту попаданий пула буферов для InnoDB в MySQL, но когда я запрашиваю базу данных, похоже, что процент попаданий не учитывается в результатах:

Используя запрос: SHOW ENGINE INNODB STATUS\G

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 169799966; in additional pool allocated 6386688
Dictionary memory allocated 1122462
Buffer pool size   8192
Free buffers       1
Database pages     8163
Old database pages 2993
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 610, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3483, created 6047, written 184508
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 8163, unzip_LRU len: 0
I/O sum[41]:cur[0], unzip sum[0]:cur[0]

Я ожидал строчки вроде Buffer pool hit rate 999 / 1000, куда это делось?

Кстати: какие-нибудь примечания к выводу выше? Стоит ли увеличивать размер пула?

Это именно то место, где должно быть, над линией, начинающейся со слова «Страницы читаются впереди». Если перед последующим SHOW ENGINE INNODB STATUS \ G нет активности, попадающей в пул буферов, у вас будет сообщение «Страница пула буферов не получена».

Запустите запрос к таблице innodb, и вы снова увидите ее.

mysql> ПОКАЗАТЬ СТАТУС INNODB ДВИГАТЕЛЯ \ G ВЫБРАТЬ СЧЕТЧИК (идентификатор) ИЗ таблицы; ПОКАЗАТЬ СТАТУС INNODB ДВИГАТЕЛЯ \ G

Страница пула буферов не получает:

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 26461863936; in additional pool allocated 0
Internal hash tables (constant factor + variable factor)
    Adaptive hash index 657921776   (407996024 + 249925752)
    Page hash           25500536 (buffer pool 0 only)
    Dictionary cache    102125423   (102000592 + 124831)
    File system         88288   (82672 + 5616)
    Lock system         63750528    (63750152 + 376)
    Recovery system     0   (0 + 0)
Dictionary memory allocated 124831
Buffer pool size        1572863
Buffer pool size, bytes 25769787392
Free buffers            0
Database pages          1557609
Old database pages      574956
Modified db pages       0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 464944064, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 470241613, created 2454749, written 331978152
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 1557609, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]

Запрос к innodb:

+-----------+
| COUNT(id) |
+-----------+
|       291 |
+-----------+
1 row in set (0.01 sec)

Теперь вы видите показатель попадания в буферный пул:

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 26461863936; in additional pool allocated 0
Internal hash tables (constant factor + variable factor)
    Adaptive hash index 657921776   (407996024 + 249925752)
    Page hash           25500536 (buffer pool 0 only)
    Dictionary cache    102125423   (102000592 + 124831)
    File system         88288   (82672 + 5616)
    Lock system         63750528    (63750152 + 376)
    Recovery system     0   (0 + 0)
Dictionary memory allocated 124831
Buffer pool size        1572863
Buffer pool size, bytes 25769787392
Free buffers            0
Database pages          1557609
Old database pages      574956
Modified db pages       0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 464944064, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 470241613, created 2454749, written 331978152
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 1557609, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]

Что касается вашего второго вопроса, в выходных данных show engine innodb действительно недостаточно информации, чтобы сделать это определение. Вам нужно учитывать объем оперативной памяти, имеющейся у сервера, независимо от того, выполняет ли он что-либо еще или является ли это выделенным сервером, независимо от того, смешиваете ли вы таблицы MyISAM или нет (чтобы вы не истощали кеш ОС, убивая производительность MyISAM).

Я фанат Мастер настройки Percona для MySQL когда я не уверен в своих настройках. Это не даст вам «лучшую» производительность, но даст вам довольно приличное место для начала настройки.

SELECT FLOOR(NUMBER_PAGES_GET/(NUMBER_PAGES_GET+NUMBER_PAGES_READ) * 100) as InnoDB_Buffer_Pool_Hit_Rate 
FROM information_schema.INNODB_BUFFER_POOL_STATS;