Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Оценка длительности выполнения SQL запроса / 25 сообщений из 33, страница 1 из 2
26.05.2014, 12:24
    #38651896
VovkaMorkovka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
есть достаточно сложная система таблиц, она самописная. С наследованием, аггрегацией, фильтрами и т.п. Всё это дело написано на Java. Берёт данные из таблиц базы данных и перелопачивает их всякими маппингами. То есть, в общем виде настройка над базой данных
Существует возможность из гуя формировать новые вью таблиц: настраивать фильтры, сортировки, делать байндинги и т.п. Проблема в том, что некоторые вью при этом будут долго очень работать. К примеру, если там сортировка по расчитываемому столбцу, который при своём подсчёте затрагивает другие и в таблице под миллион значений будет очень долго считаться.

Поскольку сводится всё к SQL запросу, необходимо оценить его время. Подкиньте пожалуйста статей по этому вопросу.
Я так понимаю, сводится всё к определению количества статей участвующих в запросе и умножении скорости джоина на произведение записей в нём участвующих. Проблема, во первых в том, что джоинов будет несколько и количество записей выданных каждым неизвестно заранее, во вторых скорость джоина тоже не есть известная величина(поправьте меня, если я ошибаюсь)
...
Рейтинг: 0 / 0
26.05.2014, 12:43
    #38651920
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
Поскольку сводится всё к SQL запросу, необходимо оценить его время. Подкиньте пожалуйста статей по этому вопросу.Готового или тривиального решения нет и быть не может.
Наймите специалиста (с)
...
Рейтинг: 0 / 0
26.05.2014, 12:56
    #38651940
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
VovkaMorkovka,

Отдельные СУБД умеют показывать ожидаемый план запроса, со всякими числовыми метриками (в т.ч. затрачиваемыми ресурсами), не выполняя сам запрос.
Разбирайте план, суммируйте метрики.
...
Рейтинг: 0 / 0
26.05.2014, 15:03
    #38652140
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
VovkaMorkovkaПоскольку сводится всё к SQL запросу, необходимо оценить его время. Подкиньте пожалуйста статей по этому вопросу.
Без всяких статей это в общем случае нереально - слишком много непредсказуемо влияющих факторов. Хотя если на сортировке миллиона строк у вас какие-то проблемы, я бы посмотрел на предмет выкинуть всю эту настройку.
...
Рейтинг: 0 / 0
26.05.2014, 15:04
    #38652145
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
Кот МатроскинОтдельные СУБД умеют показывать ожидаемый план запроса, со всякими числовыми метриками (в т.ч. затрачиваемыми ресурсами), не выполняя сам запрос.
Только вот связь этих метрик с реальностью...
...
Рейтинг: 0 / 0
26.05.2014, 15:36
    #38652200
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
softwarer,

Ну человеку, как понимаю, нужна качественная оценка "дохрена/не дохрена" - для этого метрики дадут вполне приличное приближение. Определить, будет ли выполняться запрос полторы секунды или две - да, таким способом получится вряд ли.
...
Рейтинг: 0 / 0
26.05.2014, 16:01
    #38652228
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
Кот МатроскинНу человеку, как понимаю, нужна качественная оценка "дохрена/не дохрена" - для этого метрики дадут вполне приличное приближение. Определить, будет ли выполняться запрос полторы секунды или две - да, таким способом получится вряд ли.
Если бы так... этим способом не факт что удастся определить, будет ли запрос выполняться полторы секунды или тридцать. Им, скорее всего, удастся сказать "вот это - точно до хрена, просто до хренища", но вот "это - точно быстро" сказать будет уже.. не слишком надёжно :)
...
Рейтинг: 0 / 0
26.05.2014, 17:08
    #38652336
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
> Отдельные СУБД умеют показывать ожидаемый план запроса, со всякими
> числовыми метриками (в т.ч. затрачиваемыми ресурсами), не выполняя сам
> запрос.

Тем не менее, ко времени выполнения запроса это всё имеет мало отношения.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
26.05.2014, 17:16
    #38652348
VovkaMorkovka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
MasterZiv,

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

Можно запускать план, но различие его с реальностью бывает иной раз на несколько порядков. Отсюда вопрос: как вообще делают, когда нужно решить сабжевую задачу: предупредить пользователя, что его данные будут скорее всего считаться очень долго?
...
Рейтинг: 0 / 0
26.05.2014, 17:19
    #38652351
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
VovkaMorkovkaОтсюда вопрос: как вообще делают, когда нужно решить сабжевую задачу: предупредить пользователя, что его данные будут скорее всего считаться очень долго?
Имхо наиболее логично - вывести ему некий индикатор прогресса и дать возможность прервать процесс.
...
Рейтинг: 0 / 0
26.05.2014, 18:01
    #38652408
