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

Решение для мониторинга, помогающее решить проблему с медленными запросами MySQL

У меня два сервера: на одном работает Apache, а на другом - только для MySQL. Ни на одном из них у меня не установлены инструменты мониторинга.

Время от времени кажется, что мои SQL-запросы выполняются очень-очень медленно (запросы, которые обычно выполняются за 0,3 секунды, теперь занимают 20 секунд). Я не знаю, проблема ли это MySQL, проблема с процессором или даже проблема в сети, как это обычно бывает, когда никого нет рядом, чтобы проверить, поэтому я ищу решение для мониторинга, которое помогло бы мне точно определить источник эта проблема.

Спасибо.

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

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

Если это так, то следующие шаги:

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

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

Вы можете использовать nagios, cacti или mrtg для мониторинга таких вещей, как пропускная способность данных на интерфейсах Ethernet, состояние интерфейса, передача данных с диска и т. Д. Эти инструменты можно легко настроить для предоставления графиков (cacti, mrtg) или отправки предупреждающих сообщений (cacti, nagios), когда определенные пороги превышены.

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

Похоже, у вас запущен неэффективный запрос или просто работает с большим набором данных. Когда запросы становятся медленными, запустите show full processlist; и отсортируйте по продолжительности выполнения. Это должно позволить вам определить запрос, который заставляет других выполнять больше времени.

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

mysql -e 'show full processlist;' |sort -n -k 6

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

Архитектура также играет важную роль в этом типе сценария. OLAP запросы лучше всего выполнять в вторичных базах данных, а не в OLTP база данных.

Хорошая идея - проанализировать журнал медленных запросов.

Моя интуиция подсказывает мне, что вы используете механизм хранения MyISAM для своих таблиц, и внезапно наблюдается всплеск активности удаления / обновления / вставки в сочетании с некоторыми длительными выборками ... что приводит ко всем видам забавных вещей с MyISAM, тогда как с InnoDB все остается стабильным.

Вы можете использовать mk-query-digest для анализа журналов MySQL и их агрегирования.
Также вам очень поможет правильное решение для мониторинга (например, Nagios) (с плагином MySQL).

Я использовал mytop очень часто получать медленные запросы. Когда наши веб-мастера начинают жаловаться на производительность (виртуального) сервера mysql, я вежливо прошу их прийти и вместе посмотреть результат работы mytop. Мы очень легко находим такой запрос, и оттуда вы знаете, каким может быть следующий шаг.

Mytop и журналы медленных запросов - отличное место для начала. В сочетании с решением для системного мониторинга / регистрации / построения графиков (при необходимости удалите), такого как OpenNMS / Nagios / Cacti, вы можете лучше понять, что происходит, когда у вас возникнут проблемы.

Также стоит настроить Apache mod_status, чтобы показать вам, какие запросы Apache обрабатывает, когда происходит замедление, но вам нужно будет наблюдать и видеть, как это происходит. Вывод этих переменных, а также переменных времени выполнения MySQL также может быть интегрирован в построение графиков OpenNMS, чтобы еще больше улучшить это понимание.

Настройка производительности

* change parameters in /etc/mysql/my.cnf
      o thread_stack=196K
      o query_cache_limit=2M 
      o query_cache_size=64M

попробуйте это в соответствии с вашими потребностями

если запросы очень медленные, попробуйте (отключите обратный поиск DNS)

 skip-name-resolve

если он работает, вам следует подумать о том, чтобы проверить конфигурацию DNS вместо использования этой опции