Иногда в докладах/статьях о оптимизации производительности СУБД описание предлагаемой методики/средства начинается с события -"мы заметили резкое увеличение времени выполнения запроса/запросов и резкое увеличение количества прочитанных блоков разделяемой области". Далее следует описание процесса выявления ресурсоёмкого запроса, с целью его оптимизации.
На этапе разработки данных сценарий вполне себя оправдывает . Нагрузка на СУБД - детерминирована, характер нагрузки определён и описан, данные постоянны. При условии адекватности команды разработки, даже удастся действительно оптимизировать запрос.
Но.
В процессе промышленной эксплуатации ситуация меняется принципиально и кардинально.
Нагрузка на СУБД меняется в самых широких диапазонах , и носит случайный характер.
Характер, объем и статистическая картина данных очень изменчива .
Влияние инфраструктуры в общем случае - непредсказуемо.
Входные данные запросов меняются в самых широких пределах.
Изменить код запроса нет никакой возможности, как минимум - очень затруднено .
Сопровождение системы со стороны разработчиков как правило уже отсутствует.
И это порождает существенные проблемы:
1) А как определить , что производительность конкретного запроса деградировала ?
2) Что является метрикой производительности запроса ? Максимальное время , среднее время , минимальное , стандартная ошибка ?
3) Как оценить производительность запроса на разных входных данных ? В одном случае запрос обрабатывает X строк и выполняется за время x, в другом случае запрос отрабатывает Y строк и выполняется за время y. Можно ли сказать о деградации производительности выполнения (y > x) , если Y существенно больше X ?
4) Как оценить производительность запроса при разной нагрузке на инфраструктуру и информационную систему.
Таким образом , проблему можно сформулировать примерно так :
Можно собрать историю показателей выполнения запроса(группы запросов) за сколь угодно необходимый период времени. Инструментов более чем достаточно.
Как проанализировать собранные данные ?
Какие ожидания от результата анализа?
