Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 with materialize меняет данные  [new]
chidoriami
Member

Откуда: москва
Сообщений: 19
Коллеги, привет!
помогите, плиз, мой мир сходит с ума. оракл ведет себя странно (вроде)

есть супер длинный запрос вида
with 
  sprint as (select --+ materialize ...)
, businessfields as (select...)
, issue as (select --+ materialize ...)
, issuefieldhistory as (select --+ materialize ...)
, sprintstartfields as (select ...)
, sprintendfields as (select ...)
, hierissue as (select ...)
, finalissue as (select ...)
, groupedview as (select ...)
, main_query as (select ...)
select epic_id, task_id from main_query where epic_id = 283200 --and task_id = 321651
;


в таком виде запрос выдает (и это правильно)
EPIC_ID	TASK_ID
283200 321651
283200 321651
283200 321651

мне понадобилась группировка, и внезапно результат получился
EPIC_ID	TASK_ID
283200 283200

я начала смотреть и выяснила, что если хоть что-то материализуется, то результат практически непредсказуем
значение второго поля (task_id) становится то 321651, то 283200
(причем некоторые запросы используются несколько раз, т.е. по умолчанию они материализуются)

иногда на результат влияет наличие фильтра на task_id
без этого фильтра поле может выглядеть как 321651
добавляю фильтр - ничего не возвращается

опытным путем выяснилось, что только если всем подзапросам поставить --+ inline - все ок!!

но это, во-первых, грустно, потому что материализация тут была бы полезна.

во-вторых, это что за?
объясните, плиз, или дайте ссылку на доку, если кто знает, в чем дело
31 янв 19, 21:34    [21799173]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
chidoriami
Member

Откуда: москва
Сообщений: 19
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
31 янв 19, 21:36    [21799175]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
xtender
Member

Откуда: Мск
Сообщений: 5065
chidoriami,

план надо смотреть. Скорее всего, где-то неправильно трансформация срабатывает.
31 янв 19, 21:49    [21799180]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
chidoriami
Member

Откуда: москва
Сообщений: 19
я смотрела планы, они в целом совпадали, кроме материализации
(сейчас не могу посмотреть, т. к. ушла с работы)
завтра посмотрю ещё раз.
только как план запроса может повлиять на значение столбца?
31 янв 19, 22:07    [21799190]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
-2-
Member

Откуда:
Сообщений: 14504
chidoriami
ушла с работы
Не получается запрос - сразу увольняться!
31 янв 19, 22:34    [21799202]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
xtender
Member

Откуда: Мск
Сообщений: 5065
chidoriami
я смотрела планы, они в целом совпадали, кроме материализации
(сейчас не могу посмотреть, т. к. ушла с работы)
завтра посмотрю ещё раз.
только как план запроса может повлиять на значение столбца?
transitive closure +join/group-by elimination например. Вообще надо в идеале трассу 10053 или хотя бы dbms_sql2.expand_sql_text
31 янв 19, 22:55    [21799211]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
Да ну
Member

Откуда: Первопрестольная
Сообщений: 214
chidoriami
только как план запроса может повлиять на значение столбца?

"where rownum..." или другая недетерминированность в подзапросах встречается?
1 фев 19, 01:05    [21799239]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
RA\/EN
Member

Откуда:
Сообщений: 3649
chidoriami
я начала смотреть и выяснила, что если хоть что-то материализуется, то результат практически непредсказуем
...
опытным путем выяснилось, что только если всем подзапросам поставить --+ inline - все ок!!
...
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

Классический косяк оракла новой версии: "сложный запрос" + "materialize" = "непредсказуемый результат запроса".
Выхода два - либо самостоятельно нащупать фиктивное действие (дополнительная группировка, материализация), которое не исключит оптимизатор и оно исправит ситуацию, либо "материализовывать" вручную в отдельные таблицы.
Есть еще третий - обновить оракл, что-то версия старовата (не знаю, какая уж сейчас - последний раз как раз на 12.2.0.1 боролся с этими багами). Вдруг починили.
1 фев 19, 07:55    [21799277]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
ma1tus
Member

Откуда:
Сообщений: 666
RA\/EN
версия старовата (не знаю, какая уж сейчас
+ OFF: вот уж действительно...
Картинка с другого сайта.
1 фев 19, 08:49    [21799294]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
chidoriami
Member

Откуда: москва
Сообщений: 19
RA\/EN
Классический косяк оракла новой версии: "сложный запрос" + "materialize" = "непредсказуемый результат запроса".
Выхода два - либо самостоятельно нащупать фиктивное действие (дополнительная группировка, материализация), которое не исключит оптимизатор и оно исправит ситуацию, либо "материализовывать" вручную в отдельные таблицы.
Есть еще третий - обновить оракл, что-то версия старовата (не знаю, какая уж сейчас - последний раз как раз на 12.2.0.1 боролся с этими багами). Вдруг починили.

спасибо!
буду щупать или оставлю inline
1 фев 19, 09:12    [21799309]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
chidoriami
Member

Откуда: москва
Сообщений: 19
Да ну
"where rownum..." или другая недетерминированность в подзапросах встречается?

не, я первым делом проверила запрос на всякие глупости
нормальный запрос, сложная логика, но в плане соединений там всё прозрачно и просто
1 фев 19, 09:32    [21799319]     Ответить | Цитировать Сообщить модератору
 Re: with materialize меняет данные  [new]
xtender
Member

Откуда: Мск
Сообщений: 5065
chidoriami,

сравни оригинальный запрос с dbms_utility.expand_sql_text(твой запрос), возможно уже это покажет ошибку трансформации.
1 фев 19, 15:04    [21799784]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить