Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / predicate pushdown и olap-функции / 10 сообщений из 10, страница 1 из 1
20.04.2016, 18:28
    #39220545
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
predicate pushdown и olap-функции
Положим,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
drop TABLE T1@

CREATE TABLE T1(
  x integer,
  y integer,
  z integer,
  filler char(250)
)@

insert into T1
with
  xxx(n) as (
    values 1
    union all
    select n+1
    from xxx
    where n+1<=100
  )
select x1.n, x2.n, x3.n, x1.n||' '||x2.n||' '||x3.n
from xxx x1, xxx x2, xxx x3@

create index t1_y on t1(y)@

runstats on table t1 with distribution and detailed indexes all@


и теперь
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with
  xxx as (
    select x,y,z,filler,
      row_number()over(partition by x,y order by z) rn#
    from t1
  )  
select *
from xxx
where y=1313 -- или y in (select чего-нибудь откуда-нибудь), например


и
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with
  xxx as (
    select x,y,z,filler,
      row_number()over(partition by x,y order by z) rn#
    from t1
    where y=1313
  )  
select *
from xxx


по сути эквивалентны, потому что Y находится в списке partition by,
но, по крайней мере, 10.5.1 Express-C на 9-м уровне оптимизации это не понимает. (Если убрать row_number()over(partition by x,y order by z), то всё ОК).

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

Было бы замечательно, если кто-нибудь написал ibm-ерам об этом.

Впрочем, конечно, надо проверить, не исправили ли они уже.
...
Рейтинг: 0 / 0
20.04.2016, 18:33
    #39220551
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
predicate pushdown и olap-функции
http://comp.databases.ibm-db2.narkive.com/HNcCF8FV/predicate-pushdown-on-views-with-olap
Забавно, они уже 7 лет назад об этом знали.
...
Рейтинг: 0 / 0
20.04.2016, 20:39
    #39220642
Hunterik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
predicate pushdown и olap-функции
PMR? =)
...
Рейтинг: 0 / 0
20.04.2016, 21:22
    #39220659
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
predicate pushdown и olap-функции
Я счастливый пользователь DB2 Express-C, не более.

