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

MySQL на выделенном сервере против увеличения оперативной памяти на сервере с помощью приложения MySQL + Rails

У меня проблемы с масштабированием в приложении Rails, работающем поверх MySQL. Я использую memcached и имею много индексов.

Я также начинаю увеличивать значения некоторых настроек my.cnf, например tmp_table_size и innodb_buffer_pool_size.

Но тогда это подводит меня к моему вопросу. Должен ли я переместить базу данных MySQL на второй выделенный сервер базы данных (тем самым увеличив объем памяти, который MySQL может использовать для пулов буферов и т. Д.) ИЛИ следует ли мне увеличить оперативную память на текущем сервере, на котором размещены и Rails, и MySQL?

Я предполагаю, что увеличиваю доступную для MySQL оперативную память намного больше, если перемещаю MySQL на его собственный сервер. Но меня беспокоит задержка запросов MySQL, отправленных по сети между двумя серверами, а не через mysql.sock.

Любой совет?

Во-первых, поймите, где находится ваше узкое место. Ваше приложение в основном читает из SQL? Письмо? Если вы в основном читаете, и ваш набор данных больше не умещается в памяти, добавление ОЗУ, вероятно, повысит производительность. Возможно, данные уже умещаются в памяти, и MySQL загружает процессор [например, он выполняет полное сканирование таблицы, потому что он не может использовать индекс в некоторых обстоятельствах, таких как подзапросы]

Несколько советов:

  • начните с мониторинга того, что происходит с вашим сервером, с помощью программного обеспечения Мунин.
  • включить медленное ведение журнала запросов
  • проанализировать, какие запросы вы отправляете в SQL - например, с mysqsla - А может, вы все-таки делаете ненужное сканирование всей таблицы?
  • используйте объяснение для каждого из наиболее частых запросов

Только после этого решайте, нужно ли:

  • получить больше мощности процессора [и перенести MySQL на другую машину]
  • купить больше RAM
  • оптимизируйте свой код