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

Как определить процесс (и запрос mysql), который сильно нагружает сервер?

Время от времени нагрузка на мой сервер (centos 4) подскакивает до 15 и более. Мне нужно выяснить, какой процесс вызывает такую ​​высокую нагрузку на сервер. Есть ли какой-нибудь скрипт, который может справиться с этим за меня? Я думаю, что это вызвано mysql, поэтому даже обнаружение запроса sql было бы большим подспорьем.

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

  • iotop
  • top -b -i -n 10
  • atop и нажмите D
  • htop -> F2 добавить 2 столбца IO_RBYTES и IO_WBYTES, затем F6 Сортировать
  • ...

Особо следует обратить внимание на процессы в D состояние (непрерывный сон):

watch "ps -eo pid,user,state,command | awk '\$3 == /D/ { print \$0 }'"
SHOW FULL PROCESSLIST\G

ищите что-нибудь с длительным временем работы.

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

В противном случае вы можете использовать что-то вроде бесплатной версии Jet ( http://www.jetprofiler.com/ )

Гарретт

Если mysql является причиной высокой нагрузки, то Mysql поддерживает slow_query_log аргумент, и после включения он будет регистрировать любые особенно медленные запросы к файлу;
http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html

Журнал медленных запросов состоит из операторов SQL, выполнение которых заняло более long_query_time секунд и требовало проверки не менее min_examined_row_limit строк. Минимальные значения long_query_time и по умолчанию равны 0 и 10 соответственно.