марта 11, 2007

Немного о 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 комментарий:

Введите ваше имя комментирует...

Хорошая заметка. Спасибо.