Когда речь заходит об объеме оперативной памяти сервера, совет всегда один: чем больше — тем лучше. Увеличение объема памяти способствует ускорению работы программы MySQL, так как в оперативной памяти она хранит свои временные таблицы и буферы записей. В подкаталоге support files дистрибутива содержатся образцы конфигурационных файлов с различными вариантами настроек, касающихся использования памяти. Выберите тот вариант, который соответствует исходным параметрам сервера. Поработав с сервером какое-то время, можно будет оценить, какие из настроек требуют корректировки.
В листинге 10.10 показана конфигурация сервера, располагающего как минимум 1 Гбайт ОЗУ, четырьмя жесткими дисками и четырьмя центральными процессорами. Обратите внимание на важность индексного буфера. В данной конфигурации предполагается, что сервер хранит табличные данные на первом диске, а временные файлы — на втором. Таблицы InnoDB находятся на третьем диске, а журналы InnoDB — на четвертом.
[mysqld]set – variable = key buffer = 384Mset – variable = max allowed packet = 1M set – variable = table cache = 512set – variable = sort buffer = 2Mset – variable = record buffer = 2Mset – variable = thread cache size = 8 set – variable = thread concurrency = 8set – variable = myisam sort buffer size = 64Mlog – bin = server – id = 1tmpdir = /disk2/tmp/ # Таблицы BDBset – variable = bdb cache size = 384Mset – variable = bdb max lock = 100000 # Таблицы InnoDBinnodb data home dir = /disk3/innodb log group home dir = /gisk4/innodb log arch dir = /disk4/innodb data file path = ibdata1: 250M; ibdata2: 500M; ibdata3: 1000Mset – variable = innodb mirrored log groups = 1set – variable = innodb log files in groups = 3set – variable = innodb log files size = 5Mset – variable = innodb log buffer size = 8Minnodb flush log at trx commit = 1innodb log archive = 0set – variable = innodb buffer pool size = 16Mset – variable = innodb additional mem pool size = 2Mset – variable = innodb file io threads = 4set – variable = innodb lock wait timeout = 50
Листинг 10.10. (html, txt)
Когда сервер проработает какое-то время, выполните инструкцию SHOW STATUS, чтобы узнать его производительность. Сравните значения показателей Key reads и Key_read_requests. Их соотношение будет очень низким, если программа MySQL часто пользуется индексным буфером. В случае необходимости попытайтесь повысить размер буфера.
Проследите изменение показателя Open tables, сравнивая его со значением серверной переменной table cache, которое можно узнать с помощью инструкции SHOW VARIABLES. Когда табличный буфер заполняется, программа MySQL вынуждена закрывать одни таблицы, чтобы открывать другие. Показатель Opened tables отражает число таблиц, открывавшихся с момента запуска сервера. Сравните его с общим числом запросов (показатель Questions). Чем больше будет размер табличного буфера, тем реже придется открывать и закрывать таблицы.
Серверная переменная thread_cache_size задает размер кэша потоков. Как правило, на каждый процессор должно приходиться два потока. Сравните показатели Threads_created и Connections, чтобы определить, как часто серверу приходилось повторно использовать потоки.
Просмотрите еще раз список переменных демона mysqld. Есть много разных буферов и кэшей, увеличение размера которых способно повысить производительность сервера. После изменения конфигурации обязательно проведите повторные замеры.