У меня есть сервер Windows 2008 с 8 ГБ ОЗУ, на котором запущены IIS7 и MySQL. Я отслеживал использование памяти, процессора и диска на сервере, и я обнаружил, что MySQL использует только 250 МБ ОЗУ, что делает диски очень загруженными, хотя у меня много свободной оперативной памяти.
В SQL Server я могу легко установить объем памяти, который я хочу использовать, я ищу такой же параметр в MySQL.
Как я могу настроить MySQL для использования большего объема памяти и уменьшения использования процессора и диска?
table_cache
это самая полезная конфигурационная директива для изменения. Каждый раз, когда MySQL обращается к таблице, он загружает ее в кеш. Если у вас много таблиц, их кешировать быстрее.
Взгляните на переменные вашего сервера, запустив:
show status;
и найдите переменную open_tables
. Если это то же самое, что и ваш table_cache
значение и opened_tables
продолжает расти, тогда вам нужно увеличить table_cache
значение в вашем файле конфигурации. Вы найдете баланс, экспериментируя с этими переменными в часы пик. Вы хотите настроить его так, чтобы в часы пик было небольшое количество opened_tables
даже после того, как сервер работал долгое время.
key_buffer_size
также хорошая переменная для экспериментов. Эта переменная влияет на размер буфера индекса, и увеличение этой переменной увеличивает скорость обработки индекса MySQL. Вы можете посмотреть на переменные с помощью show variables;
команду еще раз и сравните key_read_requests
к key_reads
. В идеале вы хотите, чтобы соотношение между этими двумя переменными было как можно более низким, и вы можете сделать это, увеличив размер key_buffer_size
. Если вы установите эту переменную выше, у вас будет меньше операций записи и чтения непосредственно на диск и с диска, что было вашей основной заботой.
Вам нужно изменить значения в my.cnf
файл и перезапустите MySQL, хотя вы можете изменить многие из них и во время работы MySQL ('SET GLOBAL VARIABLE =стоимость').
Возможно, вы захотите посмотреть на увеличение key_buffer_size
, sort_buffer
, read_buffer
и table_cache
для начала и возможно innodb_buffer_pool_size
, если у вас есть таблицы InnoDB. Некоторые из этих значений вы можете значительно увеличить (даже на два порядка), особенно с учетом вашего оборудования. Параметры MySQL по умолчанию чрезвычайно консервативны и, казалось, были ориентированы на обычные настольные компьютеры смешанного использования около десяти лет назад. Да, и имейте в виду, что 32-разрядная версия будет иметь проблемы с использованием более 2 ГБ ОЗУ.
Смотреть в руководство по MySQL для получения дополнительной информации и рекомендаций.