Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
собссно запрос из хибера. не спрашивайте почему такой. вот такой вот да:

select * from (select * from tablename where fieldValue = ? order by field desc) where rownum <=?

прилетает скажем, миллион записей мы забираем только 50к.

если я выкину субселект и сделаю в одну линию - это как то меняет ситуацию или оракл сам умный и все сделает максимально эффективно и за него переживать не нужно?
25 июн 20, 12:23    [22157126]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1495
Зачем гадать?

Метрики производительности можно наблюдать.

Планы запросов - тоже.

Про алгоритм CBO почитать тоже можно.

К сообщению приложен файл. Размер - 34Kb
25 июн 20, 12:44    [22157142]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1495
C 12-й версии постраничный просмотр (pagination) стал возможен прямо в запросе.
25 июн 20, 12:51    [22157147]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
сорян, я не специалист в оракле потому и пришел. мне кажется это неэффективно. интерпретировать то что сверху не очень могу. и да, там не 12я версия.

Сообщение было отредактировано: 25 июн 20, 13:23
25 июн 20, 13:25    [22157179]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
Alexander A. Sak
Member

Откуда: Омск
Сообщений: 1095
andreykaT

если я выкину субселект и сделаю в одну линию - это как то меняет ситуацию или оракл сам умный и все сделает максимально эффективно и за него переживать не нужно?


Это кардинально поменяет ситуацию, так как rownum определяется до сортировки. Правда, возможно, в новых версиях что-то и поменялось.
25 июн 20, 13:28    [22157181]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18065
andreykaT
select * from (select * from tablename where fieldValue = ? order by field desc) where rownum <=?

прилетает скажем, миллион записей мы забираем только 50к.


На самом деле тема не сложная, но и не тривиальная.
И вопрос тут не в форме написания, sql - язык декларативный.
В приведенном примере вопрос в сортировке.
Оптимизатор на основе декларации построит программу действий (план запроса), исходя из собственных возможностей и представлений о прекрасном.
Но попробуйте представить, как бы Вы лично решили данную задачу - отобрать Х записей, расположенных в определенном порядке.
Праальна, для начала надо отсортировать.
Отсортировать ВСЁ множество.
Просто потому, что пока не будет просмотрены (и пристроены) все фактические значения ключа сортировки - невозможно сказать, нет ли среди не просмотренных ключа, который встанет перед уже отобранными и, таким образом, сместит весь отсчет.
Обойти это нельзя.
Но иногда можно заменить предварительной статической сортировкой, а именно - построить индекс по ключу сортировки.
В этом случае субд сможет рассмотреть вариант замены сортировки на обход индекса, что для решаемой задачи бывает весьма выгодно.
Разумеется, это сработает при соблюдении некоторых условий, и одно из не вполне очевидных - установка NLS_SORT при сортировке по символьному атрибуту.
25 июн 20, 13:32    [22157184]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
количество байт я вижу отличается т.е. все же оно выдирает всё в память а потом оттуда откусывает кусок
25 июн 20, 13:33    [22157185]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
andrey_anonymous
andreykaT
select * from (select * from tablename where fieldValue = ? order by field desc) where rownum <=?

прилетает скажем, миллион записей мы забираем только 50к.


На самом деле тема не сложная, но и не тривиальная.
И вопрос тут не в форме написания, sql - язык декларативный.
В приведенном примере вопрос в сортировке.
Оптимизатор на основе декларации построит программу действий (план запроса), исходя из собственных возможностей и представлений о прекрасном.
Но попробуйте представить, как бы Вы лично решили данную задачу - отобрать Х записей, расположенных в определенном порядке.
Праальна, для начала надо отсортировать.
Отсортировать ВСЁ множество.
Просто потому, что пока не будет просмотрены (и пристроены) все фактические значения ключа сортировки - невозможно сказать, нет ли среди не просмотренных ключа, который встанет перед уже отобранными и, таким образом, сместит весь отсчет.
Обойти это нельзя.
Но иногда можно заменить предварительной статической сортировкой, а именно - построить индекс по ключу сортировки.
В этом случае субд сможет рассмотреть вариант замены сортировки на обход индекса, что для решаемой задачи бывает весьма выгодно.
Разумеется, это сработает при соблюдении некоторых условий, и одно из не вполне очевидных - установка NLS_SORT при сортировке по символьному атрибуту.


