powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Скорость выполнения подзапроса
25 сообщений из 26, страница 1 из 2
Скорость выполнения подзапроса
    #39982489
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Очередной раз прошу помощи сообщества, видимо общая обстановка уже сказывается, не могу понять, что происходит в базе:

Есть таблица T, в которой есть 40 тысяч записей,
есть запрос, который считает некий параметр для 2 процентов строк таблицы, т.е. выдаёт 800 строк.

Скорость выполнения запроса - 1 секунда.
Скорость получения ключей всей таблицы - 2 секунды.
Общий запрос, включающий присоединения первого запроса к ключам таблицы уходит в себя и возвращается через 600-700 секунд.

Схема того как это выглядит:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT ID FROM T; -- 2 секунды, 40 000 записей

SELECT ID, COUNT(*) COUNT_ FROM V WHERE ... GROUP BY ID; -- 1 секунда, 800 записей

WITH
 Q AS (SELECT ID, COUNT(*) COUNT_ FROM V  WHERE ... GROUP BY ID)
SELECT
 T.ID,
 Q.COUNT_
FROM
  T, Q
WHERE
  T.ID = Q.ID(+); -- 600 секунд



План запроса говорит, что сначала выполняется запрос к вьюшке,
а потом происходит INDEX FAST FULL SCAN по первичному ключу таблицы T.

Возникает вопрос - откуда появились дополнительные 597 секунд и как от них избавиться?

с уважением,
Дмитрий Жучков
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982492
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimkas

План запроса говорит, что сначала выполняется запрос к вьюшке,
а потом происходит INDEX FAST FULL SCAN по первичному ключу таблицы T.

Нам тоже план покажите.
Dimkas

Возникает вопрос - откуда появились дополнительные 597 секунд и как от них избавиться?

А на этот вопрос ответ есть в gather_plan_statistics или в SQL Monitor'е.
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982495
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PuM256, да-да, готовлю, и план и результаты трассировки... отвлекают усиленно :)
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982498
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimkas,

40тыс ето мало, мож время сеть пожирает

зы
count(*) через аналитику не проще посчитать (или схема очень приблизительна)?

....
stax
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982499
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из первых проблесков понимания что происходит -
всё трассировка сессии забита ожиданиями типа
Код: plsql
1.
WAIT #2: nam='asynch descriptor resize' ela= 7 outstanding #aio=0 current aio limit=4294967295 new aio limit=4096 obj#=-1 tim=2258543518207
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982500
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
схема полностью условна, реальность как всегда сложнее
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982503
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Реальность вот такая - запрос из вьюшки:

Код: 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.
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.
     SELECT 
       IDPRC,
       COUNT(*) COUNT_ -- количество заявок, занявших 1-ое место
     FROM
       MNT_PRCLOTS_WINNERS_SPEED_TEST W
     WHERE
       W.SPR_WIN IS NOT NULL
     GROUP BY
       IDPRC

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        8      0.43       0.44          0      22765          0         717
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       10      0.43       0.44          0      22765          0         717

Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 89  

