1

Анализ журналов является серьезной проблемой. Если у вас есть устаревший код и запущены сотни и тысячи запросов, вы должны быть смущены тем, что нужно улучшить и где улучшить и как улучшить, потому что всегда есть компромисс между тем, сколько усилий вы собираетесь использовать по определенной проблеме оптимизации.Как анализировать MySQL Slow Query Log или MySQL Общий журнал запросов?

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

Как вы анализируете журналы MySQL?

ответ

0

Поиск по ключевым словам, то есть именам таблиц или именам столбцов.

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

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

grep 'table_name' /var/lib/mysql/mysql-slow.log 

Это создает больше проблем, чем решает, поскольку все важные вопросы остаются без ответа, поскольку это не дает времени запроса, дата запроса и т.д. Таким образом, сделать это:

grep -B 3 'table_name' /var/lib/mysql/mysql-slow.log 

-B 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 

примечание здесь: вы можете использовать либо сортировать -u или вы можете использовать сортировать | uniq -c, но убедитесь, что uniq не будет работать независимо, он будет работать только при его сортировке. Сортировка должна выполняться до uniq.

Использование mysqldumpslow для проанализируйте журнал

Получение 10 лучших неэффективные запросы.

mysqldumpslow -u root -p -s c -t 10 

Если вам необходимо получить в подробных журналов аналитики, вы должны настроить ELK стек на вашей машине и подключить MySQL к настройке журнала аналитики.Или вы можете использовать NewRelic для анализа журналов MySQL.

+1

Для 'mysqldumpslow', я предпочитаю' -s t', чтобы заказать «влияние на систему». Плохо проиндексированный запрос может быть несущественным, если он очень редок. –

+0

@ RickJames - Является ли ELK жизнеспособным вариантом анализа журналов MySQL? – MontyPython

+1

Извините, я не знаю о ELK. Я рассмотрел медленный журнал на сотнях серверов и обнаружил, что _usually_ _most_ полезную информацию в первых нескольких запросах, отображаемых 'mysqldumpslow -s -t' или' pt-query-digest'.Покажите мне первую пару запросов (плюс 'CREATE TABLE' и' EXPLAIN'), и я могу _usually_ дать важные советы. –

2

Один вариант: Percona Инструментарий

Сделано некоторые огромный анализ медленных бревен несколько месяцев назад ..

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

Чтобы назвать несколько полезных функций для анализа SLOW ЖУРНАЛОВ:

pt-query-digest

может анализировать запросы из MySQL медленно, общих и бинарных журналов. (Двоичные журналы сначала должны быть преобразованы в текст, см. --type). Он также может использовать SHOW PROCESSLIST и данные протокола MySQL из tcpdump. По умолчанию инструмент сообщает, какие запросы являются самыми медленными и, следовательно, наиболее важными для оптимизации. Более сложные и настраиваемые отчеты могут быть созданы с использованием таких параметров, как --group-by, -filter и -embedded-attributes.

Пример использования pt-query-digest slow.log

pt-index-usage

Читайте запросы из журнала и проанализировать, как они используют индексы.

For more information...

Installation

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

+1

Является ли ELK опцией для MySQL? – MontyPython

+1

Я так думаю, на самом деле не использовал ELK для анализа журналов sql. Но, основываясь на моих первоначальных показаниях об инструменте, особенно. LogStash, существует немало недавних блогов, которые обсуждают использование инструмента для анализа. Посмотрите, есть несколько статей, которые могут вам помочь. –

+0

Да, на самом деле я над этим работаю. Будет опубликован подробно, когда я соберу достаточное количество рабочих знаний. – MontyPython

0

Журналы MySQL могут быть огромными по размеру специально для производственного сервера MySQL. В таких случаях анализ медленного/общего журнала запросов может быть утомительной задачей (раньше я был в той же ситуации). Функция анализатора запросов Monyog действительно удобна в таких ситуациях, когда она обеспечивает единое окно, в котором вы можете получить весь контент медленного/общего журнала запросов. Кроме того, вы можете поместить различные фильтры, такие как пользователи mysql, разделенные запятой, для которых вы хотите увидеть выполненные запросы, имя хоста. Вы также можете ограничить размер файлов журнала или количество строк, которые должны быть прочитаны из файлов журнала MySQL. Monyog помог мне во время анализа журналов MySQL, и я считаю, что это лучший на рынке, основанный на ценообразовании на современном рынке.

У этого также есть еще одна функция, называемая Real-Time, которая отображает запросы, которые выполняются в сеансах реального времени, вы также можете сохранить сеанс, чтобы просмотреть его, когда это необходимо в будущем. Вы можете выбирать различные режимы нюхания, такие как схема производительности, Processlist или MySQL Proxy, чтобы обманывать запросы MySQL. Вы можете включить оповещения, чтобы знать статус вашего сервера MySQL в любое время.