да. понял. точно. сортировку то я и не принял во внимание. но может на уровне базы оно как то хитро оптимизируется. я в этом смысле.
это как компилляторы которые хвостовую рекурсию спокойно раскладывают в обычный фор и никаких стэк оверфлоу не происходит. я про подобного рода оптимизации.
25 июн 20, 13:34    [22157188]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18065
dmdmdm
C 12-й версии постраничный просмотр (pagination) стал возможен прямо в запросе.

Не надо путать этот эрзац с реальным pagination, который возможен только посредством управления курсором.
Недостатки метода те же, что и у rownum:
1. Выполнение отдельного запроса на каждую страницу - требуется очень хорошо продумать доступ к данным и поддерживать его, особенно если запрос сложнее тривиального однотабличного.
2. Неконсистентность результата при работе в умолчательном режиме изоляции транзакций.
25 июн 20, 13:36    [22157189]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
в общем, я так понимаю ботлнек там сортировка а дальше уже не важно?
25 июн 20, 14:15    [22157205]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2468
andreykaT
в общем, я так понимаю ботлнек там сортировка а дальше уже не важно?


почему не важно?

за счет стопкей это очень "маленькая" сортировка (10 строк всегото)

....
stax
25 июн 20, 15:19    [22157240]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
не понимаю как физику обмануть?
25 июн 20, 15:28    [22157251]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2468
andreykaT
не понимаю как физику обмануть?

зачем обманывать, "сортировать" надо не миллион, а всего 10 записей

....
stax
25 июн 20, 15:49    [22157272]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
Elic
Member [заблокирован]

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29861
Stax
зачем обманывать, "сортировать" надо не миллион, а всего 10 записей
Да? На какой странице?
25 июн 20, 15:52    [22157274]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
Elic
Stax
зачем обманывать, "сортировать" надо не миллион, а всего 10 записей
Да? На какой странице?

на всех. может он про мерджсорт ))) ну короче, если у нас одна таблица и есть ордеринг то ускорять особо нечего... а индексы?
25 июн 20, 16:35    [22157310]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
Elic
Member [заблокирован]

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29861
andreykaT
на всех. может он про мерджсорт ))) ну короче, если у нас одна таблица и есть ордеринг то ускорять особо нечего... а индексы?
Ты уверен, что в теме? Чтобы, тем более, говорить за других.
25 июн 20, 16:40    [22157312]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18065
andreykaT
если у нас одна таблица и есть ордеринг то ускорять особо нечего... а индексы?

andrey_anonymous
...иногда можно заменить предварительной статической сортировкой, а именно - построить индекс по ключу сортировки.
В этом случае субд сможет рассмотреть вариант замены сортировки на обход индекса, что для решаемой задачи бывает весьма выгодно.
Разумеется, это сработает при соблюдении некоторых условий, и одно из не вполне очевидных - установка NLS_SORT при сортировке по символьному атрибуту.
25 июн 20, 17:35    [22157359]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
Elic
andreykaT
на всех. может он про мерджсорт ))) ну короче, если у нас одна таблица и есть ордеринг то ускорять особо нечего... а индексы?
Ты уверен, что в теме? Чтобы, тем более, говорить за других.