Rows     Row Source Operation
-------  ---------------------------------------------------
    717  HASH GROUP BY (cr=22765 pr=0 pw=0 time=1193 us cost=9153 size=2925360 card=717)
    717   FILTER  (cr=22765 pr=0 pw=0 time=196064 us)
   1443    HASH JOIN OUTER (cr=22765 pr=0 pw=0 time=195871 us cost=8366 size=5324400 card=1305)
   1443     HASH JOIN RIGHT OUTER (cr=3941 pr=0 pw=0 time=24393 us cost=1907 size=52200 card=1305)
   1212      VIEW  (cr=3023 pr=0 pw=0 time=5812 us cost=906 size=12120 card=1212)
   1212       HASH GROUP BY (cr=3023 pr=0 pw=0 time=4722 us cost=906 size=47268 card=1212)
   1611        HASH JOIN  (cr=3023 pr=0 pw=0 time=56350 us cost=905 size=131820 card=3380)
   1490         VIEW  index$_join$_004 (cr=124 pr=0 pw=0 time=9182 us cost=111 size=13140 card=1314)
   1490          HASH JOIN  (cr=124 pr=0 pw=0 time=7445 us)
   1490           INDEX RANGE SCAN PRCLOTS_PRC (cr=7 pr=0 pw=0 time=1737 us cost=5 size=13140 card=1314)(object id 84951)
  50897           INDEX FAST FULL SCAN IDPRCLOTS_PK (cr=117 pr=0 pw=0 time=28005 us cost=132 size=13140 card=1314)(object id 84949)
  68342         NESTED LOOPS  (cr=2899 pr=0 pw=0 time=108398 us cost=793 size=1976901 card=68169)
      1          FAST DUAL  (cr=0 pr=0 pw=0 time=0 us cost=2 size=0 card=1)
  68342          TABLE ACCESS FULL PRCLOTS_BDGT (cr=2899 pr=0 pw=0 time=62837 us cost=791 size=1976901 card=68169)
   1443      HASH JOIN RIGHT OUTER (cr=918 pr=0 pw=0 time=21029 us cost=1000 size=39150 card=1305)
      2       VIEW  (cr=18 pr=0 pw=0 time=3 us cost=18 size=1079 card=83)
      2        SORT UNIQUE (cr=18 pr=0 pw=0 time=1 us cost=18 size=665 card=83)
      2         UNION-ALL  (cr=18 pr=0 pw=0 time=9 us)
      2          VIEW  index$_join$_018 (cr=12 pr=0 pw=0 time=6 us cost=11 size=656 card=82)
      2           HASH JOIN  (cr=12 pr=0 pw=0 time=5 us)
   1443            INDEX RANGE SCAN IDPRC_PK (cr=4 pr=0 pw=0 time=961 us cost=5 size=656 card=82)(object id 84834)
   2860            INDEX RANGE SCAN PRC_IDPRCACTIVITY_IDX (cr=8 pr=0 pw=0 time=2361 us cost=6 size=656 card=82)(object id 84836)
      0          VIEW  index$_join$_019 (cr=6 pr=0 pw=0 time=0 us cost=6 size=9 card=1)
      0           HASH JOIN  (cr=6 pr=0 pw=0 time=0 us)
     12            INDEX RANGE SCAN PRC_IDMO_IDX (cr=2 pr=0 pw=0 time=22 us cost=1 size=9 card=1)(object id 84835)
   1443            INDEX RANGE SCAN IDPRC_PK (cr=4 pr=0 pw=0 time=1201 us cost=5 size=9 card=1)(object id 84834)
   1443       NESTED LOOPS  (cr=900 pr=0 pw=0 time=17784 us cost=982 size=22185 card=1305)
   1443        NESTED LOOPS  (cr=877 pr=0 pw=0 time=9493 us cost=982 size=15660 card=1305)
      1         FAST DUAL  (cr=0 pr=0 pw=0 time=0 us cost=2 size=0 card=1)
   1443         TABLE ACCESS BY INDEX ROWID PRCLOTS (cr=877 pr=0 pw=0 time=8171 us cost=980 size=15660 card=1305)
   1490          INDEX RANGE SCAN PRCLOTS_PRC (cr=7 pr=0 pw=0 time=1613 us cost=3 size=0 card=1314)(object id 84951)
   1443        INDEX UNIQUE SCAN IDPRC_PK (cr=23 pr=0 pw=0 time=0 us cost=0 size=5 card=1)(object id 84834)
    717     VIEW  (cr=18824 pr=0 pw=0 time=191530 us cost=6459 size=9473800 card=2345)
    717      HASH JOIN OUTER (cr=18824 pr=0 pw=0 time=190814 us cost=6459 size=4912775 card=2345)
    717       HASH JOIN  (cr=9073 pr=0 pw=0 time=5370 us cost=3006 size=157115 card=2345)
   2121        TABLE ACCESS BY INDEX ROWID PRS (cr=465 pr=0 pw=0 time=5487 us cost=641 size=103136 card=2344)
   2121         BITMAP CONVERSION TO ROWIDS (cr=112 pr=0 pw=0 time=1371 us)
      1          BITMAP MINUS  (cr=112 pr=0 pw=0 time=0 us)
      1           BITMAP CONVERSION FROM ROWIDS (cr=12 pr=0 pw=0 time=0 us)
   3183            SORT ORDER BY (cr=12 pr=0 pw=0 time=2163 us)
   3183             INDEX RANGE SCAN PRS_PRC (cr=12 pr=0 pw=0 time=1781 us cost=9 size=0 card=3402)(object id 85102)
      1           BITMAP CONVERSION FROM ROWIDS (cr=100 pr=0 pw=0 time=0 us)
  44087            INDEX RANGE SCAN PRS_SPR (cr=100 pr=0 pw=0 time=37057 us cost=109 size=0 card=3402)(object id 85103)
  33167        TABLE ACCESS FULL PRSLOTS (cr=8608 pr=0 pw=0 time=168763 us cost=2365 size=978374 card=42538)
    422       VIEW  (cr=9751 pr=0 pw=0 time=166716 us cost=3452 size=4753632 card=2344)
    422        HASH JOIN  (cr=9751 pr=0 pw=0 time=166295 us cost=3452 size=150016 card=2344)
   2121         TABLE ACCESS BY INDEX ROWID PRS (cr=1143 pr=0 pw=0 time=6609 us cost=1087 size=103136 card=2344)
   3183          INDEX RANGE SCAN PRS_PRC (cr=12 pr=0 pw=0 time=3054 us cost=9 size=0 card=3402)(object id 85102)
  19440         TABLE ACCESS FULL PRSLOTS (cr=8608 pr=0 pw=0 time=94509 us cost=2364 size=215680 card=10784)


Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       9        0.00          0.00
  SQL*Net message from client                     9        0.02          0.13
  asynch descriptor resize                       12        0.00          0.00
