Пользователь
0,0
рейтинг
17 июня 2013 в 15:35

Разработка → Оптимизация MySQL запросов с помощью Neor Profile SQL recovery mode

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

image

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

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

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

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (34)

  • +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. и вот они сессии! ))

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