Я хочу проверить частоту попаданий пула буферов для 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;