Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Долгое выполнение запроса / 18 сообщений из 18, страница 1 из 1
31.08.2021, 16:34
    #40094120
007alex3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
Всем привет. Помогите, пожалуйста, с выполнением запроса. Можно ли что-либо переписать в запросе для его ускорения?

Код: 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.
SELECT SYSDATE AS DATE_L,
       ta.OPER_MONTH,
       ta.AGENT_ID,
       ta.GAME_ID,
       ta.DRAW_ID,
       SUM(ta.TICKET_CNT) AS TICKET_CNT,
       SUM(ta.amount) AS AMOUNT
FROM (
      SELECT TRUNC(t.pay_date, 'MM') AS OPER_MONTH,
             t.pay_gate_agent_id AS AGENT_ID,
             t.id_game AS GAME_ID,
             t.id_draw_play AS DRAW_ID,
             COUNT(DISTINCT t.id_ticket_root) AS TICKET_CNT,
             SUM(t.win_amount) AS AMOUNT
      FROM DWH.T$ALL#TICKET t
      INNER JOIN dwh_mart.t$games g ON g.id = t.id_game AND g.game_is_active = 1 AND g.game_group <> 4
      WHERE t.pay_date >= to_date ('01.07.2021') 
        AND t.pay_date < to_date ('06.07.2021') 
        AND (t.payment_flag = 0 OR t.payment_flag IS NULL)
        AND t.pay_gate_agent_id <> 2404
      GROUP BY TRUNC(t.pay_date, 'MM'),
               t.pay_gate_agent_id,
               t.id_game,
               t.id_draw_play
               
      UNION ALL

      SELECT TRUNC(arm.oper_date, 'MM') AS OPER_MONTH,
             arm.agent_id AS AGENT_ID,
             arm.id_game AS GAME_ID,
             arm.id_draw_play AS DRAW_ID,
             COUNT(DISTINCT arm.ticket_barcode) AS TICKET_CNT,
             SUM(arm.amount) AS AMOUNT
      FROM ODS_MART.T$1CB#ARM_OPER arm
      WHERE arm.oper_date >= TO_DATE('01.07.2021')
       AND arm.oper_date < to_date ('06.07.2021') 
       AND arm.reg_ticket_type IN (0,2)   --гейтовые билеты
      GROUP BY TRUNC(arm.oper_date, 'MM'),
               arm.agent_id,
               arm.id_game,
               arm.id_draw_play
      ) ta
GROUP BY ta.OPER_MONTH,
         ta.AGENT_ID,
         ta.GAME_ID,
         ta.DRAW_ID
...
Рейтинг: 0 / 0
31.08.2021, 16:35
    #40094123
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
Для начала попробуйте победить PARTITION RANGE ALL
...
Рейтинг: 0 / 0
31.08.2021, 16:40
    #40094125
Timur Akhmadeev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
Покажите SQL Monitor / runtime статистику выполнения запроса, DDL объектов, и какое время выполнения запроса хотите в итоге получить.
...
Рейтинг: 0 / 0
31.08.2021, 17:00
    #40094131
007alex3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
andrey_anonymous
Для начала попробуйте победить PARTITION RANGE ALL
подскажите, пожалуйста, а каким образом его можно убрать? Просто у меня на таблицу наложены фильтры, не понимаю, почему all остается
...
Рейтинг: 0 / 0
31.08.2021, 17:01
    #40094132
007alex3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
Timur Akhmadeev,подскажите , пожалуйста, как собрать данную статистику? Данный запрос выполняется несколько секунд, но если выполнить его за месяц, то примерно 13 минут, хотел раза в два меньше
...
Рейтинг: 0 / 0
31.08.2021, 17:24
    #40094140
Timur Akhmadeev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
007alex3
Timur Akhmadeev,подскажите , пожалуйста, как собрать данную статистику? Данный запрос выполняется несколько секунд, но если выполнить его за месяц, то примерно 13 минут, хотел раза в два меньше

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
set serveroutput off linesize 300 pagesize 1000
col plan_table_output format a200

alter session set statistics_level=all;

SELECT ... ;

select * from table(dbms_xplan.display_cursor(null,null,'advanced allstats last +partition'));
...
Рейтинг: 0 / 0
31.08.2021, 17:32
    #40094141
007alex3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
Timur Akhmadeev, то что нужно?
...
Рейтинг: 0 / 0
31.08.2021, 17:42
    #40094144
Timur Akhmadeev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
Нет. Если это PL/SQL Developer, то выполнять в Command Window если мне память не изменяет.
Лучше в SQL*Plus
...
Рейтинг: 0 / 0
31.08.2021, 17:47
    #40094146
007alex3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
Timur Akhmadeev,
Код: 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.
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  cf06fwacdmgfk, child number 2
-------------------------------------
select 'x' from dual

Plan hash value: 308129442

--------------------------------------------------------------------------------
| Id  | Operation        | Name | Starts | E-Rows | Cost (%CPU)| E-Time   | A-Ro
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |      |      1 |        |     2 (100)|          |
|   1 |  FAST DUAL       |      |      1 |      1 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1 / DUAL@SEL$1

Outline Data
-------------

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      END_OUTLINE_DATA
  */

