Самый эффективный способ настроить MySQL на Ubuntu Server 10 LTS?
Этот вопрос был первоначально на stackoverflow.com, но мне сказали, что я могу получить лучший ответ на этом сайте...
Очень скоро я настрою веб-сервер для клиента, у которого очень загруженный сайт. У него есть форум (работающий на Simple Machines Forum SMF, написанный на PHP), который нельзя изменить. Я хочу перенести это на отдельный виртуальный частный сервер сам по себе, так как он очень загружен - около 40000 обращений в день и более 400 сообщений в день. В версии SMF (лучшая, самая стабильная производственная версия 1.1) для работы требуется MySQL, поэтому я не могу изменить его на PostgreSQL (который я, возможно, предпочел бы)
При установке MySQL Server на Ubuntu Server 10 LTS мне любопытно узнать, могу ли я что-то сделать, чтобы обеспечить максимальную эффективность. Я хочу работать как можно быстрее, чтобы ограничить ресурсы и обеспечить ограничение ресурсов для сервера. С виртуальным частным сервером у меня есть возможность переключать ресурсы в одно мгновение, но я хочу, чтобы MySQL Server был настроен максимально эффективно, так как я не совсем эксперт в таких вещах.
Я провел некоторое исследование и нашел статью, которая предлагает сделать это, чтобы убедиться, что это эффективно:
# open mysql conf and set these settings:
# key_buffer = 16k
# max_allowed_packet = 1M
# thread_stack = 64K
nano /etc/mysql/my.cnf
# restart mysql
/etc/init.d/mysql restart
Кто-нибудь может дать мне несколько советов, подсказок, ссылок, знаний по этому вопросу?
2 ответа
Прежде всего; Янн прав: 40 тысяч операций чтения и 400 записей в день - это нулевая нагрузка. У вас не должно быть абсолютно никаких проблем с производительностью практически при любой установке.
Я запускаю аналогичную настройку на VPS с SMF. Я обнаружил, что он много выигрывает от механизмов кэширования, поскольку он использует APC.
Моя настройка (которую я вам рекомендую):
- Nginx
- MySQL (с InnoDB-преобразованием большинства таблиц SMF)
- PHP-FPM (чрезвычайно масштабируемый, может использовать очень мало ресурсов, если вы скажете, чтобы он начинался с нескольких порождений)
- APC кеш
Прежде всего, 40 000 обращений в день и более 400 публикаций в день не похожи на то, что заставило бы MySQL вспотеть. 40 000 обращений в день - это примерно 2 попадания в секунду при распространении в течение дня, а более 400 сообщений означают, что через каждые три минуты появляется новое сообщение.
И это не так много. В самом деле.
Вы не упомянули, какой механизм хранения используется. С таблицами MyISAM вам нужно особенно настроить значения key_buffer и table_cache. С таблицами InnoDB innodb_buffer_pool_size является наиболее важным.
Key_buffer = 16k в вашем примере звучит странно. 16-килобайтный ключевой буфер? Ни в коем случае, сделайте это по крайней мере 16M (мегабайт), или если ваш сервер имеет приличный объем памяти, то это может быть намного больше. Имейте в виду, однако, что многие переменные MySQL относятся к конкретным соединениям, а не к глобальным значениям, поэтому, если загрузка вашего сервера означает одновременное подключение тысяч MySQL, вам нужно будет уменьшить значения, но если у вас обычно только несколько соединений, но большие наборы данных, то вам нужно настроить значения.