Определите, насколько сильно загружена база данных mysql в настоящее время с помощью PHP


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

Я не уверен, что было бы для меня наиболее точным/эффективным/простым. Я рассматриваю, возможно, количество текущих подключений или время отклика сервера или использование процессора?

Что было бы наиболее подходящим и возможным?

Спасибо

Author: Pablo, 2010-08-16

3 answers

Интересный вопрос. Что вам ДЕЙСТВИТЕЛЬНО нужно, так это способ для PHP задать серверу MySQL два вопроса:

Сервер, вы используете почти всю мощность своего процессора?

Сервер, вы используете почти всю емкость ввода-вывода на диске?

Основываясь на ответах, я полагаю, что вы хотите упростить работу, которую выполняет ваше веб-приложение PHP... возможно, за счет исключения какой-либо возможности поиска или более агрессивного кэширования некоторых данных.

Если у вас есть оболочка для вашего (linux или bsd) mysql сервер, на ваши два вопроса можно ответить, посмотрев на вывод этих двух команд.

   sar -u 1 10     # the %idle column tells you about unused cpu cycles
   sar -d 1 10     # the %util column tells you which disks are busy and how busy.

Но нет никакого милого маленького запроса, который извлекает эти данные из MySQL в ваше приложение.

Редактировать: одна из возможностей - написать небольшой взлом PERL или другую простую программу, которая работает на вашем сервере, подключается к локальной базе данных и время от времени (возможно, раз в минуту) определяет %idle и %util и обновляет небольшую таблицу с одной строкой в вашей базе данных. Вы могли бы, не слишком много проблем, также добавьте в эту таблицу такие вещи, как заполненность ваших дисков, если вам не все равно. Затем ваше PHP-приложение может запросить эту таблицу. Это идеальное использование метода доступа к ПАМЯТИ. В любом случае, будьте проще: вы не хотите, чтобы ваш мониторинг отягощал ваш сервер.

Второй лучший трюк, который вы МОЖЕТЕ сделать со своим клиентом.

Выполните команду ПОКАЗАТЬ СПИСОК ПРОЦЕССОВ ПОЛНОСТЬЮ, подсчитайте количество строк (процессов MySQL), для которых используется команда "Запрос", и если у вас их много считайте, что это большая рабочая нагрузка.

Вы также можете сложить значения времени для процессов, у которых есть запрос состояния, и использовать высокое значение этого времени в качестве порогового значения.

РЕДАКТИРОВАТЬ: если вы работаете на сервере MySQL 5, и ваша учетная запись сервера имеет доступ к информации, предоставленной mysql_schema, вы можете напрямую использовать запрос для получения данных процесса, о которых я упоминал:

SELECT (COUNT(*)-1) P.QUERYCOUNT, SUM(P.TIME) QUERYTIME
FROM information_schema.PROCESSLIST P
WHERE P.COMMAND = 'Query'

КОЛИЧЕСТВО(*) - 1: потому что сам приведенный выше запрос считается запросом.

Вам нужно будет поиграть на скрипке с пороговыми значениями, чтобы сделать эту работу правильной в производстве.

Это хорошая идея, чтобы ваше веб-приложение PHP сбрасывало нагрузку, когда сервер базы данных не справляется. Тем не менее, лучшая идея - определить ваши долгосрочные запросы и оптимизировать их.

 0
Author: O. Jones, 2010-08-16 16:12:21

Профилировщик запросов MySQL делает то, что вы ищете.

Http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html

Если вы предпочитаете платить деньги за графический профилировщик, попробуйте следующее:

Http://www.jetprofiler.com/

 1
Author: Raj More, 2010-08-16 15:00:38

Величина "стресса", под которым находится база данных, не является очень реальной метрикой. Важно определить, насколько масштабируемо приложение, и расширение, в котором база данных способствует неприемлемой производительности. Это звучит как своего рода выход, но нет особого смысла тратить время и усилия на что-то без четкой цели того, чего вы намерены достичь.

Важно начать записывать время отклика на уровне микросекунд на вашем веб-сервере регистрирует и включает медленное ведение журнала запросов в mysql. Затем протестируйте свою СУБД, чтобы увидеть, что работает медленно, что работает медленно и часто поражается, а что замедляется по мере увеличения спроса.

Конечно, если у вас проблемы с производительностью, то обязательно начните смотреть на процессор, использование памяти и ввод-вывод, но это в первую очередь симптомы проблемы с производительностью, а не истинные показатели. У вас может быть 10 % загрузки процессора, и ваша система может работать как собака, или 95% загрузки и работать как борзая;).

.

Система загрузка (т. Е. Средняя длина очереди запуска является лучшим показателем, чем процессор, но все равно измеряет symtpom. В целом медлительность, связанная с базой данных, обычно связана в первую очередь с проблемами ввода-вывода и обычно решается настройкой SQL.

C.

 1
Author: symcbean, 2010-08-16 15:56:12