VovkaMorkovka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
softwarerИмхо наиболее логично - вывести ему некий индикатор прогресса и дать возможность прервать процесс.
Ты понимаешь, пользователь в нашей системе может создавать свои dataview и не догадываться при этом, что то что он наворотил будет тормозить. Моя задача - сказать пользователю, что чувак, смотри - ты накрутил такого, что тут без поллитры база данных не разберётся. Чтобы прервать процесс достаточно вообще закрыть датавью в нашей системе и через некоторое время он прервётся.
...
Рейтинг: 0 / 0
26.05.2014, 18:21
    #38652423
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
VovkaMorkovkaТы понимаешь, пользователь в нашей системе может создавать свои dataview и не догадываться при этом, что то что он наворотил будет тормозить.
Понимаю. Ничего, после третьего-четвёртого раза догадается, что исключение - это когда то, что он наворотил, не будет тормозить.

VovkaMorkovkaМоя задача - сказать пользователю, что чувак, смотри - ты накрутил такого, что тут без поллитры база данных не разберётся.
"В течение последних пяти минут система выполнила 3% необходимой работы по запросу. Продолжать? (Д/Н)"
...
Рейтинг: 0 / 0
26.05.2014, 18:23
    #38652425
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
У нас такая задача решалась путем взаимодействия программиста и пользователя.
То бишь программист создавал "рыбу" вьюхи (говорил с пользователем, смотрел в план, прикидывал возможные фильтры и т.п.), а пользователь затем шлепал из "рыбы", то что ему надо (то же самое с перламутровыми пуговицами).
Причем вопрос был даже не в производительности, а в корректности запроса, пользователь получал то что он хочет, а не то что он говорит.
К счастью принципиально новых запросов было немного.
Программист же мог догадатся и материализовать вьюху, чтобы ускорить подсчет агрегатов.
...
Рейтинг: 0 / 0
26.05.2014, 18:39
    #38652443
VovkaMorkovka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
SERG1257,

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

А нельзя ли как то прикинуть "сложность" или вложенность запроса в отрыве от количества данных? Т.е. такую величину ввести, чтобы учитывала количество джоинов, уровни сложности, уровни подзапросов и т.п. И уже относительно неё судить. Мол чувак, ты тут наваял очень сложный запрос и на большом количестве данных у тебя будут проблемы.

Есть какие нибудь критерии такого рода?
...
Рейтинг: 0 / 0
26.05.2014, 18:53
    #38652459
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
VovkaMorkovkaпользователь сам делает себе вью, в этом изюминка системы.
Хм. Вы опоздали лет на двадцать.

VovkaMorkovkaТ.е. такую величину ввести, чтобы учитывала количество джоинов, уровни сложности, уровни подзапросов и т.п. И уже относительно неё судить.
dbms_random.value даст сравнимый уровень точности, а const("будет тормозить") так и вовсе окажется ближе к истине.

Ещё раз, медленно и печально: скорость запроса вполне может стать в десять раз меньше (или больше) в зависимости от текущего состояния буферного кэша. Скорость запроса вполне может упасть в сто раз всего лишь оттого, что админ грохнул внешний ключ. На чёрт возьми production системах периодически закрепляют планы запросов из-за того, что иначе по тем или иным причинам те же самые запросы вдруг начинают тормозить вообще без каких-либо ковыряний. В общем, угадывать время запроса - занятие малоперспективное. Как правило, лучшее сочетание цена/качество в этой задаче даёт логика типа if есть это, это или это, then точно труба else есть шанс.
...
Рейтинг: 0 / 0
26.05.2014, 18:59
    #38652466
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
MasterZiv
Тем не менее, ко времени выполнения запроса это всё имеет мало отношения.


Ко времени выполнения запроса это (ожидаемый план выполнения в целом и его численные характеристики в частности) имеет максимально возможное отношение. Любые другие оценки будут хуже.
...
Рейтинг: 0 / 0
26.05.2014, 19:18
    #38652482
VovkaMorkovka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
Кот Матроскин,

А как бы этот план из попугаев перевести в реальные минуты с секундами? Вот мне нужно понять, будет ли запрос выполняться "долго" или "не очень". Как это сделать? Дело в том, что план этот не понятно в каких единицах, соответственно не ясно что с ним сделать.
...
Рейтинг: 0 / 0
26.05.2014, 19:25
    #38652487
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
VovkaMorkovkaКот Матроскин,

А как бы этот план из попугаев перевести в реальные минуты с секундами?

