powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
25 сообщений из 46, страница 1 из 2
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492299
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Зарегистрировано открытие": в природе таки есть запросы, на препаринг которых ФБ может убить несколько минут :-)
И вот один из них:
death-on-preparing + unable to kill via MON$ tables :-)
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
out nul;
set stat on;
set plan on;

with a as (
    select rf.rdb$field_id fid, rr.rdb$relation_id rid, rr.rdb$relation_name rnm
    from rdb$relation_fields rf join rdb$relations rr on rf.rdb$relation_name=rr.rdb$relation_name
)
,b as (
    select fid, rnm, rid, iif(rid is null, 1, r) r
    from (--f
        select fid, rnm, rid,
                iif(lag(fid) over(partition by rid order by fid) is not null
                    and lag(r) over(partition by rid order by fid) >= r
                    , r + 1, r) r
        from (--e
            select fid, rnm, rid,
                    iif(lag(fid) over(partition by rid order by fid) is not null
                        and lag(r) over(partition by rid order by fid) >= r
                        , r + 1, r) r
            from (--d
                select fid, rnm, rid,
                        iif(lag(fid) over(partition by rid order by fid) is not null
                            and lag(r) over(partition by rid order by fid) >= r
                            , r + 1, r) r
                from (--c
                    select fid, rnm, rid,
                            iif(lag(fid) over(partition by rid order by fid) is not null
                                and lag(r) over(partition by rid order by fid) >= r
                           ,r + 1, r) r
                    from (--b
                        select fid, rnm, rid,
                                iif( lag(fid) over(partition by rid order by fid) is not null
                                      and lag(r) over(partition by rid order by fid) >= r
                                     ,r + 1, r) r
                        from (
                                select a.*, 1 r
                                from a
                              ) a
                        ) b
                  ) c
              ) d
          ) e
      ) f
)
-- select max(r) r from b group by fid having max(r) < 6; -- ok

,c
as (
    select fid, rnm, rid, iif(rid is null, 1, r) r
    from (--f
        select fid, rnm, rid,
                iif(lag(fid) over(partition by rid order by fid) is not null
                     and lag(r) over(partition by rid order by fid) >= r
                    , r + 1, r) r
        from (--e
            select fid, rnm, rid,
                    iif(lag(fid) over(partition by rid order by fid) is not null
                         and lag(r) over(partition by rid order by fid) >= r
                        , r + 1, r) r
            from (--d
                select fid, rnm, rid,
                        iif(lag(fid) over(partition by rid order by fid) is not null
                             and lag(r) over(partition by rid order by fid) >= r
                            , r + 1, r) r
                from (--c
                    select fid, rnm, rid,
                            iif(lag(fid) over(partition by rid order by fid) is not null
                                 and lag(r) over(partition by rid order by fid) >= r
                           ,r + 1, r) r
                    from (--b
                        select fid, rnm, rid,
                                iif( lag(fid) over(partition by rid order by fid) is not null
                                      and lag(r) over(partition by rid order by fid) >= r
                                     ,r + 1, r) r
                        from (
                                select fid, rnm, rid, max(r) over(partition by fid) r from b
                              ) a
                        ) b
                  ) c
              ) d
          ) e
      ) f
)
-- select * from c -- ok

,d
as (
    select fid, rnm, rid, iif(rid is null, 1, r) r
    from (--f
        select fid, rnm, rid,
                iif( lag(fid) over(partition by rid order by fid) is not null
                     and lag(r) over(partition by rid order by fid) >= r
                    , r + 1, r) r
        from (--e
            select fid, rnm, rid,
                    iif( lag(fid) over(partition by rid order by fid) is not null
                         and lag(r) over(partition by rid order by fid) >= r
                        , r + 1, r) r
            from (--d
                select fid, rnm, rid,
                        iif( lag(fid) over(partition by rid order by fid) is not null
                             and lag(r) over(partition by rid order by fid) >= r
                            , r + 1, r) r
                from (--c
                    select fid, rnm, rid,
                            iif( lag(fid) over(partition by rid order by fid) is not null
                                 and lag(r) over(partition by rid order by fid) >= r
                           ,r + 1, r) r
                    from (--b
                        select fid, rnm, rid,
                                iif( lag(fid) over(partition by rid order by fid) is not null
                                      and lag(r) over(partition by rid order by fid) >= r
                                     ,r + 1, r) r
                        from (
                                select fid, rnm, rid, max(r) over(partition by fid) r from c
                              ) a
                        ) b
                  ) c
              ) d
          ) e
      ) f
)
select * from d
;
out;

Trace:
prepare = 5 min
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
18:46:17.294 2013-12-06T18:46:16.2150 (10568:01491908) TRACE_FINI
18:46:17.294 	SESSION_1  
18:46:17.294 	
 18:46:17.294 
-- между этими строками неплохо бы вкрячить что-то типа: PREPARE_STATEMENT _START 
 18:51:06.653  2013-12-06T18:51:05.8090 (10568:01492A10) PREPARE_STATEMENT
