Оптимизация MySQL запросов с помощью Neor Profile SQL

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

image

В специальном бесплатным профайлере Neor Profile SQL операции по оптимизации представляют собой простой процесс по настройке вашего приложения и сбора SQL запросов от него. Инструмент работает на всех широко используемых системах (Windows, Mac OS X и Linux). Поддерживает MySQL и MariaDB.

Neor Profile SQL работает как своего рода прокси и, следовательно, вам нужен компьютер, где вы можете открыть порты или в сети, в зависимости от требований. От вашего приложения требуется всего лишь изменить стандартный порт MySQL 3306 на установленный, обычно 4040. Остальное не требует пояснений, интерфейс прост в использовании.

В дополнение следует добавить основной функционал продукта:
— Подсчет всех запросов с детализацией по времени, коду и размеру
— Общая статистика строк полученных и отосланных в СУБД
— Поиск медленных запросов
— Сохранение сессии для последующего сравнения результатов
— Встроенная команда Explain любого запроса
— Программа бесплатная
Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 35
  • +5
    Бесплатный и кроссплатформенный — отличное сочетание для вроде бы неплохого инструмента.
    • +2
      Разве что кроссплатформенность на линукс официально заканчивается Ubuntu и Debian (распространяется в deb). Исходников не дают, так что пользователям Gentoo, Archlinux и др. не debian-based придётся немного по извращаться.
      • 0
        Ну у Debian-а пальма первенства по простоте поднятия работающего chroot-окружения с ним. Для работы debootstrap нужен только шелл и wget.
    • 0
      А веб-интерфейса у него нет? Чтобы сразу на сервере отлаживать?
      • 0
        такой возможности на данный момент нет, вся привязка к GUI
        • +1
          Цепляться к серверу через TCP/IP, не? Хотя возможность TCP/IP over SSH не помешала бы.
        • 0
          Нагруженный проект находится на сервере, а это приложение, как я понял, для отладки в процессе разработки, на локальной машине?!
          Может знаете(подскажете) консольное решение? С Веб-интерфейсом?

          upd.
          про веб-интерфейс понятно ))
          • 0
            Согласен с вами полностью, тоже было бы интересно глянуть на инструмент работающий на самом сервере(с нагруженным проектом) с любым интерфейсом (будь то веб-интерфейс или же иной).
            У автора хотелось бы узнать, как вы смотрите на разделение приложения на front и back-енды (один — в качестве службы сбора информации на сервере, второй — обработка и визуализация данных на стороне клиента)?
            • 0
              Такой вариант уже предлагали реализовать, но проблема в том что приложение для пользователей сильно усложнится в настройке и понимании. К тому же аналоги именно с работой только на веб-сервере найти можно. Но работать они будут через консоль. Нам хотелось реализовать именно простое GUI приложение для девелопера, а не сисадмина.
              • 0
                Проблемы могут проявляться только под нагрузкой на боевой системе.
                • 0
                  Посмотрите как это сделано у, например, deluge. Простой пользователь и не догадывается о разделении на сервис и морду к нему и о том, что они могут работать на разных машинах.Ну и учесть, что аудитория у вас всё же не домохозяйки.
                • 0
                  Так работает AppDynamics. Только она далеко не бесплатна…
                • 0
                  На сервере можно использовать анализатор логов pt-query-digest Если нужна по нему помощь могу подсказать. А вот если найдете веб интерфейс, поделитесь
                  • 0
                    Так может статейку напишите? Я думаю, не только мне интересно будет!
                    • 0
                      Статейку… хм никогда не пробовал писат статьей, попробую наберется ли у меня информации на статью.
                      • 0
                        Объем статьи не так важен, главное содержание.
                        • 0
                          Поискал по хабру и нашел статью от прошлого года habrahabr.ru/post/151560/ Если найду чем можно ее дополнить постараюсь дополнить
                  • 0
                    Можно прикрутить github.com/box/Anemometer/blob/master/README.md
                  • 0
                    Мне как-то percona tools и анализ slow/bin логов ближе… Если не бин логи, можно tcp dump снимать и опять же в перкону отправлять. Но спасибо за ссылку.

                    UPD: Прикольно с разницей в 3 минуты написали с zoxa
                    • 0
                      :) А не подскажете программу, чтобы можно было сравнивать результаты pt-query-digest с разных дней. Или может какой нибудь график на их основе построить можно?
                      • 0
                        я думаю это 15 минут на любом языке программирования. Запускаем по крону, парсим нужные результаты и выводим через любое плоттинг приложение
                    • 0
                      А у нас для percona исторически сложившийся велосипед из анализа SHOW GLOBAL STATUS и SHOW SLAVE STATUS на серверах.
                      Всё это дело центализованно собирается, аггрегируется и строятся симпатичные графики по времени/машинам/портам реплик и т.п. По типам запросов (Com_insert и т.п.), Connections/Threads_created/Slow_queries и т.д.
                      Плюс на уровне кода по каждому запросу проверяется время работы, и в случае злоупотреблений, логгируются все подробности: запрос, параметры, кто обратился, стек, «параметры среды» и т.п.
                      • +1
                        Начиная с версии 5.6 такие тулзы станут ненужными.

                        В субботу svetasmirnova проводила в рамках DevConf мастеркласс, как раз посвященный профайлингу с использованием PERFORMANCE_SCHEMA. В отличие от 5.5, в этой базе появилась куча новых таблиц, и информация, полезная не только разработчикам самого движка БД, но и обычному программисту/ДБА.

                        Я так понял, что это глобальная версия того, что раньше включалось по set profiling (но работало только для текущей сессии) в виде такой же абстракции базы данных, что и information schema, и позволяет с помощью SQL запросов в реальном времени получать информацию. в частности, к примеру, топ самых медленных запросов с ид сессии и хостом клиента, а так же море всякой другой информации. Собираюсь в ближайшее время пощупать локально.
                        • 0
                          Расскажите пожалуйста, будет очень интересно. Ждем статьи.
                          • 0
                            То что вы говорите есть уже в последних релизах 5.5.
                            Запускается через команду PROFILE. Но дело в том что это не полноценный инструмент, а скорее первичное направление где пощупать на незнакомом сервере. В общем то даже в тяжеловестном Oracle встроенных функций для детального анализа не найти. Приходится использовать сторонние инструменты помогающие проводить полный анализ.
                            • 0
                              Как раз об этом и речь. Что этот прокси (как и show profile) покажет только для тех запросов, которые шли через него.
                              А новая PERFORMANCE_SCHEMA — глобальная для всего сервера, представляя из себя куда более мощный и гибкий show processlist и глобальный show profile.
                              В любом случае спасибо за за информацию — инструменты полезны любые, и чем их больше, тем лучше они становятся.
                              • 0
                                А не подскажете где можно почитать по подробней? Сам то я использую Percona Server 5.5 и там вроде performance_schema есть как вы и говорите. Но на боевом сервере как то не хочется играть особо.
                                Самое интересно, какая дополнительная нагрузка на сервер ложится из-за этого?
                                • 0
                                  Боюсь, пока негде. Сам поискал — но не нашел. Надо либо самому копать, либо ждать, когда кто-нибудь напишет :)

                                  Эта схема действительно появилась в 5.5, но только в 5.6 она стала полезной конечному разработчику. Количество таблиц увеличилось в 3 раза, а информация теперь в куда более доступной форме. Правда, речь про версию Оракла.
                                  Я сейчас на память не очень помню, но в презентации фигурировала значительно более информативная версия show processlist (на базе запроса к этой новой схеме) и возможности онлайн-профайлинга.

                                  С производительностью, боюсь, проблемы будут. Света говорила даже про какой-то скандал, связанный как раз с этой фичей, и с тем, что она повышает нагрузку на сервер при неправильном использовании. Тоже ещё предмет для будущих исследований и выработки рекомендаций.
                          • 0
                            Я некоторое время назад пользовал MySQL Proxy.
                            Сейчас уже не упомню, насколько глубоко, однако для профайлинга, логирования запросов, которые идут уже непосредственно на сервер базы — самое оно было. Скрипты для тех или иных операций пишутся на Lua, что довольно гибко.
                            Тем не менее, прекрасный инструмент, спасибо.
                            • 0
                              А как быть, если я подключаюсь к удалённой БД. Могу я как-то профилировать запросы?
                              • 0
                                Удаленное профилирование возможно если соотвествующе настроено ваше приложение, MYSQL сервер и Neor Profile SQL. Важно понимать что инструмент работает как прокси — прокладка между СУБД и вашим приложением.
                                • 0
                                  Получилось сделать так: в настройках Neor Profile SQL указываем параметры для подключения к удалённому серверу, а в настройках нашего приложения, в качестве сервера БД указываем: «localhost:4040» и всё. Включаем профилирование и работаем.
                                • 0
                                  Интересный инструмент, но, к сожалению, не умеет работать с запросами, в которых база данных прописана. Неправильно их парсит.
                                  Пример:
                                  UPDATE `maidb`.`sessions` SET sid='783286272',last_used=1372427031 WHERE uid=1024

                                  В статистику при таком запросе maidb попадает в раздел «Таблицы».
                                  • 0
                                    не сразу разобрался как он работает, 4040 порт и прочее… но прочитав тут всего одну фразу все понял. Все быстро настроил. Думаю на вашем сайте не хватает простой картинки объяснения «Важно понимать что инструмент работает как прокси — прокладка между СУБД и вашим приложением.», ибо после захода на сайт, и даже чтения FAQ это было не очень понятно. До сих пор пользовался Jet profiler, он подключается напрямую к базе и не нужно никаких прокси трюков, но она слишком дорогая.

                                    П.С. соответственно, что бы не менять настройки в приложении, поменял порт базы на 4040, в самой Neor Profile прописал 3306. и вот они сессии! ))
                                    • 0
                                      Он не отображает PDO запросы без подстановки параметров и даже не показывает количество полученных строк. Или я неправильно его готовлю?

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