Как проанализировать MySQL Slow Query Log или MySQL General Query Log?
Анализ журналов является серьезной проблемой. Если у вас есть унаследованный код и запущены сотни и тысячи запросов, вы непременно будете озадачены тем, что улучшать и где улучшать, и насколько улучшать, потому что всегда есть компромисс между тем, сколько усилий вы собираетесь приложить к работе. на определенную проблему оптимизации.
Первый шаг - проанализировать, где мы идем не так. Это может быть достигнуто только путем правильного анализа журналов. Без этого у вас может не быть представления о том, что именно происходит с вашим приложением.
Как вы анализируете журналы MySQL тогда?
4 ответа
Один вариант: Percona Toolkit
Сделал огромный анализ медленных журналов несколько месяцев назад..
И я нахожу Percona Toolkit
быть очень полезным. С помощью этого инструментария вы можете легко провести тщательный анализ медленных журналов и оптимизировать базу данных с меньшими хлопотами.
Чтобы назвать несколько полезных функций для анализа медленных журналов:
pt-query-digest
может анализировать запросы из медленных, общих и двоичных журналов MySQL. (Двоичные журналы должны быть сначала преобразованы в текст, см. --Type). Он также может использовать данные протокола SHOW PROCESSLIST и MySQL из tcpdump. По умолчанию инструмент сообщает, какие запросы являются самыми медленными и, следовательно, наиболее важными для оптимизации. Более сложные и настраиваемые отчеты можно создавать с помощью таких параметров, как --group-by, --filter и --embedded-attribute.
Пример использования pt-query-digest slow.log
pt-index-usage
Читайте запросы из журнала и анализируйте, как они используют индексы.
Для дополнительной информации...
Ну, не каждый может использовать этот инструмент, но если вы можете, это должно быть очень полезно.
Поиск по ключевым словам, т. Е. По именам таблиц или столбцов.
Используя мобильное приложение, веб-приложение или настольное приложение, вы будете знать, какая страница загружается быстрее, чем ожидалось. Часто время загрузки зависит от запросов, которые выполняются в фоновом режиме. Но это только тогда, когда мы выполняем синхронизирующие вызовы, а не асинхронные вызовы для извлечения данных. Итак, когда вы знаете, что страница / область загружается медленно, у вас будет список запросов, которые выполняются на этой странице во время загрузки, и список запросов, которые запускаются, потому что вы выполняете действие на этой странице. Как только вы узнаете запросы, вы узнаете, какие таблицы используются и какие столбцы выбираются.
Теперь, если вы ищете в журнале медленных запросов, и вы установили для себя очень высокие стандарты и установили время медленного запроса равным 400 миллисекундам, есть вероятность, что ваш журнал медленных запросов будет загружен, если вы не гений. Итак, мы делаем эту простую вещь:
grep 'table_name' /var/lib/mysql/mysql-slow.log
Это создает больше проблем, чем решает, потому что все важные вопросы остаются без ответа, так как это не дает время запроса, дату запроса и т. Д. Итак, сделайте это:
grep -B 3 'table_name' /var/lib/mysql/mysql-slow.log
-B x дает x количество строк перед запросом.
Нам это понадобится, потому что 3 строки до фактического запроса содержат всю информацию о выполнении запроса - когда был выполнен запрос и сколько времени это заняло!
Альтернатива:
grep -A 3 'query_user' /var/lib/mysql/mysql-slow.log
Количество медленных запросов в течение дня, по часам
grep Time mysql-slow.log | cut -d: -f1,2 | sort -r | uniq -c
Примечание: вы можете использовать sort -u или sort | uniq -c, но будьте уверены, что uniq не будет работать независимо, он будет работать только тогда, когда вы передадите его с помощью sort. Сортировка должна быть сделана до uniq.
Использование mysqldumpslow для анализа журнала
Получение 10 лучших неудовлетворительных запросов.
mysqldumpslow -u root -p -s c -t 10
Если вам нужно углубиться в детальную аналитику журналов, вы должны настроить стек ELK на своем компьютере и подключить mysql к настройке аналитики журналов. Или вы можете использовать NewRelic для анализа журналов MySQL.
Журналы MySQL могут быть огромными по размеру специально для рабочего сервера MySQL. В таких случаях анализ медленного / общего журнала запросов может быть утомительной задачей (я был в той же ситуации ранее). Функция Query Analyzer в Monyog очень удобна в таких ситуациях, поскольку она предоставляет единое окно, в котором вы можете получить весь контент медленного / общего журнала запросов. Также вы можете установить различные фильтры, такие как разделенные запятыми пользователи mysql, для которых вы хотите видеть выполненные запросы, имя хоста. Вы также можете установить ограничение на размер файлов журнала или количество строк, которые должны быть прочитаны из файлов журнала MySQL. Monyog несколько раз помогал мне при анализе логов MySQL, и я чувствую, что он лучший на рынке по ценам на нынешнем рынке.
Он также имеет другую функцию, называемую в реальном времени, которая отображает запросы, которые выполняются в сеансах в реальном времени, вы также можете сохранить сеанс, чтобы просмотреть его при необходимости в будущем. Вы можете выбрать различные режимы сниффинга, такие как схема производительности, Processlist или MySQL Proxy, чтобы прослушивать MySQL запросы. Вы можете включить оповещения, чтобы знать состояние вашего сервера MySQL в любое время.
Я настоятельно рекомендую использовать инструмент мониторинга, а не пытаться вручную просматривать журналы MySQL.
Я использую Navicat Monitor для этой цели.
Его инструмент Query Analyzer предоставляет графическое представление для журналов запросов, что позволяет быстро идентифицировать и разрешать долго выполняющиеся запросы.
Вот как это выглядит:
Вы можете легко отсортировать свои запросы по времени выполнения, чтобы быстро идентифицировать своих приверженцев.
Надеюсь, это поможет!