-- А предыдущую строку неплохо бы обозвать PREPARE_STATEMENT _FINISH 
18:51:06.653 	empty30 (ATT_951349, SYSDBA:NONE, NONE, TCPv4:127.0.0.1)
18:51:06.653 	C:\1Install\fb30\isql.exe:18216
18:51:06.653 		(TRA_355076, CONCURRENCY | WAIT | READ_WRITE)
18:51:06.653 
18:51:06.653 Statement 16:
18:51:06.653 -------------------------------------------------------------------------------
18:51:06.653 with a as (
18:51:06.653     select rf.rdb$field_id fid, rr.rdb$relation_id rid, rr.rdb$relation_name rnm
18:51:06.653     from rdb$relation_fields rf join rdb$relations rr on rf.rdb$relation_name=rr.rdb$relation_name
18:51:06.653 )
18:51:06.653 ,b as (
18:51:06.653     select fid, rnm, rid, iif(rid is null, 1, r) r
18:51:06.653     from (--f
18:51:06.653         select fid, rnm, rid,
18:51:06.653                 iif(lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                     and lag(r) over(partition by rid order by fid) >= r
18:51:06.653                     , r + 1, r) r
18:51:06.653         from (--e
18:51:06.653             select fid, rnm, rid,
18:51:06.653                     iif(lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                         and lag(r) over(partition by rid order by fid) >= r
18:51:06.653                         , r + 1, r) r
18:51:06.653             from (--d
18:51:06.653                 select fid, rnm, rid,
18:51:06.653                         iif(lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                             and lag(r) over(partition by rid order by fid) >= r
18:51:06.653                             , r + 1, r) r
18:51:06.653                 from (--c
18:51:06.653                     select fid, rnm, rid,
18:51:06.653                             iif(lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                                 and lag(r) over(partition by rid order by fid) >= r
18:51:06.653                            ,r + 1, r) r
18:51:06.653                     from (--b
18:51:06.653                         select fid, rnm, rid,
18:51:06.653                                 iif( lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                                       and lag(r) over(partition by rid order by fid) >= r
18:51:06.653                                      ,r + 1, r) r
18:51:06.653                         from (
18:51:06.653                                 select a.*, 1 r
18:51:06.653                                 from a
18:51:06.653                               ) a
18:51:06.653                         ) b
18:51:06.653                   ) c
18:51:06.653               ) d
18:51:06.653           ) e
18:51:06.653       ) f
18:51:06.653 )
18:51:06.653 -- select max(r) r from b group by fid having max(r) < 6; -- ok
18:51:06.653 
18:51:06.653 ,c
18:51:06.653 as (
18:51:06.653     select fid, rnm, rid, iif(rid is null, 1, r) r
18:51:06.653     from (--f
18:51:06.653         select fid, rnm, rid,
18:51:06.653                 iif(lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                      and lag(r) over(partition by rid order by fid) >= r
18:51:06.653                     , r + 1, r) r
18:51:06.653         from (--e
18:51:06.653             select fid, rnm, rid,
18:51:06.653                     iif(lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                          and lag(r) over(partition by rid order by fid) >= r
18:51:06.653                         , r + 1, r) r
18:51:06.653             from (--d
18:51:06.653                 select fid, rnm, rid,
18:51:06.653                         iif(lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                              and lag(r) over(partition by rid order by fid) >= r
18:51:06.653                             , r + 1, r) r
18:51:06.653                 from (--c
18:51:06.653                     select fid, rnm, rid,
18:51:06.653                             iif(lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                                  and lag(r) over(partition by rid order by fid) >= r
18:51:06.653                            ,r + 1, r) r
18:51:06.653                     from (--b
18:51:06.653                         select fid, rnm, rid,
18:51:06.653                                 iif( lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                                       and lag(r) over(partition by rid order by fid) >= r
18:51:06.653                                      ,r + 1, r) r
18:51:06.653                         from (
18:51:06.653                                 select fid, rnm, rid, max(r) over(partition by fid) r from b
18:51:06.653                               ) a
18:51:06.653                         ) b
18:51:06.653                   ) c
18:51:06.653               ) d
18:51:06.653           ) e
18:51:06.653       ) f
18:51:06.653 )
18:51:06.653 -- select * from c -- ok
18:51:06.653 
18:51:06.653 ,d
18:51:06.653 as (
18:51:06.653     select fid, rnm, rid, iif(rid is null, 1, r) r
18:51:06.653     from (--f
18:51:06.653         select fid, rnm, rid,
18:51:06.653                 iif( lag(fid) over(partition by rid order by fid) is not null
18:51:06.653                      and lag(r) over(partition by rid order by fid) >= r
18:51:06.669                     , r + 1, r) r
18:51:06.669         from (--e
18:51:06.669             select fid, rnm, rid,
18:51:06.669                     iif( lag(fid) over(partition by rid order by fid) is not null
18:51:06.669                          and lag(r) over(partition by rid order by fid) >= r
18:51:06.669                         , r + 1, r) r
18:51:06.669             from (--d
18:51:06.669                 select fid, rnm, rid,
18:51:06.669                         iif( lag(fid) over(partition by rid order by fid) is not null
18:51:06.669                              and lag(r) over(partition by rid order by fid) >= r
18:51:06.669                             , r + 1, r) r
18:51:06.669                 from (--c
18:51:06.669                     select fid, rnm, rid,
18:51:06.669                             iif( lag(fid) over(partition by rid order by fid) is not null
18:51:06.669                                  and lag(r) over(partition by rid order by fid) >= r
18:51:06.669                            ,r + 1, r) r
18:51:06.669                     from (--b
18:51:06.669                         select fid, rnm, rid,
18:51:06.669                                 iif( lag(fid) over(partition by rid order by fid) is not null
18:51:06.669                                       and lag(r) over(partition by rid order by fid) >= r
18:51:06.669                                      ,r + 1, r) r
18:51:06.669                         from (
18:51:06.669                                 select fid, rnm, rid, max(r) over(partition by fid) r from c
18:51:06.669                               ) a
18:51:06.669                         ) b
18:51:06.669                   ) c
18:51:06.669               ) d
18:51:06.669           ) e
18:51:06.669       ) f
18:51:06.669 )
18:51:06.669 select * from d
18:51:06.669 
18:51:06.669 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18:51:06.669 PLAN JOIN (D F E D C B A C F E D C B A B F E D C B A A RR NATURAL, D F E D C B A C F E D C B A B F E D C B A A RF INDEX (RDB$INDEX_4))
18:51:06.669   299536  ms
18:51:06.669 

Trace - execute :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
18:51:06.715 PLAN JOIN (D F E D C B A C F E D C B A B F E D C B A A RR NATURAL, D F E D C B A C F E D C B A B F E D C B A A RF INDEX (RDB$INDEX_4))
18:51:06.715 432 records fetched
18:51:06.715      737  ms, 15 read(s), 1077 fetch(es)
18:51:06.715 
18:51:06.715 Table                             Natural     Index    Update    Insert    Delete   Backout     Purge   Expunge
18:51:06.715 ***************************************************************************************************************
18:51:06.715 RDB$RELATION_FIELDS                             432                                                            
18:51:06.715 RDB$RELATIONS                          52      


ЗЫ-1.
Сопоставление замеров времени и напихивания over()-вызовов однозначно говорят, что начиная с какого-то момента добавление одного over()-вызова приводит чуть ли не к... удвоению времени парсинга(!!)

ЗЫ-2. И самое главное: пока он занят препарированием, в другом окне нельзя выполнить даже вот это:
Код: plaintext
SQL> commit; select * from mon$statements where mon$attachment_id<>current_connection;
- Firebird просто НЕ ОТВЕЧАЕТ на этот запрос. Вообще ничего
. Коннект, ес-сно, делаю по tcp.

