powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Долгое выполнение запроса
18 сообщений из 18, страница 1 из 1
Долгое выполнение запроса
    #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
Долгое выполнение запроса
    #40094123
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала попробуйте победить PARTITION RANGE ALL
...
Рейтинг: 0 / 0
Долгое выполнение запроса
    #40094125
Timur Akhmadeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите SQL Monitor / runtime статистику выполнения запроса, DDL объектов, и какое время выполнения запроса хотите в итоге получить.
...
Рейтинг: 0 / 0
Долгое выполнение запроса
    #40094131
007alex3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
Для начала попробуйте победить PARTITION RANGE ALL
подскажите, пожалуйста, а каким образом его можно убрать? Просто у меня на таблицу наложены фильтры, не понимаю, почему all остается
...
Рейтинг: 0 / 0
Долгое выполнение запроса
    #40094132
007alex3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timur Akhmadeev,подскажите , пожалуйста, как собрать данную статистику? Данный запрос выполняется несколько секунд, но если выполнить его за месяц, то примерно 13 минут, хотел раза в два меньше
...
Рейтинг: 0 / 0
Долгое выполнение запроса
    #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
Долгое выполнение запроса
    #40094141
007alex3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timur Akhmadeev, то что нужно?
...
Рейтинг: 0 / 0
Долгое выполнение запроса
    #40094144
Timur Akhmadeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Если это PL/SQL Developer, то выполнять в Command Window если мне память не изменяет.
Лучше в SQL*Plus
...
Рейтинг: 0 / 0
Долгое выполнение запроса
    #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
Долгое выполнение запроса
    #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
Долгое выполнение запроса
    #40094275
007alex3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
flexgen, сделал как ты сказал, но почему-то статистика выводится по select * from dual....
...
Рейтинг: 0 / 0
Долгое выполнение запроса
    #40094276
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполните в sqlplus. Ваша IDE в промежутке между Вашими запросами выполняет свои собственные. Судя по скриншоту, Вы, вероятно, пользуетесь командным окном PL/SQL Developer. Если я прав, сделайте так:
  • на вкладке Editor разместите скрипт
  • переключитесь на вкладку Dialog
  • наберите команду sqlplus:
Код: plsql
1.
2.

  • SQL> sqlplus
    • нажмите Enter отпустите Enter
    Появится диалоговое окно, предлагающее сохранить скрипт перед выполнением. Сохранять не обязательно, на результат это не повлияет.
    ...
    Рейтинг: 0 / 0
    Долгое выполнение запроса
        #40094291
    007alex3
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    спасибо большое!)
    ...
    Рейтинг: 0 / 0
    Долгое выполнение запроса
        #40094295
    007alex3
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    flexgen, это то, что нужно?
    ...
    Рейтинг: 0 / 0
    Долгое выполнение запроса
        #40094296
    Фотография andrey_anonymous
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    SET AUTOTRACE TRACEONLY
    ...и это, перестаньте уже постить скриншоты, уважайте коллег - делайте копи-паст текста в теге... да хоть SRC
    ...
    Рейтинг: 0 / 0
    Долгое выполнение запроса
        #40094297
    007alex3
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    flexgen,это то, что нужно?
    ...
    Рейтинг: 0 / 0
    Долгое выполнение запроса
        #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
    Долгое выполнение запроса
        #40094305
    Фотография andrey_anonymous
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    007alex3
    andrey_anonymous
    Для начала попробуйте победить PARTITION RANGE ALL
    подскажите, пожалуйста, а каким образом его можно убрать? Просто у меня на таблицу наложены фильтры, не понимаю, почему all остается

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


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