нет. потому и пришел сюда и показал запрос и задал вопрос - есть в нем что оптимизировать или особо нет?
25 июн 20, 18:15    [22157394]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
если вкратце, то у меня сейчас беда в том что есть две базы в двух разных местах с одной и той же структурой таблиц (как я в это верю) в одной базе запрос на миллионе записей работает ок. ну для такого объема ок. во второй приложение падает по таймауту в базу запрос ушел назад не пришел. ))) может дольше ждать надо было.

так или иначе, у мен янет доступа к базам и все что я могу - для начала,предположить и об этом сказать. а дальше уже думать. - мучить дбо-шников или думать что с кодом делать.
25 июн 20, 18:18    [22157398]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18065
andreykaT
все что я могу - для начала,предположить и об этом сказать. а дальше уже думать. - мучить дбо-шников или думать что с кодом делать.

Если нет доступа, то нет и спроса.
С положительным эффектом оптимизацией занимается тот, у кого есть:
- доступ
- квалификация

Отсутствие любой из этих позиций превращает оптимизацию в... ну, помните, наверное -
"движение есть, прогресса - нет"



Сообщение было отредактировано: 25 июн 20, 19:24
25 июн 20, 19:20    [22157436]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
ты настоящий программист. ответ и верный и совершенно бесполезный одновременно.
26 июн 20, 09:43    [22157607]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2468
andreykaT
если вкратце

если вкратце
сравнить планы на обеих базах

дальше уже решать как поступать

проблему можно озвучить ДБА, вдрух кто-то на карантине мается и сглянется

зы
по сегоднишним меркам "миллион" записей ето не так уж и много
.....
stax
26 июн 20, 10:02    [22157620]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1495
andreykaT
ты настоящий программист


Мы тут все такие.

Сразу было сказано - вы пытаетесь гадать на кофейной гуще.
26 июн 20, 10:10    [22157626]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
Stax
andreykaT
если вкратце

если вкратце
сравнить планы на обеих базах

дальше уже решать как поступать

проблему можно озвучить ДБА, вдрух кто-то на карантине мается и сглянется

зы
по сегоднишним меркам "миллион" записей ето не так уж и много
.....
stax

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

суть моего вопроса была в общем то в том что есть запрос и есть ли у него какой то потенциал к улучшению. если нет то - таска скидывается на дба. если есть то ковыряю я.

Сообщение было отредактировано: 26 июн 20, 10:33
26 июн 20, 10:35    [22157644]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2468
andreykaT,

так просто "ставить" индексы рисково

order by field desc) where rownum <=? мало что можно улучшить
добавить хинт, и то обсуждаемо

Вы версию оракля не озвучили

разве что в не древних версиях синтаксис "улучшился"
select ... order by xxx fetch first n rows only

а вот почему поведение на второй базе не работает (медленно), надо найти причину

зы
статистики на базах могут сильно отличаться (напр на второй утарела/не собиралась)

....
stax

Сообщение было отредактировано: 26 июн 20, 11:07
26 июн 20, 11:07    [22157670]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
PuM256
Member

Откуда:
Сообщений: 35
andreykaT
если я выкину субселект и сделаю в одну линию - это как то меняет ситуацию или оракл сам умный и все сделает максимально эффективно и за него переживать не нужно?

Поменяет ситуацию очень сильно - будешь получать неверные результаты, так как сначала отработает where rownum <, а уже потом order by.
26 июн 20, 14:30    [22157825]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2869
в общем, беда-беда. в таблице оказалось 250 миллионов записей.
29 июн 20, 12:50    [22159000]     Ответить | Цитировать Сообщить модератору
 Re: Хибер генерит запрос.. вопрос. Перформанс страдает?  [new]
PuM256
Member

Откуда:
Сообщений: 35
Ну и что? Если погадать на кофейной гуще, то индекс по tablename(fieldvalue, field desc) будет замечательно работать. А если нет, то надо смотреть планы (причём до того, как начинать заниматься гаданием). Можно с gather_plan_statistics + ALLSTATS.
29 июн 20, 16:24    [22159154]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Oracle Ответить