ЗЫ-3. Только не спрашивайте меня, какой идиот придумал "прототип" этого запроса (это был не я )).
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492306
Фотография peter64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жесть!
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492315
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шоб ты был живой-здоровый!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492321
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийшоб ты был живой-здоровый!гы... а чё там у тебя, случилось что-то ?..
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492323
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийшоб ты был живой-здоровый!++
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492325
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я понимаю, время там тратится на сравнение derived fields, каждый с выражением охеренной глубины вложенности
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492327
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrвремя там тратится на сравнение derived fields, каждый с выражением охеренной глубины вложенностину и пусть себе сравнивает, меряет глубину...
почему я не могу при этом даже посмотреть в mon$statements, не говоря уже о том, чтобы грохнуть его к ЧМ ?
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492332
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

потому что "затычку"-прерывание нельзя поставить в каждый вызов и в каждый цикл до единого. Это место до вчерашнего дня не относилось даже к первой сотне по затратности.
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492338
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

то что смотреть нельзя это конечно плохо. А вот грохнуть не получится при любом раскладе КМК, т.к. пока запрос не отпрепарирован в mon$statements он светится не должен.
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492347
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисТаблоид,

то что смотреть нельзя это конечно плохо. А вот грохнуть не получится при любом раскладе КМК, т.к. пока запрос не отпрепарирован в mon$statements он светится не должен.Дык не только mon$statements, но и mon$ attachments становится недоступным!

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
 session #1 
SQL> commit; select * from  mon$attachments  where mon$attachment_id<>current_connection and mon$
remote_protocol>'';

MON$ATTACHMENT_ID               951358
MON$SERVER_PID                  10568
MON$STATE                       0
MON$ATTACHMENT_NAME             empty30
MON$USER                        SYSDBA

MON$ROLE                        NONE

MON$REMOTE_PROTOCOL             TCPv4
MON$REMOTE_ADDRESS              127.0.0.1
MON$REMOTE_PID                  15984
MON$CHARACTER_SET_ID            0
MON$TIMESTAMP                   2013-12-06 19:47:23.0280
MON$GARBAGE_COLLECTION          1
MON$REMOTE_PROCESS              C:\1Install\fb30\isql.exe
MON$STAT_ID                     5
MON$CLIENT_VERSION              WI-T3.0.0.30663 Firebird 3.0 Alpha 1
MON$REMOTE_VERSION              P13
. . .
-- ОК --

 session #2 
C:\1Install\fb30>isql localhost/3330:empty30 -n
Database:  localhost/3330:empty30
SQL> in deathprep.sql;
-- ушло в себя...

 session #1 
SQL> commit; select * from  mon$attachments  where mon$attachment_id<>current_connection and mon$
remote_protocol>'';
-- висит в тупняке!
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492350
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrпотому что "затычку"-прерывание нельзя поставить в каждый вызов и в каждый цикл до единого. Это место до вчерашнего дня не относилось даже к первой сотне по затратности.0xFF. Не только это место! Вы мне еще за Севастополь блобы ответите! :-)
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492597
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисто что смотреть нельзя это конечно плохо.Сделал зарубку на заборе, чтобы не потерялось. Там именно с оконными ф-циями трабл, и ни с чем иным.
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492599
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, а у FB3 есть подвижки с вот таким запросом? 2.5 не возвращался после запуска.
тынц
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
CREATE TABLE ANIMAL ( 
ANIMAL VARCHAR(10) NOT NULL 
); 

CREATE TABLE COLOR ( 
COLOR VARCHAR(10) NOT NULL 
); 

CREATE TABLE DRINK ( 
DRINK VARCHAR(10) NOT NULL 
); 

CREATE TABLE NATION ( 
NATION VARCHAR(10) NOT NULL 
); 

CREATE TABLE SMOKE ( 
SMOKE VARCHAR(10) NOT NULL 
); 

INSERT INTO ANIMAL (ANIMAL) VALUES ('КОШКА'); 
INSERT INTO ANIMAL (ANIMAL) VALUES ('РЫБА'); 
INSERT INTO ANIMAL (ANIMAL) VALUES ('СОБАКА'); 
INSERT INTO ANIMAL (ANIMAL) VALUES ('ЛОШАДЬ'); 
INSERT INTO ANIMAL (ANIMAL) VALUES ('ПТИЦА'); 

COMMIT WORK; 

INSERT INTO COLOR (COLOR) VALUES ('БЕЛЫЙ'); 
INSERT INTO COLOR (COLOR) VALUES ('ЖЕЛТЫЙ'); 
INSERT INTO COLOR (COLOR) VALUES ('КРАСНЫЙ'); 
INSERT INTO COLOR (COLOR) VALUES ('ГОЛУБОЙ'); 
INSERT INTO COLOR (COLOR) VALUES ('ЗЕЛЕНЫЙ'); 

COMMIT WORK; 

INSERT INTO DRINK (DRINK) VALUES ('КОФЕ'); 
INSERT INTO DRINK (DRINK) VALUES ('МОЛОКО'); 
INSERT INTO DRINK (DRINK) VALUES ('ВОДА'); 
INSERT INTO DRINK (DRINK) VALUES ('ПИВО'); 
INSERT INTO DRINK (DRINK) VALUES ('ЧАЙ'); 

COMMIT WORK; 

INSERT INTO NATION (NATION) VALUES ('АНГЛИЧАНИН'); 
INSERT INTO NATION (NATION) VALUES ('ШВЕД'); 
INSERT INTO NATION (NATION) VALUES ('НЕМЕЦ'); 
INSERT INTO NATION (NATION) VALUES ('ДАТЧАНИН'); 
INSERT INTO NATION (NATION) VALUES ('НОРВЕЖЕЦ'); 

COMMIT WORK; 

INSERT INTO SMOKE (SMOKE) VALUES ('PALL MALL'); 
INSERT INTO SMOKE (SMOKE) VALUES ('MARLBORO'); 
INSERT INTO SMOKE (SMOKE) VALUES ('ROTHMANS'); 
INSERT INTO SMOKE (SMOKE) VALUES ('WINFIELD'); 
INSERT INTO SMOKE (SMOKE) VALUES ('DUNHILL'); 

COMMIT WORK; 

ALTER TABLE ANIMAL ADD CONSTRAINT FK_ANIMAL PRIMARY KEY (ANIMAL); 
ALTER TABLE COLOR ADD CONSTRAINT FK_COLOR PRIMARY KEY (COLOR); 
ALTER TABLE DRINK ADD CONSTRAINT FK_DRINK PRIMARY KEY (DRINK); 
ALTER TABLE NATION ADD CONSTRAINT FK_NATION PRIMARY KEY (NATION); 
ALTER TABLE SMOKE ADD CONSTRAINT FK_SMOKE PRIMARY KEY (SMOKE);

Запрос

