У меня проблемы с масштабированием в приложении Rails, работающем поверх MySQL. Я использую memcached и имею много индексов.
Я также начинаю увеличивать значения некоторых настроек my.cnf, например tmp_table_size
и innodb_buffer_pool_size
.
Но тогда это подводит меня к моему вопросу. Должен ли я переместить базу данных MySQL на второй выделенный сервер базы данных (тем самым увеличив объем памяти, который MySQL может использовать для пулов буферов и т. Д.) ИЛИ следует ли мне увеличить оперативную память на текущем сервере, на котором размещены и Rails, и MySQL?
Я предполагаю, что увеличиваю доступную для MySQL оперативную память намного больше, если перемещаю MySQL на его собственный сервер. Но меня беспокоит задержка запросов MySQL, отправленных по сети между двумя серверами, а не через mysql.sock
.
Любой совет?
Во-первых, поймите, где находится ваше узкое место. Ваше приложение в основном читает из SQL? Письмо? Если вы в основном читаете, и ваш набор данных больше не умещается в памяти, добавление ОЗУ, вероятно, повысит производительность. Возможно, данные уже умещаются в памяти, и MySQL загружает процессор [например, он выполняет полное сканирование таблицы, потому что он не может использовать индекс в некоторых обстоятельствах, таких как подзапросы]
Несколько советов:
Только после этого решайте, нужно ли: