Как я могу определить, помогает ли использование Multiple Key Cache for MyISAM? - PullRequest
1 голос
/ 16 ноября 2011

Я использую MySQL 5.5 с механизмом хранения MyISAM и экспериментирую с созданием второго кеша ключей, чтобы повысить производительность , как предложено в этого полезного совета .

Мой вопрос: как только я создал второй кеш ключа, как я могу узнать, что он работает? Для мониторинга глобального кеша ключей мы можем использовать show status like 'key_read%', но как мне увидеть ту же информацию для моего вновь созданного кеша ключей?


Для полноты вот как я создал второй кеш ключей:

Измените файл конфигурации ('' /etc/my.cnf ''), чтобы явно добавить другой файл буфера (в дополнение к буферу по умолчанию):

key_buffer_members.key_buffer_size = 512M

Скажите MySQL использовать "key_buffer_members" для индексов из таблицы "members".

mysql> CACHE INDEX members IN key_buffer_members;
+------------------+--------------------+----------+----------+
| Table            | Op                 | Msg_type | Msg_text |
+------------------+--------------------+----------+----------+
| myDB.members | assign_to_keycache | status   | OK       |
+------------------+--------------------+----------+----------+
1 row in set (0.00 sec)

Предварительная загрузка индексов таблиц в кеш:

mysql> LOAD INDEX INTO CACHE members;
+------------------+--------------+----------+----------+
| Table            | Op           | Msg_type | Msg_text |
+------------------+--------------+----------+----------+
| myDB.members | preload_keys | status   | OK       |
+------------------+--------------+----------+----------+
1 row in set (3.52 sec)

Без предварительной загрузки блоки индекса по-прежнему будут помещаться в кеш ключей, как требуется запросами. Однако они будут выбраны с диска в случайном порядке, а не последовательно. Предварительная загрузка ключевого кэша с индексными блоками перед началом его использования - разумная оптимизация. Предварительная загрузка позволяет поместить блоки индекса таблицы в буфер кэша ключей наиболее эффективным способом: путем последовательного чтения блоков индекса с диска.

Создайте файл для предварительной загрузки индексов при запуске MySQL. Добавьте следующее к /etc/my.cnf:

init-file = '/etc/mysqlinit.sql'

и в /etc/mysqlinit.sql положить:

USE myDB;
CACHE INDEX members IN key_buffer_members;
LOAD INDEX INTO CACHE members;

Перезапустите mysql:

sudo service mysqld condrestart
...