EXPLAIN SELECT ...

Shasoft

Новичок
EXPLAIN SELECT ...

EXPLAIN SELECT выдает информацию о том, как будет выполняться запрос и позволяет оптимизировать скорость работы этого запроса путем создания нужных индексов.

А нет ли каких-нибудь библиотеки/компоненты, которой можно скормить N-запросов, а на выходе получить рекомендации типа:
для ускорения работы запросов создайте индексы
в таблице AAAA
1. по полям f1, f2
1. по полям f3, f4
в таблице BBBB
1. по полям f1, f7
1. по полям f4, f6

и т.п.

Т.е. идея такая: делаю сайт. Запускаю его в тестовом режиме и сохраняю все запросы к БД. А через месяц все запросы скармливаю этому чудо скрипту и он мне дает рекомендации по оптимизации. Типа автоматическая оптимизация.
 

Gas

может по одной?
Слышал о такой тулзе - http://www.mysql.com/products/enterprise/monitor.html, сам не пользовал. В доке не заметил чтоб performance advisor анализировал explain'ы, но может такая возможность и есть. Если цены для тебя не кусаются - уточни интересующие моменты у сапорта.
 

zerkms

TDD infected
Команда форума
включи лог медленных запросов, время медленного запроса поставь на 1 (или меньше, патчи). потом посмотри через некоторое время
 

zerkms

TDD infected
Команда форума
Gas
но зато верный способ :) не особо верю в существование волшебных утилей "сделай это и будет чудо"
 

Shasoft

Новичок
Может укажите, где почитать про эти "медленные запросы"?
А то первый раз слышу про них.

P.S. Гугль указывать не надо, туда сейчас и сам пойду. Но может вы знаете ссылку на какую-то хорошую статью по этой теме.
 

Shasoft

Новичок
Насколько я понял, для правильной работы всех указанных методов требуются права на сам MySQL сервер?
 

zerkms

TDD infected
Команда форума
да. включение лога медленных запросов происходит в конфиге или строке запуска.
в принципе - его можно запустить и на локальной девелоперской тачке, предварительно забив базу большим объёмом данных - самые медленные запросы выловишь.
 

Shasoft

Новичок
Смысл анализа как раз в том, чтобы анализировать реальные запросы. Т.е. те, что происходят на реальном сайте.

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

Gas

может по одной?
Смысл анализа как раз в том, чтобы анализировать реальные запросы.
а запросы на тестовом сервере, при объёме тестовых данных аналогичном реальному - они какие, виртуальные ?
 

zerkms

TDD infected
Команда форума
Gas
попробую предположить - он имел ввиду, что под нагрузкой некоторые запросы могут начать тормозить сильнее, чем при спокойном тестировании локальной, хоть и большой, базы
 

Shasoft

Новичок
Нет. Я имел ввиду, что на сервере уже будут лазить пользователи и будет статистика вида: какой запрос чаще вызывается.
Т.е. если есть совсем тормозной запрос, который вызывался всего 1 раз в месяц и менее тормозной, который вызывался в день по 1000 раз, то стоит уделить внимание именно второму.

P.S.Хотя, если задуматься, то в конечном итоге всё-равно надо все запросы оптимизировать.
 

Gas

может по одной?
zerkms
есть и такое, но эти проблемы уже обычно возникают не из-за "а тут индекса не хватает", а когда на сервере куча IO операций или локи какие-то возникают при каком-то уровне конкурентности и просто анализ лога медленных запросов может ничего не дать. Чтоб разрулить эти проблемы - нужно всю систему в целом рассматривать. Не уверен что ТС сейчас это нужно, для начала обычно хватает теста на dev-сервере.

Shasoft, в общем, если есть только возможность выявлять тормозные запросы через свой класс - то так и делай, это лучше чем ничего, а то я в софистику ударился :)
 

Shasoft

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

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

zerkms

TDD infected
Команда форума
что есть компоненты, которые могут автоматически по запросам указывать (или сразу и создавать) индексы для повышение производительности.
я тоже хочу "компоненты", которые автоматически по ТЗ пишут код :)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Через неделю админ запускает скрипт анализа, который ему выдает, что желательно создать такие-то индексы, так как таких-то запросов было много и можно улучшить скорость работы с помощью индексов. Чтобы админу мозг не напрягать над каждым запросом.
У ентерпрайзового оракла есть почти такая фича. :) Не индексы (может и их ищет, но у нас давно уже не в индексы затык ;) ), конечно, зато ищет, в какую точку приходится упор, и подбирает рекомендуемое значение.
 
Сверху