select 
A1.ANIMAL AS H1ANIMAL, 
D1.DRINK AS H1DRINK, 
N1.NATION AS H1NATION, 
S1.SMOKE AS H1SMOKE, 
C1.COLOR as H1COLOR, 

A2.ANIMAL AS H2ANIMAL, 
D2.DRINK AS H2DRINK, 
N2.NATION AS H2NATION, 
S2.SMOKE AS H2SMOKE, 
C2.COLOR as H2COLOR, 

A3.ANIMAL AS H3ANIMAL, 
D3.DRINK AS H3DRINK, 
N3.NATION AS H3NATION, 
S3.SMOKE AS H3SMOKE, 
C3.COLOR as H3COLOR, 

A4.ANIMAL AS H4ANIMAL, 
D4.DRINK AS H4DRINK, 
N4.NATION AS H4NATION, 
S4.SMOKE AS H4SMOKE, 
C4.COLOR as H4COLOR, 

A5.ANIMAL AS H5ANIMAL, 
D5.DRINK AS H5DRINK, 
N5.NATION AS H5NATION, 
S5.SMOKE AS H5SMOKE, 
C5.COLOR as H5COLOR 

from ANIMAL A1, 
DRINK D1, 
NATION N1, 
SMOKE S1, 
COLOR C1, 

ANIMAL A2, 
DRINK D2, 
NATION N2, 
SMOKE S2, 
COLOR C2, 

ANIMAL A3, 
DRINK D3, 
NATION N3, 
SMOKE S3, 
COLOR C3, 

ANIMAL A4, 
DRINK D4, 
NATION N4, 
SMOKE S4, 
COLOR C4, 