********************************************************************************
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982507
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос части ключей из основной таблицы - для полноты картины
Код: 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.
25.
26.
27.
28.
SELECT IDPRC 
FROM
 PRC WHERE IDPRC > 40000


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch       89      0.00       0.01          0        107          0        8890
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       91      0.00       0.01          0        107          0        8890

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 89  

Rows     Row Source Operation
-------  ---------------------------------------------------
   8890  INDEX RANGE SCAN IDPRC_PK (cr=107 pr=0 pw=0 time=23873 us cost=20 size=44365 card=8873)(object id 84834)


Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                      90        0.00          0.00
  SQL*Net message from client                    90        0.35          3.30
********************************************************************************


получение мгновенное, 3.3 секунды это фетч на клиента
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982514
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну и финальный запрос - время выполнения 330 секунд,
получено только 100 строк - это я не стал качать все результаты на клиента
Код: 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.
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.
  WITH
   PRSLOTS_1_AGG as (
     SELECT 
       IDPRC,
       COUNT(*) COUNT_ -- количество заявок, занявших 1-ое место В данной закупке
     FROM
       MNT_PRCLOTS_WINNERS_SPEED_TEST W
     WHERE
       W.SPR_WIN IS NOT NULL
     GROUP BY
       IDPRC
   )
  SELECT
    tbl.IDPRC as IDMNT_PRC, -- Id закупки
    PRSLOTS_1_AGG.COUNT_ WINCOUNT--, -- Количество победителей
  FROM
    PRC tbl,
    PRSLOTS_1_AGG
  WHERE
    (tbl.IDPRC = PRSLOTS_1_AGG.IDPRC(+))

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.84       0.84          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1    328.93     329.45          0   19426109          0         100
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3    329.78     330.29          0   19426109          0         100

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 89  