Это невозможно - в этом согласились все ответившие Вам. Реальные минуты с секундами зависят не только от запроса, но и от текущего состояния сервера - загруженности другими запросами, состояния кэша и т.п.
Вы можете попытаться (только попытаться - потому что в каком-то проценте случаев оценка все равно будет сбоить) при помощи этих цифр отличить "хороший" запрос от "плохого" - это все.
...
Рейтинг: 0 / 0
27.05.2014, 11:47
    #38652990
ДаВот
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
VovkaMorkovka, А как бы этот план из попугаев перевести в реальные минуты с секундами? Сами напросились:
1) Получить план запроса с оценкой трудоемкости каждого шага. Предполагаем, что данные в таблицах сильно не изменятся.
2) Смоделировать стоимость по времени единицы каждого шага в плане на будущей конфигурации/занятости кэшей и будущей загруженности процессоров, дисков.
3) Разобрать план по шагам и перемножить затраты в моделях полученных на шаге 2 с оценкой трудоемкости каждого шага полученного плана на шаге 1.
Все. Пункты 1 и 3 сделать еще как-то можно. А вот пункт 2 может весело плавать +- 100 раз.
...
Рейтинг: 0 / 0
28.05.2014, 12:16
    #38654309
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
On 26.05.2014 18:16, VovkaMorkovka wrote:

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

Это невозможно, не выполняя запрос.
А выполняя запрос -- задача тривиальна (не так, как кажется на первый
взгляд, но всё же).

> Можно запускать план, но различие его с реальностью бывает иной раз на
> несколько порядков. Отсюда вопрос: как вообще делают, когда нужно решить
> сабжевую задачу: предупредить пользователя, что его данные будут скорее
> всего считаться очень долго?

Никак не делают. В лучшем случае -- выдают общее предупреждение всегда,
в любом случае.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.05.2014, 12:17
    #38654311
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
On 26.05.2014 18:19, softwarer wrote:

> Имхо наиболее логично - вывести ему некий индикатор прогресса и дать
> возможность прервать процесс.

И то, и другое -- весьма непросто.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.05.2014, 12:18
    #38654313
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
On 26.05.2014 19:01, VovkaMorkovka wrote:

>
> Ты понимаешь, пользователь в нашей системе может создавать свои dataview
> и не догадываться при этом, что то что он наворотил будет тормозить.

Такого просто не должно быть в нормально спроектированной системе.

Моя
> задача - сказать пользователю, что чувак, смотри - ты накрутил такого,
> что тут без поллитры база данных не разберётся.


Эта задача нерешаема.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.05.2014, 12:25
    #38654323
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
On 26.05.2014 19:39, VovkaMorkovka wrote:

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

Это хреновая система.

Ну и: чтобы ПРИМЕРНО такое сделать, например, в Virtuoso Unuversal
Server (это СУБД такая) реализована специальная фича -- anytime query.
К запросу задаётся (опционально, естественно) время, за которое он
должен выдать хоть какие-то данные. Потом на уровне процессора запросов
это время отсекается и когда оно кончается, собранные на это время
данные выдаются (если собрались, естественно), но выдаются они не все,
естественно, и не полностью в "целостном" виде (group by, order by etc)

Проект открытый, посмотреть можно например тут
http://lod.openlinksw.com/sparql

или в dbpedia.


> Есть какие нибудь критерии такого рода?

Нет.
и это бессмысленно.
Например, на любом сложнейшем запросе при пустой таблице стоимость будет
ровно 0.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.05.2014, 12:25
    #38654324
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
MasterZivOn 26.05.2014 19:01, VovkaMorkovka wrote:

> Ты понимаешь, пользователь в нашей системе может создавать свои dataview
> и не догадываться при этом, что то что он наворотил будет тормозить.

Такого просто не должно быть в нормально спроектированной системе.

Моя
> задача - сказать пользователю, что чувак, смотри - ты накрутил такого,
> что тут без поллитры база данных не разберётся.

Эта задача нерешаема.

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

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

Но надежного, универсального метода нету.
...
Рейтинг: 0 / 0
28.05.2014, 12:28
    #38654329
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оценка длительности выполнения SQL запроса
On 26.05.2014 19:59, Кот Матроскин wrote:

> Ко времени выполнения запроса это (ожидаемый план выполнения в целом и
> его численные характеристики в частности) имеет *максимально возможное *
> отношение. Любые другие оценки будут хуже.

Ещё раз, ко ВРЕМЕНИ выполнения запроса это (план) не имеет никакого
отношения.

Начать можно с того, что СУБД работает в многопользовательском режиме и
запрос там выполняться будет почти наверняка не один.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Оценка длительности выполнения SQL запроса / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]