ANIMAL A5, 
DRINK D5, 
NATION N5, 
SMOKE S5, 
COLOR C5 
where 
A1.ANIMAL <> A2.ANIMAL and 
A1.ANIMAL <> A3.ANIMAL and 
A1.ANIMAL <> A4.ANIMAL and 
A1.ANIMAL <> A5.ANIMAL and 
A2.ANIMAL <> A3.ANIMAL and 
A2.ANIMAL <> A4.ANIMAL and 
A2.ANIMAL <> A5.ANIMAL and 
A3.ANIMAL <> A4.ANIMAL and 
A3.ANIMAL <> A5.ANIMAL and 
A4.ANIMAL <> A5.ANIMAL 
and 
C1.COLOR <> C2.COLOR and 
C1.COLOR <> C3.COLOR and 
C1.COLOR <> C4.COLOR and 
C1.COLOR <> C5.COLOR and 
C2.COLOR <> C3.COLOR and 
C2.COLOR <> C4.COLOR and 
C2.COLOR <> C5.COLOR and 
C3.COLOR <> C4.COLOR and 
C3.COLOR <> C5.COLOR and 
C4.COLOR <> C5.COLOR 
and 
D1.DRINK <> D2.DRINK and 
D1.DRINK <> D3.DRINK and 
D1.DRINK <> D4.DRINK and 
D1.DRINK <> D5.DRINK and 
D2.DRINK <> D3.DRINK and 
D2.DRINK <> D4.DRINK and 
D2.DRINK <> D5.DRINK and 
D3.DRINK <> D4.DRINK and 
D3.DRINK <> D5.DRINK and 
D4.DRINK <> D5.DRINK 
and 
N1.NATION <> N2.NATION and 
N1.NATION <> N3.NATION and 
N1.NATION <> N4.NATION and 
N1.NATION <> N5.NATION and 
N2.NATION <> N3.NATION and 
N2.NATION <> N4.NATION and 
N2.NATION <> N5.NATION and 
N3.NATION <> N4.NATION and 
N3.NATION <> N5.NATION and 
N4.NATION <> N5.NATION 
and 
S1.SMOKE <> S2.SMOKE and 
S1.SMOKE <> S3.SMOKE and 
S1.SMOKE <> S4.SMOKE and 
S1.SMOKE <> S5.SMOKE and 
S2.SMOKE <> S3.SMOKE and 
S2.SMOKE <> S4.SMOKE and 
S2.SMOKE <> S5.SMOKE and 
S3.SMOKE <> S4.SMOKE and 
S3.SMOKE <> S5.SMOKE and 
S4.SMOKE <> S5.SMOKE 
and 
-- 1 
((N1.NATION = 'АНГЛИЧАНИН' and C1.COLOR = 'КРАСНЫЙ') or 
(N2.NATION = 'АНГЛИЧАНИН' and C2.COLOR = 'КРАСНЫЙ') or 
(N3.NATION = 'АНГЛИЧАНИН' and C3.COLOR = 'КРАСНЫЙ') or 
(N4.NATION = 'АНГЛИЧАНИН' and C4.COLOR = 'КРАСНЫЙ') or 
(N5.NATION = 'АНГЛИЧАНИН' and C5.COLOR = 'КРАСНЫЙ')) 
and 
-- 2 
((N1.NATION = 'ШВЕД' and A1.ANIMAL = 'СОБАКА') or 
(N2.NATION = 'ШВЕД' and A2.ANIMAL = 'СОБАКА') or 
(N3.NATION = 'ШВЕД' and A3.ANIMAL = 'СОБАКА') or 
(N4.NATION = 'ШВЕД' and A4.ANIMAL = 'СОБАКА') or 
(N5.NATION = 'ШВЕД' and A5.ANIMAL = 'СОБАКА')) 
and 
-- 3 
((N1.NATION = 'ДАТЧАНИН' and D1.DRINK = 'ЧАЙ') or 
(N2.NATION = 'ДАТЧАНИН' and D2.DRINK = 'ЧАЙ') or 
(N3.NATION = 'ДАТЧАНИН' and D3.DRINK = 'ЧАЙ') or 
(N4.NATION = 'ДАТЧАНИН' and D4.DRINK = 'ЧАЙ') or 
(N5.NATION = 'ДАТЧАНИН' and D5.DRINK = 'ЧАЙ')) 
and 
-- 4 
((C1.COLOR = 'ЗЕЛЕНЫЙ' and C2.COLOR = 'БЕЛЫЙ') or 
(C2.COLOR = 'ЗЕЛЕНЫЙ' and C3.COLOR = 'БЕЛЫЙ') or 
(C3.COLOR = 'ЗЕЛЕНЫЙ' and C4.COLOR = 'БЕЛЫЙ') or 
(C4.COLOR = 'ЗЕЛЕНЫЙ' and C5.COLOR = 'БЕЛЫЙ')) 
and 
-- 5 
((C1.COLOR = 'ЗЕЛЕНЫЙ' and D1.DRINK = 'КОФЕ') or 
(C2.COLOR = 'ЗЕЛЕНЫЙ' and D2.DRINK = 'КОФЕ') or 
(C3.COLOR = 'ЗЕЛЕНЫЙ' and D3.DRINK = 'КОФЕ') or 
(C4.COLOR = 'ЗЕЛЕНЫЙ' and D4.DRINK = 'КОФЕ') or 
(C5.COLOR = 'ЗЕЛЕНЫЙ' and D5.DRINK = 'КОФЕ')) 
and 
-- 6 
((S1.SMOKE = 'PALL MALL' and A1.ANIMAL = 'ПТИЦА') or 
(S2.SMOKE = 'PALL MALL' and A2.ANIMAL = 'ПТИЦА') or 
(S3.SMOKE = 'PALL MALL' and A3.ANIMAL = 'ПТИЦА') or 
(S4.SMOKE = 'PALL MALL' and A4.ANIMAL = 'ПТИЦА') or 
(S5.SMOKE = 'PALL MALL' and A5.ANIMAL = 'ПТИЦА')) 
and 
-- 7 
(D3.DRINK = 'МОЛОКО') 
and 
-- 8 
((S1.SMOKE = 'DUNHILL' and C1.COLOR = 'ЖЕЛТЫЙ') or 
(S2.SMOKE = 'DUNHILL' and C2.COLOR = 'ЖЕЛТЫЙ') or 
(S3.SMOKE = 'DUNHILL' and C3.COLOR = 'ЖЕЛТЫЙ') or 
(S4.SMOKE = 'DUNHILL' and C4.COLOR = 'ЖЕЛТЫЙ') or 
(S5.SMOKE = 'DUNHILL' and C5.COLOR = 'ЖЕЛТЫЙ')) 
and 
-- 9 
(N1.NATION = 'НОРВЕЖЕЦ') 
and 
-- 10 
((S1.SMOKE = 'MARLBORO' and A2.ANIMAL = 'КОШКА') or 
(S2.SMOKE = 'MARLBORO' and 'КОШКА' in (A1.ANIMAL, A3.ANIMAL)) or 
(S3.SMOKE = 'MARLBORO' and 'КОШКА' in (A2.ANIMAL, A4.ANIMAL)) or 
(S4.SMOKE = 'MARLBORO' and 'КОШКА' in (A3.ANIMAL, A5.ANIMAL)) or 
(S5.SMOKE = 'MARLBORO' and A4.ANIMAL = 'КОШКА')) 
and 
-- 11 
((S1.SMOKE = 'DUNHILL' and A2.ANIMAL = 'ЛОШАДЬ') or 
(S2.SMOKE = 'DUNHILL' and 'КОШКА' in (A1.ANIMAL, A3.ANIMAL)) or 
(S3.SMOKE = 'DUNHILL' and 'КОШКА' in (A2.ANIMAL, A4.ANIMAL)) or 
(S4.SMOKE = 'DUNHILL' and 'КОШКА' in (A3.ANIMAL, A5.ANIMAL)) or 
(S5.SMOKE = 'DUNHILL' and A4.ANIMAL = 'ЛОШАДЬ')) 
and 
-- 12 
((S1.SMOKE = 'WINFIELD' and D1.DRINK = 'ПИВО') or 
(S2.SMOKE = 'WINFIELD' and D2.DRINK = 'ПИВО') or 
(S3.SMOKE = 'WINFIELD' and D3.DRINK = 'ПИВО') or 
(S4.SMOKE = 'WINFIELD' and D4.DRINK = 'ПИВО') or 
(S5.SMOKE = 'WINFIELD' and D5.DRINK = 'ПИВО')) 
and 
-- 13 
((N1.NATION = 'НОРВЕЖЕЦ' and C2.COLOR = 'ГОЛУБОЙ') or 
(N2.NATION = 'НОРВЕЖЕЦ' and 'ГОЛУБОЙ' in (C1.COLOR, C3.COLOR)) or 
(N3.NATION = 'НОРВЕЖЕЦ' and 'ГОЛУБОЙ' in (C2.COLOR, C4.COLOR)) or 
(N4.NATION = 'НОРВЕЖЕЦ' and 'ГОЛУБОЙ' in (C3.COLOR, C5.COLOR)) or 
(N5.NATION = 'НОРВЕЖЕЦ' and C4.COLOR = 'ГОЛУБОЙ')) 
and 
-- 14 
((S1.SMOKE = 'ROTHMANS' and N1.NATION = 'НЕМЕЦ') or 
(S2.SMOKE = 'ROTHMANS' and N2.NATION = 'НЕМЕЦ') or 
(S3.SMOKE = 'ROTHMANS' and N3.NATION = 'НЕМЕЦ') or 
(S4.SMOKE = 'ROTHMANS' and N4.NATION = 'НЕМЕЦ') or 
(S5.SMOKE = 'ROTHMANS' and N5.NATION = 'НЕМЕЦ')) 
and 
-- 15 
((S1.SMOKE = 'MARLBORO' and D2.DRINK = 'ВОДА') or 
(S2.SMOKE = 'MARLBORO' and 'ВОДА' in (D1.DRINK, D3.DRINK)) or 
(S3.SMOKE = 'MARLBORO' and 'ВОДА' in (D2.DRINK, D4.DRINK)) or 
(S4.SMOKE = 'MARLBORO' and 'ВОДА' in (D3.DRINK, D5.DRINK)) or 
(S5.SMOKE = 'MARLBORO' and D4.DRINK = 'ВОДА')) 


Таблоид, проверишь? :)
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492609
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arniИнтересно, а у FB3 есть подвижки с вот таким запросом? 2.5 не возвращался после запуска.План возвращает мгновенно. Сколько будет выполняться - не знаю, попозже проверю (сервак сейчас сильно занят).
Немного причесал его под ФБ, да и кириллицу выкинул, дабы с чарсетами и кракозябрами не заморачиваться:
einstein_ddl.sql
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
recreate table animal (animal varchar(10) primary key);
recreate table color (color varchar(10) primary key);
recreate table drink (drink varchar(10) primary key);
recreate table nation (nation varchar(10) primary key);
recreate table smoke (smoke varchar(10) primary key);

insert into animal (animal) values ('cat'); 
insert into animal (animal) values ('fish'); 
insert into animal (animal) values ('dog'); 
insert into animal (animal) values ('horse'); 
insert into animal (animal) values ('bird'); 

