|
|
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
есть достаточно сложная система таблиц, она самописная. С наследованием, аггрегацией, фильтрами и т.п. Всё это дело написано на Java. Берёт данные из таблиц базы данных и перелопачивает их всякими маппингами. То есть, в общем виде настройка над базой данных Существует возможность из гуя формировать новые вью таблиц: настраивать фильтры, сортировки, делать байндинги и т.п. Проблема в том, что некоторые вью при этом будут долго очень работать. К примеру, если там сортировка по расчитываемому столбцу, который при своём подсчёте затрагивает другие и в таблице под миллион значений будет очень долго считаться. Поскольку сводится всё к SQL запросу, необходимо оценить его время. Подкиньте пожалуйста статей по этому вопросу. Я так понимаю, сводится всё к определению количества статей участвующих в запросе и умножении скорости джоина на произведение записей в нём участвующих. Проблема, во первых в том, что джоинов будет несколько и количество записей выданных каждым неизвестно заранее, во вторых скорость джоина тоже не есть известная величина(поправьте меня, если я ошибаюсь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 12:24 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
Поскольку сводится всё к SQL запросу, необходимо оценить его время. Подкиньте пожалуйста статей по этому вопросу.Готового или тривиального решения нет и быть не может. Наймите специалиста (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 12:43 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
VovkaMorkovka, Отдельные СУБД умеют показывать ожидаемый план запроса, со всякими числовыми метриками (в т.ч. затрачиваемыми ресурсами), не выполняя сам запрос. Разбирайте план, суммируйте метрики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 12:56 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
VovkaMorkovkaПоскольку сводится всё к SQL запросу, необходимо оценить его время. Подкиньте пожалуйста статей по этому вопросу. Без всяких статей это в общем случае нереально - слишком много непредсказуемо влияющих факторов. Хотя если на сортировке миллиона строк у вас какие-то проблемы, я бы посмотрел на предмет выкинуть всю эту настройку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 15:03 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинОтдельные СУБД умеют показывать ожидаемый план запроса, со всякими числовыми метриками (в т.ч. затрачиваемыми ресурсами), не выполняя сам запрос. Только вот связь этих метрик с реальностью... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 15:04 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
softwarer, Ну человеку, как понимаю, нужна качественная оценка "дохрена/не дохрена" - для этого метрики дадут вполне приличное приближение. Определить, будет ли выполняться запрос полторы секунды или две - да, таким способом получится вряд ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 15:36 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинНу человеку, как понимаю, нужна качественная оценка "дохрена/не дохрена" - для этого метрики дадут вполне приличное приближение. Определить, будет ли выполняться запрос полторы секунды или две - да, таким способом получится вряд ли. Если бы так... этим способом не факт что удастся определить, будет ли запрос выполняться полторы секунды или тридцать. Им, скорее всего, удастся сказать "вот это - точно до хрена, просто до хренища", но вот "это - точно быстро" сказать будет уже.. не слишком надёжно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 16:01 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
> Отдельные СУБД умеют показывать ожидаемый план запроса, со всякими > числовыми метриками (в т.ч. затрачиваемыми ресурсами), не выполняя сам > запрос. Тем не менее, ко времени выполнения запроса это всё имеет мало отношения. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 17:08 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Мне нужно буквально следующее: оценить будет ли запрос выполняться скажем до десяти минут, или больше. Я ещё знаю, что наибольшее количество времени идёт на подсчёт агрегаций. Т.е. если агрегаций нету, мне это дело по умолчанию подходит. Можно запускать план, но различие его с реальностью бывает иной раз на несколько порядков. Отсюда вопрос: как вообще делают, когда нужно решить сабжевую задачу: предупредить пользователя, что его данные будут скорее всего считаться очень долго? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 17:16 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
VovkaMorkovkaОтсюда вопрос: как вообще делают, когда нужно решить сабжевую задачу: предупредить пользователя, что его данные будут скорее всего считаться очень долго? Имхо наиболее логично - вывести ему некий индикатор прогресса и дать возможность прервать процесс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 17:19 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
softwarerИмхо наиболее логично - вывести ему некий индикатор прогресса и дать возможность прервать процесс. Ты понимаешь, пользователь в нашей системе может создавать свои dataview и не догадываться при этом, что то что он наворотил будет тормозить. Моя задача - сказать пользователю, что чувак, смотри - ты накрутил такого, что тут без поллитры база данных не разберётся. Чтобы прервать процесс достаточно вообще закрыть датавью в нашей системе и через некоторое время он прервётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 18:01 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
VovkaMorkovkaТы понимаешь, пользователь в нашей системе может создавать свои dataview и не догадываться при этом, что то что он наворотил будет тормозить. Понимаю. Ничего, после третьего-четвёртого раза догадается, что исключение - это когда то, что он наворотил, не будет тормозить. VovkaMorkovkaМоя задача - сказать пользователю, что чувак, смотри - ты накрутил такого, что тут без поллитры база данных не разберётся. "В течение последних пяти минут система выполнила 3% необходимой работы по запросу. Продолжать? (Д/Н)" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 18:21 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
У нас такая задача решалась путем взаимодействия программиста и пользователя. То бишь программист создавал "рыбу" вьюхи (говорил с пользователем, смотрел в план, прикидывал возможные фильтры и т.п.), а пользователь затем шлепал из "рыбы", то что ему надо (то же самое с перламутровыми пуговицами). Причем вопрос был даже не в производительности, а в корректности запроса, пользователь получал то что он хочет, а не то что он говорит. К счастью принципиально новых запросов было немного. Программист же мог догадатся и материализовать вьюху, чтобы ускорить подсчет агрегатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 18:23 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
SERG1257, У нас новых запросов может быть очень много, точнее говоря неограниченное количество - пользователь сам делает себе вью, в этом изюминка системы. А нельзя ли как то прикинуть "сложность" или вложенность запроса в отрыве от количества данных? Т.е. такую величину ввести, чтобы учитывала количество джоинов, уровни сложности, уровни подзапросов и т.п. И уже относительно неё судить. Мол чувак, ты тут наваял очень сложный запрос и на большом количестве данных у тебя будут проблемы. Есть какие нибудь критерии такого рода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 18:39 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
VovkaMorkovkaпользователь сам делает себе вью, в этом изюминка системы. Хм. Вы опоздали лет на двадцать. VovkaMorkovkaТ.е. такую величину ввести, чтобы учитывала количество джоинов, уровни сложности, уровни подзапросов и т.п. И уже относительно неё судить. dbms_random.value даст сравнимый уровень точности, а const("будет тормозить") так и вовсе окажется ближе к истине. Ещё раз, медленно и печально: скорость запроса вполне может стать в десять раз меньше (или больше) в зависимости от текущего состояния буферного кэша. Скорость запроса вполне может упасть в сто раз всего лишь оттого, что админ грохнул внешний ключ. На чёрт возьми production системах периодически закрепляют планы запросов из-за того, что иначе по тем или иным причинам те же самые запросы вдруг начинают тормозить вообще без каких-либо ковыряний. В общем, угадывать время запроса - занятие малоперспективное. Как правило, лучшее сочетание цена/качество в этой задаче даёт логика типа if есть это, это или это, then точно труба else есть шанс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 18:53 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
MasterZiv Тем не менее, ко времени выполнения запроса это всё имеет мало отношения. Ко времени выполнения запроса это (ожидаемый план выполнения в целом и его численные характеристики в частности) имеет максимально возможное отношение. Любые другие оценки будут хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 18:59 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, А как бы этот план из попугаев перевести в реальные минуты с секундами? Вот мне нужно понять, будет ли запрос выполняться "долго" или "не очень". Как это сделать? Дело в том, что план этот не понятно в каких единицах, соответственно не ясно что с ним сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 19:18 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
VovkaMorkovkaКот Матроскин, А как бы этот план из попугаев перевести в реальные минуты с секундами? Это невозможно - в этом согласились все ответившие Вам. Реальные минуты с секундами зависят не только от запроса, но и от текущего состояния сервера - загруженности другими запросами, состояния кэша и т.п. Вы можете попытаться (только попытаться - потому что в каком-то проценте случаев оценка все равно будет сбоить) при помощи этих цифр отличить "хороший" запрос от "плохого" - это все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 19:25 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
VovkaMorkovka, А как бы этот план из попугаев перевести в реальные минуты с секундами? Сами напросились: 1) Получить план запроса с оценкой трудоемкости каждого шага. Предполагаем, что данные в таблицах сильно не изменятся. 2) Смоделировать стоимость по времени единицы каждого шага в плане на будущей конфигурации/занятости кэшей и будущей загруженности процессоров, дисков. 3) Разобрать план по шагам и перемножить затраты в моделях полученных на шаге 2 с оценкой трудоемкости каждого шага полученного плана на шаге 1. Все. Пункты 1 и 3 сделать еще как-то можно. А вот пункт 2 может весело плавать +- 100 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 11:47 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
On 26.05.2014 18:16, VovkaMorkovka wrote: > Мне нужно буквально следующее: оценить будет ли запрос выполняться > скажем до десяти минут, или больше. Я ещё знаю, что наибольшее > количество времени идёт на подсчёт агрегаций. Т.е. если агрегаций нету, > мне это дело по умолчанию подходит. Это невозможно, не выполняя запрос. А выполняя запрос -- задача тривиальна (не так, как кажется на первый взгляд, но всё же). > Можно запускать план, но различие его с реальностью бывает иной раз на > несколько порядков. Отсюда вопрос: как вообще делают, когда нужно решить > сабжевую задачу: предупредить пользователя, что его данные будут скорее > всего считаться очень долго? Никак не делают. В лучшем случае -- выдают общее предупреждение всегда, в любом случае. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 12:16 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
On 26.05.2014 18:19, softwarer wrote: > Имхо наиболее логично - вывести ему некий индикатор прогресса и дать > возможность прервать процесс. И то, и другое -- весьма непросто. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 12:17 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
On 26.05.2014 19:01, VovkaMorkovka wrote: > > Ты понимаешь, пользователь в нашей системе может создавать свои dataview > и не догадываться при этом, что то что он наворотил будет тормозить. Такого просто не должно быть в нормально спроектированной системе. Моя > задача - сказать пользователю, что чувак, смотри - ты накрутил такого, > что тут без поллитры база данных не разберётся. Эта задача нерешаема. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 12:18 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 12:25 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 26.05.2014 19:01, VovkaMorkovka wrote: > Ты понимаешь, пользователь в нашей системе может создавать свои dataview > и не догадываться при этом, что то что он наворотил будет тормозить. Такого просто не должно быть в нормально спроектированной системе. Моя > задача - сказать пользователю, что чувак, смотри - ты накрутил такого, > что тут без поллитры база данных не разберётся. Эта задача нерешаема. Программисты обожают создавать системы, где запросы к базе генерятся на лету по желаниям пользователей. Суровые админы их люто за то ненавидят. Если процесс генерации запроса написан програмистом, то какую-то логику туда можно встроить - самое примитивное определяя каунтом число записей в таблицах, которые включены во запрос. Если логика построенния понимает, где "главная таблица фактов", а где попутно нанизываемые на нее справочники, то заключения можно делать определеннее. В одной системе, наапример, при отборе сделок стоит простое предупреждение, если не ограничить временной диапазон сделки или сделать его больше чем одна неделя "Вы уверены, что хотите включить в набор все сделки, соверешенные с ... по ... " Но надежного, универсального метода нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 12:25 |
|
||
|
Оценка длительности выполнения SQL запроса
|
|||
|---|---|---|---|
|
#18+
On 26.05.2014 19:59, Кот Матроскин wrote: > Ко времени выполнения запроса это (ожидаемый план выполнения в целом и > его численные характеристики в частности) имеет *максимально возможное * > отношение. Любые другие оценки будут хуже. Ещё раз, ко ВРЕМЕНИ выполнения запроса это (план) не имеет никакого отношения. Начать можно с того, что СУБД работает в многопользовательском режиме и запрос там выполняться будет почти наверняка не один. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 12:28 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=28&tid=1540871]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 159ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...