Запускать несколько экземпляров MySQL на одном сервере (с репликацией)?

В настоящее время у нас есть выделенный блок с 8 ГБ ОЗУ (двухъядерный ЦП), и наша БД выросла более чем на 17 ГБ (более 3 БД для нашего приложения). Я предполагаю, что это является достаточной причиной, чтобы перейти к машине, которая имеет больше памяти (откладывая осколок в сторону).

Новая коробка имеет 48 ГБ оперативной памяти. У нас есть второй специальный ящик, который мы также копируем (ведущий-ведомый) в нашу БД. Я рассматривал возможность установки двух экземпляров нашей БД (работающей на собственной файловой системе), работающей параллельно на одном и том же блоке, но с разными портами и размещающей прокси-сервер mysql перед ним, чтобы сбалансировать нагрузку на мой трафик чтения.

Я рассуждал так: я не вижу, чтобы каждая из наших БД требовала более 20-22 ГБ ОЗУ, прежде чем наткнуться на другие узкие места. Будут ли они работать параллельно и балансировка чтения трафика для них обеспечит сопоставимую производительность с использованием двух выделенных блоков?

1 ответ

На чем основаны ваши рассуждения? Какие узкие места вы ожидаете?

Размер данных, хранящихся в вашей базе данных, не должен зависеть от объема оперативной памяти, которую вы делаете доступной для системы. Если он был загружен до такой степени, что он не смог эффективно обслуживать запросы, то именно тогда вы должны рассмотреть это. Однако неправильно настроенные запросы, отсутствие индексов и плохо сконфигурированный экземпляр MySQL не будут полностью устранены при обновлении оборудования.

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

Есть определенные ограничения. Например, в MyISAM на MySQL 5.0 каждый буфер ключа будет ограничен 4 ГБ даже на 64-разрядных платформах, так как на них ссылаются 32-разрядные целые числа.

MySQL создает один поток на соединение. Таким образом, если вы не используете 64-битную платформу, каждый поток будет ограничен 4 ГБ даже с расширением физического адреса.

Если вы хотите масштабировать запросы на чтение, вы можете использовать несколько серверов баз данных, сбалансированных с помощью LVS. Я бы не использовал несколько экземпляров.

Высокая производительность MySQL - фантастическая книга. Я предлагаю вам прочитать это.

Другие вопросы по тегам