Страница 1 из 1

Параметры настройки MySQL Server

Добавлено: 07 дек 2010, 17:56
Raven
Сервер MySQL имеет огромное количество переменных, которые могут быть настроены для ожидаемого поведения или в целях повышения производительности. Несмотря на то, что все они документированы, существует некоторая путаница с тем, какие переменные применяются только к конкретному движку базы данных, а какие ко всем.

Углубимся немного в историю. Первоначально в MySQL было не так много движков - MyISAM для таблиц на жестком диске и HEAP для таблиц в памяти. Так, что в первых версиях MySQL перед именами переменных не стоял префикс движка. Вот почему у нас есть key_buffer, а не myisam_key_buffer, например.

Еще одна важная деталь - следует учитывать какой движок вы используете. Например если у вас используются только Innodb таблицы, то это не значит что настройки MyISAM неважны. Некоторые таблицы в базе “mysql” хранятся в формате MyISAM, плюс временные HEAP/MEMORY таблицы при превышении определенного размера могут быть преобразованы в MyISAM. Таким образом, даже если вы не хотите выделять много ресурсов под MyISAM таблицы потому, что не используете их, следует оставить немного.

Список настроек, чаще всего вызывающих затруднения:

bulk_insert_buffer_size -Используется только таблицами MyISAM для оптимизации пакетных вставок.

concurrent_insert - Включает паралельную вставку (пока выполняется выборка) для MyISAM. В Innodb эта функция включена всегда, а HEAP/MEMORY таблицы её не имеют вовсе. Кстатии, в версии 5.0 добавилось новое значение “2″ которое позволяет работать паралельной вставке если таблица содержит “дыры” (удаленые строки).

delay_key_write - Задерживает обновление индексов для MyISAM таблиц. Увеличивает производительность, но в случае сбоя таблицы могут быть повреждены.

delayed_insert_limit, delayed_queue_size, delayed_insert_timeout - Настройки отложенной вставки. Innodb таблицы их не поддерживают.

expire_logs_days - Устанавливает время удаления бинарных логов с мастер сервера. Не влияет на лог транзакций и общий лог.

flush, flush_time - Закрывает таблицы (но не удостоверяется, что информация записана на диск) после запроса или по прошествии каждых flush_time секунд. Влияет на любые таблицы, но изначально предназначена для таблиц MyISAM. Нет особого смысла использовать с Innodb таблицами.

ft_query_expansion_limit, ft_max_word_len, ft_boolean_syntax, ft_min_word_len, ft_stopword_file - Переменные влияющие на полнотекстовый поиск. А так как пока он работает только с MyISAM, то и относится только к MyISAM таблицам.

join_buffer_size - Буфер используемый для джоинов и в некоторых других случаях. Применяется ко всем движкам.

key_buffer_size - Буффер ключей используется для буфферизации индексных блоков. Применяется только для MyISAM. Если вы не используете MyISAM таблицы оставляйте его значение в районе 4-32Мб для временных таблиц.

low_priority_updates - При включении выборка будет иметь больший приоритет, чем вставка/обновление. Таким образом ожидающая операция вставки не будет блокировать SELECT запросы до своего окончания. Работает для всех движков которые позволяют блокировать таблицы, тоесть с MyISAM и MEMORY.

preload_buffer_size - Буффер используемый для предварительной загрузки ключей, работает только с MyISAM таблицами.

read_buffer_size, read_rnd_buffer_size - Указывают размер буффера для чтения при полно-табличном сканировании (read_buffer) и для чтения строк в отсортированном порядке (read_rnd_buffer_size).

sort_buffer_size - Размер буффера для сортировки результатов запроса (выделяется каждым потоком при необходимости сортировки). Работает для любых таблиц.

timed_mutexes - Показывает статистику мутексов в SHOW MUTEX STATUS. На данный момент реализовано только в Innodb.

tmp_table_size - Указывает максимальный размер для временных таблиц (создающихся автоматически во время запроса) после которого они будут преобразованы из MEMORY в MyISAM таблицы. Не влияет на максимальный размер временных таблиц.