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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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