Rows     Row Source Operation
-------  ---------------------------------------------------
    100  HASH JOIN RIGHT OUTER (cr=19426109 pr=0 pw=0 time=594 us cost=5060 size=1513885 card=48835)
    717   VIEW  (cr=19426101 pr=0 pw=0 time=5012 us cost=5029 size=546 card=21)
    717    HASH GROUP BY (cr=19426101 pr=0 pw=0 time=4057 us cost=5029 size=2940 card=21)
    717     FILTER  (cr=19426101 pr=0 pw=0 time=259479232 us)
   1443      NESTED LOOPS OUTER (cr=19426101 pr=0 pw=0 time=383334912 us cost=5028 size=182560 card=1304)
   1443       HASH JOIN OUTER (cr=9936 pr=0 pw=0 time=34728 us cost=1889 size=48248 card=1304)
   1443        NESTED LOOPS OUTER (cr=6913 pr=0 pw=0 time=123170 us cost=982 size=35208 card=1304)
   1443         NESTED LOOPS  (cr=923 pr=0 pw=0 time=26436 us cost=982 size=28688 card=1304)
   1443          NESTED LOOPS  (cr=900 pr=0 pw=0 time=20188 us cost=982 size=22185 card=1305)
   1443           NESTED LOOPS  (cr=877 pr=0 pw=0 time=11415 us cost=982 size=15660 card=1305)
      1            FAST DUAL  (cr=0 pr=0 pw=0 time=0 us cost=2 size=0 card=1)
   1443            TABLE ACCESS BY INDEX ROWID PRCLOTS (cr=877 pr=0 pw=0 time=10815 us cost=980 size=15660 card=1305)
   1490             INDEX RANGE SCAN PRCLOTS_PRC (cr=7 pr=0 pw=0 time=1613 us cost=3 size=0 card=1314)(object id 84951)
   1443           INDEX UNIQUE SCAN IDPRC_PK (cr=23 pr=0 pw=0 time=0 us cost=0 size=5 card=1)(object id 84834)
   1443          INDEX UNIQUE SCAN IDPRC_PK (cr=23 pr=0 pw=0 time=0 us cost=0 size=5 card=1)(object id 84834)
      2         VIEW  (cr=5990 pr=0 pw=0 time=0 us cost=0 size=5 card=1)
      2          SORT UNIQUE (cr=5990 pr=0 pw=0 time=0 us)
      2           UNION-ALL PARTITION (cr=5990 pr=0 pw=0 time=0 us)
      2            FILTER  (cr=2995 pr=0 pw=0 time=0 us)
      2             TABLE ACCESS BY INDEX ROWID PRC (cr=2995 pr=0 pw=0 time=0 us cost=2 size=8 card=1)
   1443              INDEX UNIQUE SCAN IDPRC_PK (cr=1460 pr=0 pw=0 time=0 us cost=1 size=0 card=1)(object id 84834)
      0            FILTER  (cr=2995 pr=0 pw=0 time=0 us)
      0             TABLE ACCESS BY INDEX ROWID PRC (cr=2995 pr=0 pw=0 time=0 us cost=2 size=9 card=1)
   1443              INDEX UNIQUE SCAN IDPRC_PK (cr=1460 pr=0 pw=0 time=0 us cost=1 size=0 card=1)(object id 84834)
   1212        VIEW  (cr=3023 pr=0 pw=0 time=16819 us cost=906 size=33800 card=3380)
   1212         HASH GROUP BY (cr=3023 pr=0 pw=0 time=13993 us cost=906 size=131820 card=3380)
   1611          HASH JOIN  (cr=3023 pr=0 pw=0 time=47928 us cost=905 size=131820 card=3380)
   1490           VIEW  index$_join$_006 (cr=124 pr=0 pw=0 time=8809 us cost=111 size=13140 card=1314)
   1490            HASH JOIN  (cr=124 pr=0 pw=0 time=7445 us)
   1490             INDEX RANGE SCAN PRCLOTS_PRC (cr=7 pr=0 pw=0 time=620 us cost=5 size=13140 card=1314)(object id 84951)
  50897             INDEX FAST FULL SCAN IDPRCLOTS_PK (cr=117 pr=0 pw=0 time=21100 us cost=132 size=13140 card=1314)(object id 84949)
  68342           NESTED LOOPS  (cr=2899 pr=0 pw=0 time=132202 us cost=793 size=1976901 card=68169)
      1            FAST DUAL  (cr=0 pr=0 pw=0 time=0 us cost=2 size=0 card=1)
  68342            TABLE ACCESS FULL PRCLOTS_BDGT (cr=2899 pr=0 pw=0 time=60790 us cost=791 size=1976901 card=68169)
    717       VIEW PUSHED PREDICATE  (cr=19416165 pr=0 pw=0 time=0 us cost=3 size=103 card=1)
    717        FILTER  (cr=19416165 pr=0 pw=0 time=0 us)
    717         HASH JOIN OUTER (cr=19416165 pr=0 pw=0 time=0 us cost=5820 size=103 card=1)
    717          HASH JOIN  (cr=12425410 pr=0 pw=0 time=0 us cost=2368 size=67 card=1)
