Увеличение производительности mysql

Без преувеличения можно сказать что основой быстродействия mysql является наличие необходимых индексов над таблицами и наличие достаточного объема оперативной памяти для вмещения этих индексов.

Понять насколько эффективно происходит кэширование индексов в оперативной памяти можно выполнив запрос:

mysql> show status LIKE "Key%";
+------------------------+------------+
| Variable_name          | Value      |
+------------------------+------------+
| Key_blocks_not_flushed | 0          | 
| Key_blocks_unused      | 1256135    | 
| Key_blocks_used        | 458764     | 
| Key_read_requests      | 8684644670 | 
| Key_reads              | 695044     | 
| Key_write_requests     | 20732504   | 
| Key_writes             | 7800079    | 
+------------------------+------------+
7 rows in set (0.00 sec)

Соотношение показателей Key_reads (операция чтения с диска) и Key_read_requests (запросов к индексам) показывает достаточно ли отведено памяти для сохранения наиболее употребимых индексов. Соотношение 1/10000 как в этом примере свидетельствует о очень качественной работе буфера ключей. Только каждый 10000 запрос вызывает физическую операцию чтения файла индекса с диска. Если соотношение хуже чем 1/100 то нужно произвести настройку mysql для увеличения объема памяти отведенной под буферизацию индексов. Вот пример где под буфер индексов отводится 2 гигабайта памяти.

/etc/my.cnf:

[mysqld]
max_connections=500
key_buffer_size=2048M
...

Значение параметра key_buffer_size нужно подбирать исходя их объема дискового пространства занимаемого файлами индексов. В документации рекомендуется устанавливать его в размере 25% от объема RAM имеющейся на сервере. Но лучше исходить из реальной потребности конкретного сервера с конкретными базами данных и экспериментально подобрать значение дающее оптимальное соотношение показателей Key_reads / Key_read_requests.

Written on January 6, 2012