insert into color (color) values ('white'); 
insert into color (color) values ('yellow'); 
insert into color (color) values ('red'); 
insert into color (color) values ('blue'); 
insert into color (color) values ('green'); 

insert into drink (drink) values ('cofee'); 
insert into drink (drink) values ('milk'); 
insert into drink (drink) values ('water'); 
insert into drink (drink) values ('beer'); 
insert into drink (drink) values ('tee'); 

insert into nation (nation) values ('eng');
insert into nation (nation) values ('swe'); 
insert into nation (nation) values ('deu'); 
insert into nation (nation) values ('den'); 
insert into nation (nation) values ('nor'); 

insert into smoke (smoke) values ('pall mall');
insert into smoke (smoke) values ('marlboro'); 
insert into smoke (smoke) values ('rothmans'); 
insert into smoke (smoke) values ('winfield'); 
insert into smoke (smoke) values ('dunhill'); 

commit;
einstein_run.sql
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
--set planonly;
set stat on;
select 
    a1.animal as h1animal, 
    d1.drink as h1drink, 
    n1.nation as h1nation, 
    s1.smoke as h1smoke, 
    c1.color as h1color, 
    
    a2.animal as h2animal, 
    d2.drink as h2drink, 
    n2.nation as h2nation, 
    s2.smoke as h2smoke, 
    c2.color as h2color, 
    
    a3.animal as h3animal, 
    d3.drink as h3drink, 
    n3.nation as h3nation, 
    s3.smoke as h3smoke, 
    c3.color as h3color, 
    
    a4.animal as h4animal, 
    d4.drink as h4drink, 
    n4.nation as h4nation, 
    s4.smoke as h4smoke, 
    c4.color as h4color, 
    
    a5.animal as h5animal, 
    d5.drink as h5drink, 
    n5.nation as h5nation, 
    s5.smoke as h5smoke, 
    c5.color as h5color 
from
    animal a1,
    drink d1, 
    nation n1, 
    smoke s1, 
    color c1, 
    
    animal a2, 
    drink d2, 
    nation n2, 
    smoke s2, 
    color c2, 
    
    animal a3, 
    drink d3, 
    nation n3, 
    smoke s3, 
    color c3, 
    
    animal a4, 
    drink d4, 
    nation n4, 
    smoke s4, 
    color c4, 
    
    animal a5, 
    drink d5, 
    nation n5, 
    smoke s5, 
    color c5 
where 
        a1.animal <> a2.animal and 
        a1.animal <> a3.animal and 
        a1.animal <> a4.animal and 
        a1.animal <> a5.animal and 
        a2.animal <> a3.animal and 
        a2.animal <> a4.animal and 
        a2.animal <> a5.animal and 
        a3.animal <> a4.animal and 
        a3.animal <> a5.animal and 
        a4.animal <> a5.animal 
    and 
        c1.color <> c2.color and 
        c1.color <> c3.color and 
        c1.color <> c4.color and 
        c1.color <> c5.color and 
        c2.color <> c3.color and 
        c2.color <> c4.color and 
        c2.color <> c5.color and 
        c3.color <> c4.color and 
        c3.color <> c5.color and 
        c4.color <> c5.color 
    and 
        d1.drink <> d2.drink and 
        d1.drink <> d3.drink and 
        d1.drink <> d4.drink and 
        d1.drink <> d5.drink and 
        d2.drink <> d3.drink and 
        d2.drink <> d4.drink and 
        d2.drink <> d5.drink and 
        d3.drink <> d4.drink and 
        d3.drink <> d5.drink and 
        d4.drink <> d5.drink 
    and 
        n1.nation <> n2.nation and 
        n1.nation <> n3.nation and 
        n1.nation <> n4.nation and 
        n1.nation <> n5.nation and 
        n2.nation <> n3.nation and 
        n2.nation <> n4.nation and 
        n2.nation <> n5.nation and 
        n3.nation <> n4.nation and 
        n3.nation <> n5.nation and 
        n4.nation <> n5.nation 
    and 
        s1.smoke <> s2.smoke and 
        s1.smoke <> s3.smoke and 
        s1.smoke <> s4.smoke and 
        s1.smoke <> s5.smoke and 
        s2.smoke <> s3.smoke and 
        s2.smoke <> s4.smoke and 
        s2.smoke <> s5.smoke and 
        s3.smoke <> s4.smoke and 
        s3.smoke <> s5.smoke and 
        s4.smoke <> s5.smoke 
    and 
    -- 1 
    (
        (n1.nation = 'eng' and c1.color = 'red') or 
        (n2.nation = 'eng' and c2.color = 'red') or 
        (n3.nation = 'eng' and c3.color = 'red') or 
        (n4.nation = 'eng' and c4.color = 'red') or 
        (n5.nation = 'eng' and c5.color = 'red')
    ) 
    and 
    -- 2 
    (
        (n1.nation = 'swe' and a1.animal = 'dog') or 
        (n2.nation = 'swe' and a2.animal = 'dog') or 
        (n3.nation = 'swe' and a3.animal = 'dog') or 
        (n4.nation = 'swe' and a4.animal = 'dog') or 
        (n5.nation = 'swe' and a5.animal = 'dog')
    ) 
    and 
    -- 3 
    (
        (n1.nation = 'den' and d1.drink = 'tee') or 
        (n2.nation = 'den' and d2.drink = 'tee') or 
        (n3.nation = 'den' and d3.drink = 'tee') or 
        (n4.nation = 'den' and d4.drink = 'tee') or 
        (n5.nation = 'den' and d5.drink = 'tee')
    ) 
    and 
    -- 4 
    (
        (c1.color = 'green' and c2.color = 'white') or 
        (c2.color = 'green' and c3.color = 'white') or 
        (c3.color = 'green' and c4.color = 'white') or 
        (c4.color = 'green' and c5.color = 'white')
    ) 
    and 
    -- 5 
    (
        (c1.color = 'green' and d1.drink = 'coffee') or 
        (c2.color = 'green' and d2.drink = 'coffee') or 
        (c3.color = 'green' and d3.drink = 'coffee') or 
        (c4.color = 'green' and d4.drink = 'coffee') or 
        (c5.color = 'green' and d5.drink = 'coffee')
    ) 
    and 
    -- 6 
    (
        (s1.smoke = 'pall mall' and a1.animal = 'bird') or 
        (s2.smoke = 'pall mall' and a2.animal = 'bird') or 
        (s3.smoke = 'pall mall' and a3.animal = 'bird') or 
        (s4.smoke = 'pall mall' and a4.animal = 'bird') or 
        (s5.smoke = 'pall mall' and a5.animal = 'bird')
    ) 
    and 
    -- 7 
    (d3.drink = 'milk') 
    and 
    -- 8 
    (
        (s1.smoke = 'dunhill' and c1.color = 'yellow') or 
        (s2.smoke = 'dunhill' and c2.color = 'yellow') or 
        (s3.smoke = 'dunhill' and c3.color = 'yellow') or 
        (s4.smoke = 'dunhill' and c4.color = 'yellow') or 
        (s5.smoke = 'dunhill' and c5.color = 'yellow')
    ) 
    and 
    -- 9 
    (n1.nation = 'nor') 
    and 
    -- 10 
    (
        (s1.smoke = 'marlboro' and a2.animal = 'cat') or 
        (s2.smoke = 'marlboro' and 'cat' in (a1.animal, a3.animal)) or 
        (s3.smoke = 'marlboro' and 'cat' in (a2.animal, a4.animal)) or 
        (s4.smoke = 'marlboro' and 'cat' in (a3.animal, a5.animal)) or 
        (s5.smoke = 'marlboro' and a4.animal = 'cat')
    ) 
    and 
    -- 11 
    (
        (s1.smoke = 'dunhill' and a2.animal = 'horse') or 
        (s2.smoke = 'dunhill' and 'cat' in (a1.animal, a3.animal)) or 
        (s3.smoke = 'dunhill' and 'cat' in (a2.animal, a4.animal)) or 
        (s4.smoke = 'dunhill' and 'cat' in (a3.animal, a5.animal)) or 
        (s5.smoke = 'dunhill' and a4.animal = 'horse')
    ) 
    and 
    -- 12 
    (
        (s1.smoke = 'winfield' and d1.drink = 'beer') or 
        (s2.smoke = 'winfield' and d2.drink = 'beer') or 
        (s3.smoke = 'winfield' and d3.drink = 'beer') or 
        (s4.smoke = 'winfield' and d4.drink = 'beer') or 
        (s5.smoke = 'winfield' and d5.drink = 'beer')
    ) 
    and 
    -- 13 
    (
        (n1.nation = 'nor' and c2.color = 'blue') or 
        (n2.nation = 'nor' and 'blue' in (c1.color, c3.color)) or 
        (n3.nation = 'nor' and 'blue' in (c2.color, c4.color)) or 
        (n4.nation = 'nor' and 'blue' in (c3.color, c5.color)) or 
        (n5.nation = 'nor' and c4.color = 'blue')
    ) 
    and 
    -- 14 
    (
        (s1.smoke = 'rothmans' and n1.nation = 'deu') or 
        (s2.smoke = 'rothmans' and n2.nation = 'deu') or 
        (s3.smoke = 'rothmans' and n3.nation = 'deu') or 
        (s4.smoke = 'rothmans' and n4.nation = 'deu') or 
        (s5.smoke = 'rothmans' and n5.nation = 'deu')
    ) 
    and 
    -- 15 
    (
        (s1.smoke = 'marlboro' and d2.drink = 'water') or 
        (s2.smoke = 'marlboro' and 'water' in (d1.drink, d3.drink)) or 
        (s3.smoke = 'marlboro' and 'water' in (d2.drink, d4.drink)) or 
        (s4.smoke = 'marlboro' and 'water' in (d3.drink, d5.drink)) or 
        (s5.smoke = 'marlboro' and d4.drink = 'water')
    ) 
