Немного о Key Buffer
Итак, эта переменная конфигурации достойна отдельного внимания.
Известна как "key_buffer_size" или "key_buffer" в my.cnf
Это кусок памяти, который выделяется mysqld для кеша индексов. Чтобы по многу раз не читать индексы с диска, mysqld имеет свою технологию их кеширования.
Nota bene. Существует мнение что на современных *nix системах, при условии, что размер всех баз данных не превышает некоторого процента свободной оперативной памяти, key_buffer можно смело отключать вообще, т.к. система итак кеширует наиболее часто читаемые файлы, используя свободную оперативную память.
В таком случае не только индексы, но и данные будут "сидеть" в оперативной памяти с отключенным key_buffer, а его наличие будет делать "двойную работу" - т.е. индексы будет кешировать и система и mysqld. В таком случае можете его ставить в ноль, если вы отдаете себе отчет в том, что вы делаете.
Однако я бы не советовал этого делать, если размер баз превышает половину вашей оперативной памяти. Система ведь кеширует все подряд, и там может не найтись места конкретно под индексы.
Как определить оптимальное значение? Во-первых надо чтобы сервер немного потрудился в реальных условиях, т.е. был запущен в течении неск. часов. Используем запрос "SHOW [GLOBAL] STATUS" и смотрим значения "Key_read_requests" и "Key_reads".
- "Key_read_requests" - сколько с момента запуска было запросов на чтение индексов
- "Key_reads" - сколько запросов было прочитано не из кеша "key_buffer_size", т.е. с диска (на самом деле тут не учитывается дисковый кеш самой системы).
Сравнивая эти два значения, можно судить, насколько мало значение "key_buffer_size" в my.cnf
Если "Key_reads" менее чем на два порядка (100 раз) меньше "Key_read_requests", то "key_buffer_size" определенно нужно увеличить с поправкой на количество свободной памяти.
Максимальное значение. Ну это довольно глазомерная величина. Думаю, увеличивать "key_buffer_size" более четверти оперативной памяти не имеет смысла.
1 комментарий:
Хорошая заметка. Спасибо.
Отправить комментарий