47859981           TABLE ACCESS FULL PRSLOTS (cr=12421344 pr=0 pw=0 time=239548208 us cost=2365 size=978374 card=42538)
   2121           TABLE ACCESS BY INDEX ROWID PRS (cr=4066 pr=0 pw=0 time=40550 us cost=2 size=44 card=1)
   3183            INDEX RANGE SCAN PRS_PRC (cr=2861 pr=0 pw=0 time=23331 us cost=1 size=0 card=1)(object id 85102)
 302574          VIEW  (cr=6990755 pr=0 pw=0 time=266743728 us cost=3452 size=84384 card=2344)
 302574           HASH JOIN  (cr=6990755 pr=0 pw=0 time=266396224 us cost=3452 size=150016 card=2344)
1520757            TABLE ACCESS BY INDEX ROWID PRS (cr=818819 pr=0 pw=0 time=6922063 us cost=1087 size=103136 card=2344)
2282211             INDEX RANGE SCAN PRS_PRC (cr=7892 pr=0 pw=0 time=3229244 us cost=9 size=0 card=3402)(object id 85102)
13938480            TABLE ACCESS FULL PRSLOTS (cr=6171936 pr=0 pw=0 time=74008656 us cost=2364 size=215680 card=10784)
    100   INDEX FAST FULL SCAN IDPRC_PK (cr=8 pr=0 pw=0 time=99 us cost=29 size=244175 card=48835)(object id 84834)


Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       2        0.00          0.00
  SQL*Net message from client                     2        0.08          0.08
  asynch descriptor resize                     2882        0.00          0.02
********************************************************************************
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982527
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такая картина. Буду благодарен если кто-то подскажет куда копать.
Я сам вижу только невесть откуда взявшиеся миллионы строк в плане полного запроса
- число 47859981 напротив строки
Код: plsql
1.
TABLE ACCESS FULL PRSLOTS


и многочисленные события ожидания asynch descriptor resize, которые, вроде, не оказывают влияния на время выполнения,
т.к. суммарное время ожидания никакое
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982542
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а вот и странное на первый взгляд решение нашлось - вот здесь
переписываем запрос с использования WITH на явный подзапрос и всё внезапно налаживается:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  SELECT
    tbl.IDPRC as IDMNT_PRC, -- Id закупки
    PRSLOTS_1_AGG.COUNT_ WINCOUNT--, -- Количество победителей
  FROM
    PRC tbl,
    ( SELECT 
       IDPRC,
       COUNT(*) COUNT_ -- количество заявок, занявших 1-ое место В данной закупке
     FROM
       MNT_PRCLOTS_WINNERS_SPEED_TEST W
     WHERE
       IDPRC >= 47489 AND
       W.SPR_WIN IS NOT NULL
     GROUP BY
       IDPRC
   ) PRSLOTS_1_AGG
  WHERE
    (tbl.IDPRC = PRSLOTS_1_AGG.IDPRC(+)) 