;
--set planonly;

План его выполнения:
Код: plaintext
1.
2.
3.
4.
PLAN JOIN (JOIN (N1 INDEX (RDB$PRIMARY4), A1 NATURAL, D1 NATURAL, C1 NATURAL, A2 NATURAL,
D2 NATURAL, N2 NATURAL, C2 NATURAL, A3 NATURAL, N3 NATURAL, C3 NATURAL, A4 NATURAL, D4 NAT
URAL, N4 NATURAL, C4 NATURAL, A5 NATURAL, A5 INDEX (RDB$PRIMARY1), D5 NATURAL, N5 NATURAL,
 N5 INDEX (RDB$PRIMARY4), C5 NATURAL, C5 INDEX (RDB$PRIMARY2), S1 NATURAL, S2 NATURAL, S3
NATURAL, S4 NATURAL, S5 NATURAL, S5 INDEX (RDB$PRIMARY5)), D3 INDEX (RDB$PRIMARY3))
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492620
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидarniИнтересно, а у FB3 есть подвижки с вот таким запросом? 2.5 не возвращался после запуска.План возвращает мгновенно. Сколько будет выполняться - не знаю, попозже проверю (сервак сейчас сильно занят).ooops... на последнем снапшоте завалился, с грохотом. Сразу после выдачи плана.
http://tracker.firebirdsql.org/browse/CORE-4293
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492622
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0xFF... побьют меня, наверное, на какой-нибудь из ФБ-конференций.... %-)
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492646
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид0xFF... побьют меня, наверное, на какой-нибудь из ФБ-конференций.... %-)Вижу тут кругом хорошее. Не в смысле побьют, а в смысле конференция же будет! :)
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492679
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид0xFF... побьют меня, наверное, на какой-нибудь из ФБ-конференций.... %-)
Зато потом пива подарят ;)
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492902
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

у меня не завалился

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
План
PLAN JOIN (JOIN (N1 INDEX (RDB$PRIMARY4), A1 NATURAL, D1 NATURAL, C1 NATURAL, A2 NATURAL, D2 NATURAL, N2 NATURAL, C2 NATURAL, A3 NATURAL, N3 NATURAL, C3 NATURAL, A4 NATURAL, D4 NATURAL, N4 NATURAL, C4 NATURAL, A5 NATURAL, A5 INDEX (RDB$PRIMARY1), D5 NATURAL, N5 NATURAL, N5 INDEX (RDB$PRIMARY4), C5 NATURAL, C5 INDEX (RDB$PRIMARY2), S1 NATURAL, S2 NATURAL, S3 NATURAL, S4 NATURAL, S5 NATURAL, S5 INDEX (RDB$PRIMARY5)), D3 INDEX (RDB$PRIMARY3))

------ Performance info ------
Prepare time = 124ms
Execute time = 9m 22s 602ms
Current memory = 75 224 040
Max memory = 75 249 536
Memory buffers = 8 192
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 609 040 552

