Как улучшить производительность MYSQL в сети - PullRequest
2 голосов
/ 17 августа 2011

Наши серверы баз данных отделены от нашего веб-сервера.Серверы баз данных реплицируются (мы знаем, что здесь есть издержки).Однако даже при отключенной репликации производительность для большого количества запросов в сценарии PHP в 4 раза ниже, чем у нашего промежуточного сервера, на котором установлены db и apache на одной машине.Я понимаю, что задержка в сети и другие проблемы с сетью означают, что они никоим образом не будут равны, но наши производственные серверы экспоненциально более мощные, а наша производственная сеть работает на гигабитных коммутаторах.Мы настроили MYSQL как можно лучше, но маркер производительности все еще в 4 раза медленнее.Мы работаем через nginx с прокси-серверами Apache и реплицированными базами данных MYSQL.UCarp также работает.Каковы некоторые предложения для областей, чтобы искать улучшения производительности?Я был бы счастлив вдвое медленнее на производстве.

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Сложно сделать гораздо больше, чем нанести удар в темноте, учитывая ваше описание, но вот некоторые отправные точки, чтобы попробовать самостоятельно, что, мы надеемся, сузит причину:

  • Переместите вашу промежуточную базу данных в другуюhost
  • Добавьте промежуточный хост в рабочий пул и удалите остальные
  • Профилируйте ваш PHP-скрипт, чтобы убедиться, что это запросы, вызывающие задержку
  • Используйте отдельный сервер MySQL вместочерез балансировщик нагрузки
  • Измерение одного запроса к производственному пулу и промежуточному серверу от клиента MySQL
  • Запуск netperf между вашим веб-сервером и кластером БД
  • Профилироватьвеб-сервер с [gb] prof
  • Профилировать сервер MySQL, получающий запрос, с [gb] prof

Если ни один из них не освещает ничего, кроме ожидаемого ухудшения из-за удаленного хоста, затем предоставьте воспроизводимый контрольный пример и полную конфигурацию MySQL (с удаленными конфиденциальными данными.) Это поможетomeone, более опытный в MySQL, поможет вам;)

0 голосов
/ 21 ноября 2011

Не каждый веб-запрос на веб-сайте (если он правильно спроектирован) требует подключения к MySQL. Скорее всего, если вам требуется соединение при каждом http-запросе, ваше приложение не будет масштабироваться и очень быстро начнут возникать проблемы.

  1. Сделать больше кеширования в приложении. Сервер запрашивать MySQL реже. Например. использование Memcache.

  2. Попробуйте использовать постоянные соединения из приложения с вашими MySQL серверами.

  3. Использовать сжатие данных mysql.

  4. Сократить данные (ограничить выбор, использовать имена столбцов вместо "*" в операторах выбора)

Шаманский тюнинг:

  • Убедитесь, что ничто не замедляет работу сети на серверах MySQL: большие наборы правил брандмауэра, сетевые фильтры и т. Д.

  • Добавить еще один (недоступный клиенту) сетевой интерфейс для приложения. сервер и MySQL сервер.

  • Настройка сетевого соединения между приложениями. сервер и mysql. Иногда вы может выиграть несколько мс путем создания жестко закодированных сетевых маршрутов.

Не думайте, что что-либо из вышеперечисленного поможет: если сетевое соединение медленное, ничто из вышеперечисленного не значительно ускорит его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...