Параметры настройки MySQL Server
Добавлено: 07 дек 2010, 17:56
Углубимся немного в историю. Первоначально в 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 таблицы. Не влияет на максимальный размер временных таблиц.