Query Block Registry:
---------------------

  <q o="2" f="y"><n><![CDATA[SEL$1]]></n><f><h><t><![CDATA[DUAL]]></t><s><![CDAT
        /s></h></f></q>
...
Рейтинг: 0 / 0
31.08.2021, 22:00
    #40094186
flexgen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
007alex3
Timur Akhmadeev,
Код: plsql
1.
2.
3.
4.
5.
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  cf06fwacdmgfk, child number 2
-------------------------------------
select 'x' from dual



А зачем ты select from dual прилепил? Надо было свой запрос вставлять.
...
Рейтинг: 0 / 0
01.09.2021, 10:42
    #40094275
007alex3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
flexgen, сделал как ты сказал, но почему-то статистика выводится по select * from dual....
...
Рейтинг: 0 / 0
01.09.2021, 10:43
    #40094276
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгое выполнение запроса
Выполните в sqlplus. Ваша IDE в промежутке между Вашими запросами выполняет свои собственные. Судя по скриншоту, Вы, вероятно, пользуетесь командным окном PL/SQL Developer. Если я прав, сделайте так:
  • на вкладке Editor разместите скрипт
  • переключитесь на вкладку Dialog
  • наберите команду sqlplus:
Код: plsql
1.
2.

  • SQL> sqlplus
    • нажмите Enter отпустите Enter
    Появится диалоговое окно, предлагающее сохранить скрипт перед выполнением. Сохранять не обязательно, на результат это не повлияет.
    ...
    Рейтинг: 0 / 0
    01.09.2021, 11:18
        #40094291
    007alex3
    Гость
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Долгое выполнение запроса
    спасибо большое!)
    ...
    Рейтинг: 0 / 0
    01.09.2021, 11:25
        #40094295
    007alex3
    Гость
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Долгое выполнение запроса
    flexgen, это то, что нужно?
    ...
    Рейтинг: 0 / 0
    01.09.2021, 11:25
        #40094296
    andrey_anonymous
    Участник
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Долгое выполнение запроса
    SET AUTOTRACE TRACEONLY
    ...и это, перестаньте уже постить скриншоты, уважайте коллег - делайте копи-паст текста в теге... да хоть SRC
    ...
    Рейтинг: 0 / 0
    01.09.2021, 11:25
        #40094297
    007alex3
    Гость
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Долгое выполнение запроса
    flexgen,это то, что нужно?
    ...
    Рейтинг: 0 / 0
    01.09.2021, 11:29
        #40094301
    007alex3
    Гость
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Долгое выполнение запроса
    andrey_anonymous, понял, спасибо большое ещё раз....

    Код: 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.
    Peeked Binds (identified by position):
    --------------------------------------
    
       1 - :1 (VARCHAR2(30), CSID=171): 'PLUS42111161'
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       2 - filter("STATEMENT_ID"=:1)
    
    Column Projection Information (identified by operation id):
    -----------------------------------------------------------
    
       2 - (cmp=2; rowset=256) "PLAN_TABLE".ROWID[ROWID,10], "STATEMENT_ID"[VARCHAR2,30]
    
    Note
    -----
       - dynamic statistics used: dynamic sampling (level=2)
    
    Query Block Registry:
    ---------------------
    
      <q o="2" f="y"><n><![CDATA[DEL$1]]></n><f><h><t><![CDATA[PLAN_TABLE]]></t><s><![CDATA[DEL$1]]></s></h></f></q>
    
    
    
    59 rows selected.
    
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 2381643777
    
    ----------------------------------------------------------------------------------------------------
    | Id  | Operation                         | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
    ----------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT                  |                |  8168 | 16336 |    29   (0)| 00:00:01 |
    |   1 |  COLLECTION ITERATOR PICKLER FETCH| DISPLAY_CURSOR |  8168 | 16336 |    29   (0)| 00:00:01 |
    ----------------------------------------------------------------------------------------------------
    
    
    Statistics
    ----------------------------------------------------------
             81  recursive calls
              0  db block gets
             25  consistent gets
              0  physical reads
              0  redo size
           3492  bytes sent via SQL*Net to client
            561  bytes received via SQL*Net from client
              5  SQL*Net roundtrips to/from client
              3  sorts (memory)
              0  sorts (disk)
             59  rows processed
    
    ...
    Рейтинг: 0 / 0
    01.09.2021, 11:31
        #40094305
    andrey_anonymous
    Участник
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Долгое выполнение запроса
    007alex3
    andrey_anonymous
    Для начала попробуйте победить PARTITION RANGE ALL
    подскажите, пожалуйста, а каким образом его можно убрать? Просто у меня на таблицу наложены фильтры, не понимаю, почему all остается

    Убедитесь, что наложены фильтры на ключ секционирования.
    Убедитесь, что наложены фильтры на ключ секционирования, а не на функцию от него.
    ...
    Рейтинг: 0 / 0
    Форумы / Oracle [игнор отключен] [закрыт для гостей] / Долгое выполнение запроса / 18 сообщений из 18, страница 1 из 1
    Найденые пользователи ...
    Разблокировать пользователей ...
    Читали форум (0):
    Пользователи онлайн (0):
    x
    x
    Закрыть


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