Главная » Первоначальная настройка mysql-server
Мой любимый вопрос, задаваемый DBA, которые хотят увеличитьпроизводительность MySQL: “какие параметры надо настраивать в первуюочередь, сразу после установки сервера?”
Я удивлен количеством людей, которые не могут дать ответа на этотвопрос. И еще более удивлен количеством серверов, которые работают снастройками по умолчаниюДля настройки доступно довольно большое количество параметров, нолишь некоторые из них действительно влияют на производительностьсервера. После установки этих параметров в правильные для вашегопроекта значения, остальные настройки будут лишь незначительно влиятьна поведение сервера.

key_buffer_size - очень важный параметр, если выиспользуете MyISAM-таблицы. Установите его равным 30-40% от имеющейсяоперативной памяти, если вы используете только MyISAM. Актуальное длявашей системы значение зависит от индексов, размера данных и рабочегопроцесса. Помните, MyISAM использует кэш операционной системы дляхранения данных и вам необходимо позаботиться о достаточных размерахвыделяемой памяти. Во многих случаях, объем данных может бытьзначительно больше. Проверьте, не используется ли завышенное значениеkey_buffer. Нередко параметр установлен в значение 4GB при суммарномобъеме .MYI-файлов в один гигабайт. Это напрасная трата ресурсов. Есливы используете несколько таблиц MyISAM - понизьте значение этогопараметра. Но не опускайте его ниже 16-23 MB - этого будет достаточнодля размещения индексов временных таблиц, которые создаются на диске.innodb_buffer_pool_size - это очень важный параметрдля настройки InnoDB. Таблицы этого типа гораздо более чувствительны кразмеру буфера, нежели MyISAM. MyISAM может нормально работать даже придефолтном значении buffer_size, в отличии от InnoDB, производительностькоторых будет заметно ниже при значении innodb_buffer_pool_size поумолчанию и больших объемах данных. Также пул буферов InnoDBсамостоятельно кэширует индексы и данные, так что не нужно оставлятьместо для кэша ОС. Обычно предполагается выделение 70 - 80% памяти длясерверов, на которых ничего не запущено, кроме InnoDB. Некоторыеправила key_buffer применимы и в этом параметре: если у вас небольшиеобъемы данных и они не собираются стремительно увеличиваться, незавышайте значение innodb_buffer_pool_size, вы сможете найти свободнойоперативной памяти лучшее применение.innodb_additional_mem_pool_size - этот параметр неимеет сильного влияния на производительность. По крайней мере воперационных системах с грамотным распределением памяти. Но вы можетеустановить значение этого параметра раным 20MB (иногда больше) и выможете видетm сколько памяти выделяет InnoDB для различных нужд.innodb_log_file_size - очень важный параметр длясистем с интенсивной записью, особенно больших объемов данных.Увелечение значения этого параметра обычно дает приростпроизводительности, но будьте осторожны. Обычно я использую значения64M - 512 MB в зависимости от сервера.innodb_log_buffer_size - значение по умолчаниювполне подойдет для большинства проектов со средней интенсивностьюзаписи и короткими транзакциями. Однако если у вас бывают пикиактивности или работа с большим объемом данных, вы, вероятно, захотитеувеличить значение этого параметра. Не делайте его слишком большим, этоповлечет лишний расход памяти. Буфер сбрасывается каждую секунду и вамне нужен бОльший объем памяти. Обычно вполне хватает 8 - 16МB. Чемменьше система - тем меньше должно быть значение.innodb_flush_logs_at_trx_commit - Вам кажется, чтоInnoDB в сто раз медленнее MyISAM? Вероятно, вы забыли изменитьзначение этого параметра. Значение по умолчанию 1 означает,что после каждой завершенной транзакции (или после изменения состояниятранзакции) лог должен быть сброшен на диск. Это достаточно дорогаяоперация, особенно если у вас нет Battery backed up cache. Многиеприложения, особенно те, в которых раньше использовался MyISAM будутхорошо работать при значении 2, который означает, что не надосбрасывать буфер на диск, а следует отправить его в кэш операционнойсистемы. Лог по-прежнему будет сбрасываться на диск каждую секунду имаксимум, что вы можете потерять - это 1-2 секунды записей. Значение 0обеспечивает более высокую скорость, но и более низкую надежность. Естьвероятность потерять транзакции даже при падении mysql-сервера. Призначении равном 2 единственная возможность потерять данные - этофатальный сбой операционной системы.table_cache - открытые таблицы могут разрастаться.Например, таблицы MyISAM помечают MYI-заголовок, как используемый. Вы,конечно же, не хотите, чтобы это происходило слишком часто и это, какправило, хорошее решение. Лучше увеличить размер кэша, чтобы он могвместить большинство открытых таблиц. Кэш использует некотороеколичество памяти и ресурсов ОС, но для современной техники это, какправило, не проблема. Значение 1024 будет оптимальнымрешением для нескольких сотен открытых таблиц (помните, каждоесоединение нуждается в собственной копии). Если у вас много соединенийили большое количество открытых таблиц - увеличьте это значение. Явидел системы со значением этого параметра > 100.000thread_cache - Создание/уничтожение нитей (threads)может ухудшать производительность, особенно если онисоздаются/уничтожаются при каждом соединении/разъединении. Обычно яустанавилваю значение этого параметра равным 16. Если приложение делает большие прыжки в параллельных соединениях, то можно увидеть, как быстро растет переменная Threads_Created. Параметр предназначен для того, чтобы не создавать новых нитей в нормальных операциях.query_cache_size - если ваше приложение читаетмного данных и у вас нет кэша на уровне приложения, этот параметр можетнеплохо помочь. Но не устанавливайте слишком большого значения - этоможет замедлить работу и содержание такого кэша может обойтись довольнодорого. Оптимальные значения - от 32MB до 512MB. Тем не менее,проверьте эффективность работы кэша через некоторое время. Вполневозможно, что текущее значение слишком велико.Примечание: как вы заметили, все эти переменныеявляются глобальными и зависят от аппаратного обеспечения и устройствхранения данных. Сессионные переменные зависят от специфики конкретногопроекта. Если у вас простые запросы, вам совершенно не нужноувеличивать параметр sort_buffer_size, даже если ввашем распоряжении 64GB оперативной памяти. Кроме того, это можетснизить производительность. Обычно я оставляю настройку сессионныхпеременных на второй шаг, уже после оценки фронта работ.P.S.: в дистрибутиве MySQL есть отличные примеры файла my.cnfдля систем различных размеров. Они могут использоваться в качестве базыдля ваших собственных файлов конфигурации, главное правильно выбратьшаблон.

Категория: Интересные статьи | Просмотров: 514