MySQL/MariaDB: тюнинг производительности #3: key_buffer_size

Автор: | 15/01/2015

mariadb_logoПараметр key_buffer_size задаёт размер памяти, выделяемый под хранение индексных блоков для таблиц типа MyISAM, которые могут быть считаны из памяти, вместо того, что бы обращаться к диску для чтения.

key_buffer_size – один из наиболее важных параметров в настройке производительности MySQL. Данный буфер является общим для всех пользовательских процессов.

Что бы узнать, необходимо ли изменять текущее значение key_buffer_size  – выполняем:

MariaDB [(none)]> show variables like 'key_buffer_size';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| key_buffer_size | 16777216 |
+-----------------+----------+

Текущее значение – 16 МБ.

Далее:

MariaDB [(none)]> SHOW STATUS LIKE "key%";
+------------------------+----------+
| Variable_name          | Value    |
+------------------------+----------+
| Key_blocks_not_flushed | 0        |
| Key_blocks_unused      | 12678    |
| Key_blocks_used        | 1233     |
| Key_blocks_warm        | 70       |
| Key_read_requests      | 23255430 |
| Key_reads              | 10765    |
| Key_write_requests     | 33749    |
| Key_writes             | 23912    |
+------------------------+----------+

Тут нас интересуют два значения – Key_reads и Key_read_requests.

  • Key_reads – количество считываний индексных блоков непосредственно с диска в кеш MyISAM;
  • Key_read_requests – количество считывание блоков из самого кеша.

Теперь мы можем подсчитать “key_cache_hit_percentage” по такой формуле:

key_cache_hit_percentage = (1 - Key_reads/Key_read_requests) * 100

В данном случае значение получается:

>>> key_cache_hit_percentage = (1.0 - (107650.0 / 23255430.0)) * 100; print(key_cache_hit_percentage)
99.5370973575

Если значение меньше 90% – есть смысл подумать над увеличением значения key_buffer_size.