как говорится, всем спасибо за помощь и внимание :)
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982550
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для истории - итоги патча с переносом подзапроса из WITH в FROM
Код: 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.
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.
  SELECT
    tbl.IDPRC as IDMNT_PRC, -- Id закупки
    PRSLOTS_1_AGG.COUNT_ WINCOUNT--, -- Количество победителей
  FROM
    PRC tbl,
    ( SELECT 
       IDPRC,
       COUNT(*) COUNT_ -- количество заявок, занявших 1-ое место В данной закупке
     FROM
       MNT_PRCLOTS_WINNERS_SPEED_TEST W
     WHERE
       IDPRC >= 47489 AND
       W.SPR_WIN IS NOT NULL
     GROUP BY
       IDPRC
   ) PRSLOTS_1_AGG
  WHERE
    (tbl.IDPRC = PRSLOTS_1_AGG.IDPRC(+))

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      0.46       0.47          0      22773          0         100
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.46       0.47          0      22773          0         100

Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 89  

Rows     Row Source Operation
-------  ---------------------------------------------------
    100  HASH JOIN RIGHT OUTER (cr=22773 pr=0 pw=0 time=396 us cost=8398 size=1513885 card=48835)
    717   VIEW  (cr=22765 pr=0 pw=0 time=1551 us cost=8367 size=26 card=1)
    717    HASH GROUP BY (cr=22765 pr=0 pw=0 time=716 us cost=8367 size=4080 card=1)
    717     FILTER  (cr=22765 pr=0 pw=0 time=333536 us)
   1443      HASH JOIN OUTER (cr=22765 pr=0 pw=0 time=333702 us cost=8366 size=5324400 card=1305)
   1443       HASH JOIN OUTER (cr=3941 pr=0 pw=0 time=4926 us cost=1907 size=52200 card=1305)
   1443        HASH JOIN RIGHT OUTER (cr=918 pr=0 pw=0 time=23552 us cost=1000 size=39150 card=1305)
      2         VIEW  (cr=18 pr=0 pw=0 time=2 us cost=18 size=1079 card=83)
      2          SORT UNIQUE (cr=18 pr=0 pw=0 time=2 us cost=18 size=665 card=83)
      2           UNION-ALL  (cr=18 pr=0 pw=0 time=8 us)
      2            VIEW  index$_join$_020 (cr=12 pr=0 pw=0 time=6 us cost=11 size=656 card=82)
      2             HASH JOIN  (cr=12 pr=0 pw=0 time=5 us)
   1443              INDEX RANGE SCAN IDPRC_PK (cr=4 pr=0 pw=0 time=841 us cost=5 size=656 card=82)(object id 84834)
   2860              INDEX RANGE SCAN PRC_IDPRCACTIVITY_IDX (cr=8 pr=0 pw=0 time=1864 us cost=6 size=656 card=82)(object id 84836)
      0            VIEW  index$_join$_021 (cr=6 pr=0 pw=0 time=0 us cost=6 size=9 card=1)
      0             HASH JOIN  (cr=6 pr=0 pw=0 time=0 us)
     12              INDEX RANGE SCAN PRC_IDMO_IDX (cr=2 pr=0 pw=0 time=22 us cost=1 size=9 card=1)(object id 84835)
   1443              INDEX RANGE SCAN IDPRC_PK (cr=4 pr=0 pw=0 time=721 us cost=5 size=9 card=1)(object id 84834)
   1443         NESTED LOOPS  (cr=900 pr=0 pw=0 time=20188 us cost=982 size=22185 card=1305)
   1443          NESTED LOOPS  (cr=877 pr=0 pw=0 time=10815 us cost=982 size=15660 card=1305)
      1           FAST DUAL  (cr=0 pr=0 pw=0 time=0 us cost=2 size=0 card=1)
   1443           TABLE ACCESS BY INDEX ROWID PRCLOTS (cr=877 pr=0 pw=0 time=9373 us cost=980 size=15660 card=1305)
   1490            INDEX RANGE SCAN PRCLOTS_PRC (cr=7 pr=0 pw=0 time=1737 us cost=3 size=0 card=1314)(object id 84951)
   1443          INDEX UNIQUE SCAN IDPRC_PK (cr=23 pr=0 pw=0 time=0 us cost=0 size=5 card=1)(object id 84834)
   1212        VIEW  (cr=3023 pr=0 pw=0 time=9445 us cost=906 size=33800 card=3380)
   1212         HASH GROUP BY (cr=3023 pr=0 pw=0 time=8477 us cost=906 size=131820 card=3380)
   1611          HASH JOIN  (cr=3023 pr=0 pw=0 time=75670 us cost=905 size=131820 card=3380)
   1490           VIEW  index$_join$_006 (cr=124 pr=0 pw=0 time=11291 us cost=111 size=13140 card=1314)
   1490            HASH JOIN  (cr=124 pr=0 pw=0 time=9058 us)
   1490             INDEX RANGE SCAN PRCLOTS_PRC (cr=7 pr=0 pw=0 time=1364 us cost=5 size=13140 card=1314)(object id 84951)
  50897             INDEX FAST FULL SCAN IDPRCLOTS_PK (cr=117 pr=0 pw=0 time=34399 us cost=132 size=13140 card=1314)(object id 84949)
  68342           NESTED LOOPS  (cr=2899 pr=0 pw=0 time=108782 us cost=793 size=1976901 card=68169)
      1            FAST DUAL  (cr=0 pr=0 pw=0 time=0 us cost=2 size=0 card=1)
  68342            TABLE ACCESS FULL PRCLOTS_BDGT (cr=2899 pr=0 pw=0 time=61814 us cost=791 size=1976901 card=68169)
    717       VIEW  (cr=18824 pr=0 pw=0 time=328644 us cost=6459 size=9473800 card=2345)
    717        HASH JOIN OUTER (cr=18824 pr=0 pw=0 time=327570 us cost=6459 size=4912775 card=2345)
    717         HASH JOIN  (cr=9073 pr=0 pw=0 time=3818 us cost=3006 size=157115 card=2345)
   2121          TABLE ACCESS BY INDEX ROWID PRS (cr=465 pr=0 pw=0 time=6360 us cost=641 size=103136 card=2344)
   2121           BITMAP CONVERSION TO ROWIDS (cr=112 pr=0 pw=0 time=623 us)
      1            BITMAP MINUS  (cr=112 pr=0 pw=0 time=0 us)
      1             BITMAP CONVERSION FROM ROWIDS (cr=12 pr=0 pw=0 time=0 us)
   3183              SORT ORDER BY (cr=12 pr=0 pw=0 time=3309 us)
   3183               INDEX RANGE SCAN PRS_PRC (cr=12 pr=0 pw=0 time=4200 us cost=9 size=0 card=3402)(object id 85102)
      1             BITMAP CONVERSION FROM ROWIDS (cr=100 pr=0 pw=0 time=0 us)
  44087              INDEX RANGE SCAN PRS_SPR (cr=100 pr=0 pw=0 time=26451 us cost=109 size=0 card=3402)(object id 85103)
  33167          TABLE ACCESS FULL PRSLOTS (cr=8608 pr=0 pw=0 time=174504 us cost=2365 size=978374 card=42538)
    422         VIEW  (cr=9751 pr=0 pw=0 time=287332 us cost=3452 size=4753632 card=2344)
    422          HASH JOIN  (cr=9751 pr=0 pw=0 time=286490 us cost=3452 size=150016 card=2344)
   2121           TABLE ACCESS BY INDEX ROWID PRS (cr=1143 pr=0 pw=0 time=9228 us cost=1087 size=103136 card=2344)
   3183            INDEX RANGE SCAN PRS_PRC (cr=12 pr=0 pw=0 time=4327 us cost=9 size=0 card=3402)(object id 85102)
  19440           TABLE ACCESS FULL PRSLOTS (cr=8608 pr=0 pw=0 time=110495 us cost=2364 size=215680 card=10784)
    100   INDEX FAST FULL SCAN IDPRC_PK (cr=8 pr=0 pw=0 time=198 us cost=29 size=244175 card=48835)(object id 84834)


Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       2        0.00          0.00
  SQL*Net message from client                     2        0.38          0.38
  asynch descriptor resize                       12        0.00          0.00
