Назад | Перейти на главную страницу

Лучшая конфигурация my.cnf для сервера MySQL 8 ГБ с использованием только MyISAM

Я готовлю большую установку на основе Drupal 6.x и настроил выделенный сервер MySQL с 8 ГБ ОЗУ. Drupal 6.x использует только движок MyISAM, и около 500 одновременных пользователей будут использовать сайт через два веб-узла.

Вот дамп анализа праймера настройки mysql, я взял его рано утром, так как не уверен, следует ли его запускать во время интенсивного использования или нет: http://pastie.org/3279741.

Я не очень разбираюсь в конфигурации mysql, поэтому мне нужна помощь в определении правильной конфигурации для файла my.cnf, чтобы я мог выдерживать такую ​​нагрузку. Мне это нужно срочно, поэтому я не ищу ресурсов для понимания (по крайней мере, сейчас!).

Заранее спасибо!

Я не знаю друпала. Но, как вы просили, вам нужна специальная конфигурация MyIsam MySql. Для MyIsam у меня есть несколько рекомендаций:

key_buffer_size

Размер ключевого буфера, используемого для кэширования блоков индекса для таблиц MyISAM. Не устанавливайте его больше 30% доступной памяти, так как ОС также требует некоторой памяти для кэширования строк. Даже если вы не используете таблицы MyISAM, вы все равно должны установить его на 8-64M, так как он также будет использоваться для внутренних временных дисковых таблиц.Поэтому вы должны установить его с 2 ГБ до 3 ГБ.

read_buffer_size

Размер буфера, используемого для выполнения полного сканирования таблиц MyISAM. Распределяется по потокам, если требуется полное сканирование.Вы должны установить его от 8 МБ до 16 МБ.

read_rnd_buffer_size

При чтении строк в отсортированном порядке после сортировки строки считываются через этот буфер, чтобы избежать обращений к диску. Вы можете значительно улучшить производительность ORDER BY, установив для него большое значение. При необходимости распределяется по потокам.

bulk_insert_buffer_size

MyISAM использует специальный древовидный кеш для ускорения массовых вставок (то есть INSERT ... SELECT, INSERT ... VALUES (...), (...), ... и LOAD DATA INFILE). Эта переменная ограничивает размер дерева кэша в байтах на поток. Установка его на 0 отключит эту оптимизацию. Не устанавливайте его больше, чем key_buffer_size для оптимальной производительности. Этот буфер выделяется при обнаружении массовой вставки.Установите от 512 МБ до 1 ГБ.

myisam_sort_buffer_size

Этот буфер выделяется, когда MySQL необходимо перестроить индекс в операторах REPAIR, OPTIMIZE, ALTER table, а также в LOAD DATA INFILE в пустую таблицу. Он выделяется для каждого потока, поэтому будьте осторожны с большими настройками.Итак, вы должны установить его на 2M

myisam_max_sort_file_size

Максимальный размер временного файла, который MySQL может использовать при воссоздании индекса (во время REPAIR, ALTER TABLE или LOAD DATA INFILE. Если размер файла будет больше, чем это, индекс будет создан через ключевой кеш (который медленнее). Установите нужное значение.

myisam_repair_threads 

Если таблица имеет более одного индекса, MyISAM может использовать более одного потока для их исправления путем параллельной сортировки. Это имеет смысл, если у вас несколько процессоров и много памяти. Установите значение 1.

myisam_recover

Автоматически проверять и исправлять неправильно закрытые таблицы MyISAM.

Фактически, Drupal (даже 6.x) предпочитает работать на InnoDB. MyISAM используется по умолчанию, да, но это просто из-за сознательных усилий по поддержке хостеров, которые не предлагают InnoDB - см. http://drupal.org/node/301362 . Следовательно, я очень настоятельно рекомендую вам пересмотреть свое исключительное использование MyISAM.

К этому относится одно предостережение: таблицы search_ * используют индексы FULLTEXT, которые несовместимы с InnoDB. Оставьте эти MyISAM или, еще лучше, замените их функциональность чем-то вроде Apache Solr.

Если вы используете mysqltuner.pl после преобразования в InnoDB, если он не был недавно обновлен, вам не нужно будет указывать вам установить innodb_buffer_pool, что является самым большим ключом производительности для InnoDB.

Процесс преобразования MyISAM в InnoDB происходит без потерь и относительно быстро; это просто ALTER TABLEкакой-нибудь столENGINE=InnoDB. Обязательно установите innodb_buffer_pool перед тем, как сделать это, иначе вам может потребоваться долгое ожидание!

Наконец, я хотел бы вкратце упомянуть, что хостинг-провайдер с опытом крупномасштабного развертывания Drupal позаботится о большинстве или всех этих шагах за вас. Подумайте о том, чтобы поговорить с BlackMesh, на которого я работаю, или с другим хостом, активным в сообществе Drupal. Скорее всего, они смогут предложить дополнительную поддержку Drupal и советы по масштабированию по мере того, как вы продолжите расширять свой сайт.

Удачи!

  1. Да, вы хотите запускать его под реальной, а не поддельной нагрузкой. Цифры говорят о том, как все работало в прошлом, поэтому, если это не похоже на реальную нагрузку, они не помогут так сильно, как могли бы.

  2. Просто делайте то, что вам говорит mysqltuner.

Если у вас нет времени изучать детали настройки продукта и вы просто хотите следовать лучшим практикам, mysqltuner для вас! Он делает именно это: фиксирует рекомендации по передовому опыту и сообщает вам, что следует изменить в зависимости от вашего реального использования.