Правда выдал 0 записей. А что там кстати должно быть?
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492910
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В isql

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
Select Expression
    -> Filter
        ->  Nested Loop Join (inner)
            ->  Nested Loop Join (inner)
                -> Filter
                    -> Table "N1" Access By ID
                        -> Bitmap
                            -> Index "RDB$PRIMARY4" Scan
                -> Table "A1" Full Scan
                -> Table "D1" Full Scan
                -> Table "C1" Full Scan
                -> Filter
                    -> Table "A2" Full Scan
                -> Filter
                    -> Table "D2" Full Scan
                -> Filter
                    -> Table "N2" Full Scan
                -> Filter
                    -> Table "C2" Full Scan
                -> Filter
                    -> Table "A3" Full Scan
                -> Filter
                    -> Table "N3" Full Scan
                -> Filter
                    -> Table "C3" Full Scan
                -> Filter
                    -> Table "A4" Full Scan
                -> Filter
                    -> Table "D4" Full Scan
                -> Filter
                    -> Table "N4" Full Scan
                -> Filter
                    -> Table "C4" Full Scan
                -> Filter
                    -> Condition
                        -> Table "A5" Full Scan
                        -> Table "A5" Access By ID
                            -> Bitmap
                                -> Index "RDB$PRIMARY1" Scan
                -> Filter
                    -> Table "D5" Full Scan
                -> Filter
                    -> Condition
                        -> Table "N5" Full Scan
                        -> Table "N5" Access By ID
                            -> Bitmap
                                -> Index "RDB$PRIMARY4" Scan
                -> Filter
                    -> Condition
                        -> Table "C5" Full Scan
                        -> Table "C5" Access By ID
                            -> Bitmap
                                -> Index "RDB$PRIMARY2" Scan
                -> Table "S1" Full Scan
                -> Filter
                    -> Table "S2" Full Scan
                -> Filter
                    -> Table "S3" Full Scan
                -> Filter
                    -> Table "S4" Full Scan
                -> Filter
                    -> Condition
                        -> Table "S5" Full Scan
                        -> Table "S5" Access By ID
                            -> Bitmap
                                -> Index "RDB$PRIMARY5" Scan
            -> Filter
                -> Table "D3" Access By ID
                    -> Bitmap
                        -> Index "RDB$PRIMARY3" Scan
Current memory = 76034296
Delta memory = 156488
Max memory = 79243792
Elapsed time= 596.32 sec
Buffers = 8192
Reads = 6
Writes 143
Fetches = 644927364
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492952
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисвыдал 0 записей. А что там кстати должно быть?вроде бы 1 запись.
A покажи свою show version, плз
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492956
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я увидел твои "Buffers = 8192", вспомнил про свои 512К и решил уменьшить аппетиты.
Но не помогло:
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
$ gfix -bu 65000 einstein.fdb

-- embedded:
$ isql einstein.fdb -n
Database:  einstein.fdb
SQL> set stat on;
SQL> in einstein_run.sql;

PLAN JOIN (JOIN (N1 INDEX (PK_NATION), A1 NATURAL, D1 NATURAL, C1 NATURAL, 
A2 NATURAL, D2 NATURAL, N2 NATURAL, C2 NATURAL, A3 NATURAL, N3 NATURAL, 
C3 NATURAL, A4 NATURAL, D4 NATURAL, N4 NATURAL, C4 NATURAL, A5 NATURAL, 
A5 INDEX (PK_ANIMAL), D5 NATURAL, N5 NATURAL, N5 INDEX (PK_NATION), 
C5 NATURAL, C5 INDEX (PK_COLOR), S1 NATURAL, S2 NATURAL, S3 NATURAL, 
S4 NATURAL, S5 NATURAL, S5 INDEX (PK_SMOKE)), D3 INDEX (PK_DRINK))
-- через 10 сек примерно:
Segmentation fault (core dumped)

-- ТСР:
$ isql localhost/3330:/var/db/fb30/einstein.fdb -n
Database:  localhost/3330:/var/db/fb30/einstein.fdb
SQL> in einstein_run.sql;

PLAN JOIN (JOIN (N1 INDEX (PK_NATION), A1 NATURAL, D1 NATURAL, C1 NATURAL, 
A2 NATURAL, D2 NATURAL, N2 NATURAL, C2 NATURAL, A3 NATURAL, N3 NATURAL, 
C3 NATURAL, A4 NATURAL, D4 NATURAL, N4 NATURAL, C4 NATURAL, A5 NATURAL, 
A5 INDEX (PK_ANIMAL), D5 NATURAL, N5 NATURAL, N5 INDEX (PK_NATION), 
C5 NATURAL, C5 INDEX (PK_COLOR), S1 NATURAL, S2 NATURAL, S3 NATURAL, 
S4 NATURAL, S5 NATURAL, S5 INDEX (PK_SMOKE)), D3 INDEX (PK_DRINK))

-- примерно через 15-20 сек:
Statement failed, SQLSTATE = 08006
Error reading data from the connection.
After line 4 in file einstein_run.sql
SQL> quit;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
PS
SQL> show version;
ISQL Version: LI-T3.0.0.30780 Firebird 3.0 Alpha 1
Server version:
Firebird/Linux/AMD/Intel/x64 (access method), version "LI-T3.0.0.30780 Firebird 3.0 Alpha 1"
Firebird/Linux/AMD/Intel/x64 (remote server), version "LI-T3.0.0.30780 Firebird 3.0 Alpha 1/tcp (oel64)/P13"
Firebird/Linux/AMD/Intel/x64 (remote interface), version "LI-T3.0.0.30780 Firebird 3.0 Alpha 1/tcp (oel64)/P13"
on disk structure version 12.0
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492968
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидA покажи свою show version, плз

ISQL Version: WI-T3.0.0.30785 Firebird 3.0 Alpha 1
Server version:
Firebird/Windows/Intel/i386 (access method), version "WI-T3.0.0.30785 Firebird 3.0 Alpha 1"
Firebird/Windows/Intel/i386 (remote server), version "WI-T3.0.0.30785 Firebird 3.0 Alpha 1/tcp (DEN_PC)/P13:C"
Firebird/Windows/Intel/i386 (remote interface), version "WI-T3.0.0.30785 Firebird 3.0 Alpha 1/tcp (DEN_PC)/P13:C"
on disk structure version 12.0
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492975
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис,

а на линухе можешь проверить ? у тебя ведь "есть его" там вроде ?


ЗЫ. я еще запустил на 2.5, на простой виндовой тачке, ничем не загруженной. Пущай полетает, в понедельник поглядим на него.
...
Рейтинг: 0 / 0
FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
    #38492976
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

проверю чуть позже. У меня ещё версия немного новее.
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB-3 может потратить на prepare несколько минут, при этом НЕ реагируя на mon$-запросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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