********************************************************************************
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982563
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimkas,

просто интересно
(+), обязателен?

.....
stax
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982570
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

досмотрел IDPRC >= 47489

.....
stax
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982571
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
да,
по условиям задачи нужно выбрать 40 тысяч строк и чтобы у 800 из них был заполнен указанный параметр,
без плюса в итоге будет ровно 800 строк
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982573
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax

досмотрел IDPRC >= 47489

а это magic number вестимо :)
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982610
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а самое печальное, что в реальном (не тестовом) запросе подобных подзапросов 3 штуки и их перенос из WITH во FROM ничего не дал :(

логи сессии по-прежнему прирастают событиями "asynch descriptor resize" и запрос висит наглухо, дождаться исполнения пока не удалось
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982611
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982612
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimkas
а самое печальное,


WITH материализовать?

ps
считать count-ы аналитикой
.....
stax
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982652
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость

да-да, читал, пункт 2 оттуда помог наладить тестовый запрос, но боевой сложнее в 3 раза и на нём не сработало,
временно убрал проблемные подзапросы из боевого запроса, сижу думаю
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982654
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax

WITH материализовать?

ps
считать count-ы аналитикой
.....
stax

уже материализованны прошлогодние данные, если материализовать данные этого года, то их придётся обновлять, своя морока

в тестовом варианте запроса сработало решение с переносом подзапроса из WITH во FROM - постараюсь допилить и в боевом
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982663
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimkas,

я имел ввиду добавить в with хинт /*+ materialize */ (или c rownum для старых версий)

....
stax
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982687
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Dimkas,

я имел ввиду добавить в with хинт /*+ materialize */ (или c rownum для старых версий)

....
stax
а materialize уже официально признан?
или я что-то путаю...
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982689
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax

я имел ввиду добавить в with хинт /*+ materialize */ (или c rownum для старых версий)

вот тут пожалуйста поподробнее -
хинт /*+ materialize */ ощутимо ничего не меняет,
видимо это связано с версией -
Код: plsql
1.
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0


явное добавление rownum в выборку тоже никак не влияет - или его еще как-то использовать надо в основном запросе?
...
Рейтинг: 0 / 0
Скорость выполнения подзапроса
    #39982723
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  WITH
   PRSLOTS_1_AGG as (
     SELECT --+ materialize
       IDPRC,
       COUNT(*) COUNT_ -- количество заявок, занявших 1-ое место В данной закупке
     FROM
       MNT_PRCLOTS_WINNERS_SPEED_TEST W
     WHERE
       W.SPR_WIN IS NOT NULL
     GROUP BY
       IDPRC
   )
  SELECT
    tbl.IDPRC as IDMNT_PRC, -- Id закупки
    PRSLOTS_1_AGG.COUNT_ WINCOUNT--, -- Количество победителей
  FROM
    PRC tbl,
    PRSLOTS_1_AGG
  WHERE
    (tbl.IDPRC = PRSLOTS_1_AGG.IDPRC(+))


или
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT
    tbl.IDPRC as IDMNT_PRC, -- Id закупки
    PRSLOTS_1_AGG.COUNT_ WINCOUNT--, -- Количество победителей
  FROM
    PRC tbl,
    (SELECT 
       IDPRC,
       ROWNUM,
       COUNT(*) COUNT_ -- количество заявок, занявших 1-ое место В данной закупке
     FROM
       MNT_PRCLOTS_WINNERS_SPEED_TEST W
     WHERE
       IDPRC >= 47489 AND
       W.SPR_WIN IS NOT NULL
     GROUP BY
       IDPRC
   ) PRSLOTS_1_AGG
  WHERE
    (tbl.IDPRC = PRSLOTS_1_AGG.IDPRC(+))


Не дают изменения в скорости запроса?
Можно еще попробовать хинты merge(PRSLOTS_1_AGG) no_merge(PRSLOTS_1_AGG)
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Скорость выполнения подзапроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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