Кстати, я сейчас скачал ещё раз инсталляшки - да, они уже до fp7 обновлены.
...
Рейтинг: 0 / 0
20.04.2016, 22:12
    #39220680
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
predicate pushdown и olap-функции
Да, поторопился, этот пример уже на fp5 сработал нормально.
...
Рейтинг: 0 / 0
20.04.2016, 22:21
    #39220687
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
predicate pushdown и olap-функции
А что с LEO ( https://www.google.ru/search?q=leo db2 optimizer), мне кто-нибудь может объяснить? Я у Оракля похожие вещи вижу (всякие там cardinality feedback, адаптивные курсоры и адаптивные планы), а у DB2 нет.
...
Рейтинг: 0 / 0
21.04.2016, 19:18
    #39221728
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
predicate pushdown и olap-функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
10.5.1

1                        TARGET_ID   OP_ID       ROWS                   TOTAL_COST             IO_COST                CPU_COST                 BUFFERS              9                                                 
------------------------ ----------- ----------- ---------------------- ---------------------- ---------------------- ------------------------ -------------------- --------------------------------------------------
RETURN                             0           1                      -       15243,2548828125        8476,0000000000   +9,44661299200000E+009                 8475 -                                                 
 FILTER                            1           2       10000,0000000000       15243,2548828125        8476,0000000000   +9,44661299200000E+009                 8475 RESID="(Q3.Y = 1313)"                             
  TBSCAN                           2           3     1000000,0000000000       15054,7900390625        8476,0000000000   +8,11660953600000E+009                 8475 -                                                 
   SORT                            3           4     1000000,0000000000       15019,3642578125        8476,0000000000   +7,86660812800000E+009                16951 -                                                 
    TBSCAN                         4           5     1000000,0000000000       14156,0761718750        8476,0000000000   +1,77438668800000E+009                 8476 -                                                 
     VVM.T1                        5          -1     1000000,0000000000                      -                      -                        -                    - -                                                 

10.5.7

1                        TARGET_ID   OP_ID       ROWS                   TOTAL_COST             IO_COST                CPU_COST                 BUFFERS              9                                                 
------------------------ ----------- ----------- ---------------------- ---------------------- ---------------------- ------------------------ -------------------- --------------------------------------------------
RETURN                             0           1                      -         192,2265014648          87,4899978637   +8,94022000000000E+007                    0 -                                                 
 TBSCAN                            1           2       10000,0000000000         189,6244049072          87,4899978637   +8,05879840000000E+007                    0 -                                                 
  SORT                             2           3       10000,0000000000         188,8859100341          87,4899978637   +7,80864480000000E+007                   88 -                                                 
   FETCH                           3           4       10000,0000000000         179,6964111328          87,4899978637   +4,69583200000000E+007                   88 SARG="(Q1.Y = 1313)"                              
    RIDSCN                         4           5       10000,0000000000          33,2815818786           2,7300000190   +3,28383600000000E+007                    3 -                                                 
     SORT                          5           6       10000,0000000000          33,2812004089           2,7300000190   +3,28370720000000E+007                    3 -                                                 
      IXSCAN                       6           7       10000,0000000000          28,7066955566           2,7300000190   +1,73415740000000E+007                    3 START="(Q1.Y = 1313)", STOP="(Q1.Y = 1313)"       
       VVM.T1_Y(VVM.T1)            7          -1     1000000,0000000000                      -                      -                        -                    - -                                                 
    VVM.T1                         4          -1     1000000,0000000000                      -                      -                        -                    - -                                                 

Да, с этим примером справляется. С моими реальными запросами - нет.
...
Рейтинг: 0 / 0
22.04.2016, 09:32
    #39222068
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
predicate pushdown и olap-функции
Предикат у меня на 10.5.7 не проталкивается внутрь xxx, когда
1. есть row_number()over(...), но в качестве T1 из примера стоит соединение из нескольких таблиц, и эти три колонки (x,y,z) в partition by взяты из трёх разных таблиц; и если убрать этот row_number()over(...), проталкивается.
2. нет(!) row_number()over(...), но внутри xxx (кроме джойна на кучу "настоящих" таблиц) прибавляется леводжойн на view, который состоит из values.
...
Рейтинг: 0 / 0
22.04.2016, 20:56
    #39222885
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
predicate pushdown и olap-функции
Victor MetelitsaПредикат у меня на 10.5.7 не проталкивается внутрь xxx, когда
1. есть row_number()over(...), но в качестве T1 из примера стоит соединение из нескольких таблиц, и эти три колонки (x,y,z) в partition by взяты из трёх разных таблиц; и если убрать этот row_number()over(...), проталкивается.
2. нет(!) row_number()over(...), но внутри xxx (кроме джойна на кучу "настоящих" таблиц) прибавляется леводжойн на view, который состоит из values.
Такое впечатление, что push down предикатов вообще не совсем честно реализован (не cost based, а с кучей if ... then ... else ...).
Была ситуация, когда "<something> = f(?)", где f() - примитивная deterministic inlined функция - не проталкивался, а "<something> = ?" - вполне (не проталкивался под UNION с JOINом в некоторой комбинации).
Похожая же картина была при "return ..." vs "begin atomic return ... end".
Что-то по PMR'у поправили, а для чего-то требовался редизайн оптимизатора (=> Design Change Request, или как он там стал называться), так как-то и заглохло.
...
Рейтинг: 0 / 0
22.04.2016, 21:41
    #39222909
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
predicate pushdown и olap-функции
Мне непонятно вообще, как такое могло случиться. Ну да, я понимаю - набор костылей, это как обычно (причём в Oracle один из таких костылей на корню отсекал выполнение where 1=0, а тут я такого пока не наблюдал). Но всё-таки. Проталкивание предиката само по себе должно быть не cost-based-операция, а чисто механическое переписывание. А сравнение cost'ов должно идти отдельно. Посчитали cost до проталкивания, механически протолкнули, посчитали cost после проталкивания, выбрали меньшее. Зачем ему при этом переписывании вообще различать случаи, является ли T1 соединением или приджойнена ли view as values?
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / predicate pushdown и olap-функции / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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