Этот вопрос изначально был на stackoverflow.com, но мне сказали, что я могу получить лучший ответ на этом сайте ...
Очень скоро я настрою веб-сервер для клиента, у которого очень загруженный сайт. У него есть форум (беги на Simple Machines Forum SMF, написанный на PHP), которые в действительности не могут быть изменены. Я хочу переместить его на отдельный виртуальный частный сервер, так как он очень загружен примерно 40 000 обращений в день с более чем 400 сообщениями в день. С той версией SMF, которая у него есть (лучшая, наиболее стабильная производственная версия 1.1), для ее работы требуется MySQL, поэтому я не могу изменить ее на PostgreSQL (что, возможно, я бы предпочел)
При установке MySQL Server на Ubuntu Server 10 LTS мне любопытно узнать, могу ли я что-нибудь сделать, чтобы он был максимально эффективным. Я хочу работать как можно быстрее, чтобы ограничить ресурсы и убедиться, что мы можем оставаться в пределах нашего лимита ресурсов для сервера. С виртуальным частным сервером у меня есть возможность переключать ресурсы в мгновение ока, но я хочу убедиться, что сервер MySQL настроен как можно более эффективно, поскольку я не совсем эксперт в этом типе вещей.
Я проводил небольшое исследование и нашел статью, в которой предлагается сделать это, чтобы убедиться, что это эффективно:
# 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
Может ли кто-нибудь дать мне несколько советов, подсказок, ссылок, знаний по этой теме?
Прежде всего; Янне прав: 40k чтений и 400 записей в день - это нулевая нагрузка. Практически при любых настройках у вас не должно быть абсолютно никаких проблем с производительностью.
Я запускаю аналогичную настройку на VPS с SMF. Я обнаружил, что он очень выигрывает от механизмов кеширования, поскольку использует APC.
Моя установка (которую я вам рекомендую):
Во-первых, 40 000 посещений в день и 400+ постов в день - это не то, что заставит MySQL попотеть. 40 000 посещений в день - это около 2 обращений в секунду, если они распределены по дням, а 400+ сообщений означают, что каждые три минуты появляется новый пост.
И это немного. В самом деле.
Вы не упомянули, какой механизм хранения используется. С таблицами MyISAM вам нужно настроить особенно key_buffer и table_cache ценности. С таблицами InnoDB innodb_buffer_pool_size самый важный.
В key_buffer = 16 КБ в вашем примере звучит странно. Key_buffer размером 16 килобайт? Ни в коем случае, сделайте его не менее 16 МБ (мегабайт), или, если у вашего сервера приличный объем памяти, его может быть намного больше. Однако имейте в виду, что многие переменные MySQL связь конкретные, а не глобальные значения, поэтому, если нагрузка на ваш сервер означает тысячи одновременных подключений MySQL, вам нужно настроить значения вниз, но если у вас обычно только несколько подключений, но большие наборы данных, вам нужно настроить значения.