powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / With при работе с удаленными базами
4 сообщений из 4, страница 1 из 1
With при работе с удаленными базами
    #40032950
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С наступившим новым годом господа !

Пусть в этом году Вы решите все что успели отложить в 2020

Имею вопрос
Архитектурно пишу через WITH основная нагрузка такого механизма
- параметризация запросов
- развязка отдельных узлов PL/SQL кода
- материализация данных в одностроковую таблицу и участия в запросе только ядра базы
- при работе с распределенной базой исключение многократных связей между базами
(ну так хочу реализовать)

Имею код
Код: 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.
create or replace view AA10 as 
with P0 as (select Date '2020-12-25' DREP
              from DUAL
           ),
     P1 as (select 
                   --Date '2020-12-25' DREP
                   (select * from P0) DREP
              from DUAL@TTT1UA00.WORLD
           ),
     P2 as (select /*+ 
                       Materialize 
                   */
                   --Date '2020-12-25' DREP
                   (select * from P0) DREP
              from DUAL
           ),
     R1 as (select Count(*) F1,0 F2
              from ADBUS.V_KPS_DA_BY_COL@TTT1UA00.WORLD A
             inner join P1 B 
                on (    A.DATE_REP = B.DREP
                   )
           ),
     R2 as (select 0 F1,Count(*) F2
              from ADBUS.V_KPS_DA_BY_COL C
             inner join P2 D 
                on (    C.DATE_REP = D.DREP
                   )
          )
select *
  from R1
 union all
select *
  from R2  



Имею план
Код: 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.
Plan hash value: 3336955250
 
---------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                 | Name                        | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop | Inst   |IN-OUT|
---------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                          |                             |     2 |    52 |   214  (81)| 00:00:01 |       |       |        |      |
|   1 |  VIEW                                     | AA10                        |     2 |    52 |   214  (81)| 00:00:01 |       |       |        |      |
|   2 |   TEMP TABLE TRANSFORMATION               |                             |       |       |            |          |       |       |        |      |
|   3 |    LOAD AS SELECT (CURSOR DURATION MEMORY)| SYS_TEMP_0FD9D6D63_2AB6DBC9 |       |       |            |          |       |       |        |      |
|   4 |     FAST DUAL                             |                             |     1 |       |     3   (0)| 00:00:01 |       |       |        |      |
|   5 |     FAST DUAL                             |                             |     1 |       |     3   (0)| 00:00:01 |       |       |        |      |
|   6 |    UNION-ALL                              |                             |       |       |            |          |       |       |        |      |
|   7 |     VIEW                                  |                             |     1 |    15 |   193  (90)| 00:00:01 |       |       |        |      |
|   8 |      SORT AGGREGATE                       |                             |     1 |    15 |            |          |       |       |        |      |
|   9 |       FAST DUAL                           |                             |     1 |       |     3   (0)| 00:00:01 |       |       |        |      |
|  10 |       NESTED LOOPS                        |                             |   629K|  9219K|   193  (90)| 00:00:01 |       |       |        |      |
|  11 |        VIEW                               |                             |     1 |     6 |     5   (0)| 00:00:01 |       |       |        |      |
|  12 |         REMOTE                            | DUAL                        |     1 |       |     2   (0)| 00:00:01 |       |       | TTT1U~ | R->S |
|  13 |        REMOTE                             | V_KPS_DA_BY_COL             |   629K|  5531K|    15   (0)| 00:00:01 |       |       | TTT1U~ | R->S |
|  14 |     VIEW                                  |                             |     1 |    15 |    21   (0)| 00:00:01 |       |       |        |      |
|* 15 |      FILTER                               |                             |       |       |            |          |       |       |        |      |
|  16 |       SORT AGGREGATE                      |                             |     1 |    14 |            |          |       |       |        |      |
|  17 |        NESTED LOOPS                       |                             |   556K|  7615K|    21   (0)| 00:00:01 |       |       |        |      |
|  18 |         VIEW                              |                             |     1 |     6 |     3   (0)| 00:00:01 |       |       |        |      |
|  19 |          TABLE ACCESS FULL                | SYS_TEMP_0FD9D6D63_2AB6DBC9 |     1 |     9 |     3   (0)| 00:00:01 |       |       |        |      |
|  20 |         PARTITION RANGE ITERATOR          |                             |   556K|  4351K| 15051   (1)| 00:00:02 |   KEY |   KEY |        |      |
|  21 |          BITMAP CONVERSION TO ROWIDS      |                             |   556K|  4351K| 15051   (1)| 00:00:02 |       |       |        |      |
|* 22 |           BITMAP INDEX FAST FULL SCAN     | KPS_DBC_BIX3                |       |       |            |          |   KEY |   KEY |        |      |
---------------------------------------------------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
  15 - filter(SYS_AUDIT(1,'ADBUS','V_KPS_DA_BY_COL','S_KPS_DA_BY_COL',3) IS NULL)
  22 - filter("DATE_REP"=INTERNAL_FUNCTION("D"."DREP"))
 
Remote SQL Information (identified by operation id):
----------------------------------------------------
 
  12 - SELECT 0 FROM "DUAL" "DUAL" (accessing 'TTT1UA00.WORLD' )
 
  13 - SELECT "DATE_REP" FROM "ADBUS"."V_KPS_DA_BY_COL" "A" WHERE "DATE_REP"=:1 (accessing 'TTT1UA00.WORLD' )
 




Вопрос по строкам
| 12 | REMOTE | DUAL | 1 | | 2 (0)| 00:00:01 | | | TTT1U~ | R->S |
| 13 | REMOTE | V_KPS_DA_BY_COL | 629K| 5531K| 15 (0)| 00:00:01 | | | TTT1U~ | R->S |

Можно ли считать что база выполняет удаленный запрос оптимально
имел в виду следующее
передал ДАТА отчета -> все выполнил на удаленной базе -> вернул результат
или идут постоянные обращения между локальной и удаленной базами ?

Полагал что оптимальная работа удаленного запроса должны выглядить так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace view AA11 as 
with
     P1 as (select 
                   Date '2020-12-25' DREP
              from DUAL@TTT1UA00.WORLD
           ),
     R1 as (select Count(*) F1,0 F2
              from ADBUS.V_KPS_DA_BY_COL@TTT1UA00.WORLD A
             inner join P1 B 
                on (    A.DATE_REP = B.DREP
                   )
           )
select *
  from R1



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Plan hash value: 1788691278
 
--------------------------------------------------------------
| Id  | Operation        | Name | Cost (%CPU)| Inst   |IN-OUT|
--------------------------------------------------------------
|   0 | SELECT STATEMENT |      |     0   (0)|        |      |
|   1 |  REMOTE          |      |            | TTT1U~ | R->S |
--------------------------------------------------------------
 
Remote SQL Information (identified by operation id):
----------------------------------------------------
 
   1 - EXPLAIN PLAN INTO PLAN_TABLE@! FOR SELECT "A1"."F1","A1"."F2" 
       FROM  (SELECT COUNT(*) "F1",0 "F2" FROM "ADBUS"."V_KPS_DA_BY_COL" 
       "A3","DUAL" "A2" WHERE "A3"."DATE_REP"=TO_DATE(' 2020-12-25 00:00:00', 
       'syyyy-mm-dd hh24:mi:ss')) "A1" (accessing 'TTT1UA00.WORLD' )



Т.е. одноразовое обращение к удаленной базе
| 1 | REMOTE | | | TTT1U~ | R->S |

Если такое утверждение истинно - как из запроса представления AA10 реализовать
план обращения представления AA11 (with архитектуру не менять)

Заранее благодарен !
...
Рейтинг: 0 / 0
With при работе с удаленными базами
    #40032961
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
Заранее благодарен !
Заранее благодарный указал бы хотя бы версию.
...
Рейтинг: 0 / 0
With при работе с удаленными базами
    #40032970
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> select BANNER
  2    from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE	12.2.0.1.0	Production
TNS for Linux: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production
...
Рейтинг: 0 / 0
With при работе с удаленными базами
    #40033049
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Решение
Код: 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.
with
  P0 as (select /*+
                    Materialize
                */
                To_Date('25-12-2020','DD/MM/YYYY') DREP
           from DUAL
        ),
  P1 as (select /*+
                    Materialize
                */
                1 EXEC 
           from DUAL
          where PF_REPORT.PARAMETERS.Refresh@TTT1UA00.WORLD(sDrep=>(select DREP from P0)) is Null
        ),
  R1 as (      
         select Count(*) F1,0 F2
           from ADBUS.V_KPS_DA_BY_COL@TTT1UA00.WORLD A
          inner join PF_REPORT.SV_DAY_REPORT@TTT1UA00.WORLD B 
            on (    A.DATE_REP = B.DREP
                and Exists(select 1 from P1) 
               )
        ),       
  R2 as (      
         select Count(*) F1,0 F2
           from ADBUS.V_KPS_DA_BY_COL A
          inner join P0 B 
            on (    A.DATE_REP = B.DREP
               )
        )       
select *
  from R1
 union all
select *
  from R2



План
Код: 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.
Plan hash value: 2097077896
 
--------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                | Name                        | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop | Inst   |IN-OUT|
--------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                         |                             |     2 |    60 |    41   (0)| 00:00:01 |       |       |        |      |
|   1 |  TEMP TABLE TRANSFORMATION               |                             |       |       |            |          |       |       |        |      |
|   2 |   LOAD AS SELECT (CURSOR DURATION MEMORY)| SYS_TEMP_0FD9D6DD1_2AB6DBC9 |       |       |            |          |       |       |        |      |
|   3 |    FAST DUAL                             |                             |     1 |       |     3   (0)| 00:00:01 |       |       |        |      |
|   4 |   LOAD AS SELECT (CURSOR DURATION MEMORY)| SYS_TEMP_0FD9D6DD2_2AB6DBC9 |       |       |            |          |       |       |        |      |
|*  5 |    FILTER                                |                             |       |       |            |          |       |       |        |      |
|   6 |     FAST DUAL                            |                             |     1 |       |     3   (0)| 00:00:01 |       |       |        |      |
|   7 |     VIEW                                 |                             |     1 |     6 |     3   (0)| 00:00:01 |       |       |        |      |
|   8 |      TABLE ACCESS FULL                   | SYS_TEMP_0FD9D6DD1_2AB6DBC9 |     1 |     9 |     3   (0)| 00:00:01 |       |       |        |      |
|   9 |   UNION-ALL                              |                             |       |       |            |          |       |       |        |      |
|  10 |    VIEW                                  |                             |     1 |    15 |    20   (0)| 00:00:01 |       |       |        |      |
|  11 |     SORT AGGREGATE                       |                             |     1 |    18 |            |          |       |       |        |      |
|* 12 |      FILTER                              |                             |       |       |            |          |       |       |        |      |
|  13 |       REMOTE                             |                             |     1 |     9 |     2   (0)| 00:00:01 |       |       | TTT1U~ | R->S |
|  14 |       VIEW                               |                             |     1 |       |     3   (0)| 00:00:01 |       |       |        |      |
|  15 |        TABLE ACCESS FULL                 | SYS_TEMP_0FD9D6DD2_2AB6DBC9 |     1 |    13 |     3   (0)| 00:00:01 |       |       |        |      |
|  16 |    VIEW                                  |                             |     1 |    15 |    21   (0)| 00:00:01 |       |       |        |      |
|* 17 |     FILTER                               |                             |       |       |            |          |       |       |        |      |
|  18 |      SORT AGGREGATE                      |                             |     1 |    14 |            |          |       |       |        |      |
|  19 |       NESTED LOOPS                       |                             |   556K|  7615K|    21   (0)| 00:00:01 |       |       |        |      |
|  20 |        VIEW                              |                             |     1 |     6 |     3   (0)| 00:00:01 |       |       |        |      |
|  21 |         TABLE ACCESS FULL                | SYS_TEMP_0FD9D6DD1_2AB6DBC9 |     1 |     9 |     3   (0)| 00:00:01 |       |       |        |      |
|  22 |        PARTITION RANGE ITERATOR          |                             |   556K|  4351K| 15051   (1)| 00:00:02 |   KEY |   KEY |        |      |
|  23 |         BITMAP CONVERSION TO ROWIDS      |                             |   556K|  4351K| 15051   (1)| 00:00:02 |       |       |        |      |
|* 24 |          BITMAP INDEX FAST FULL SCAN     | KPS_DBC_BIX3                |       |       |            |          |   KEY |   KEY |        |      |
--------------------------------------------------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   5 - filter("PARAMETERS"."REFRESH"("SDREP"=> (SELECT "DREP" FROM  (SELECT /*+ CACHE ("T1") */ INTERNAL_FUNCTION("C0") "DREP" FROM 
              "SYS"."SYS_TEMP_0FD9D6DD1_2AB6DBC9" "T1") "P0")) IS NULL)
  12 - filter( EXISTS (SELECT 0 FROM  (SELECT /*+ CACHE ("T1") */ "C0" "EXEC" FROM "SYS"."SYS_TEMP_0FD9D6DD2_2AB6DBC9" "T1") "P1"))
  17 - filter(SYS_AUDIT(1,'ADBUS','V_KPS_DA_BY_COL','S_KPS_DA_BY_COL',3) IS NULL)
  24 - filter("DATE_REP"=INTERNAL_FUNCTION("B"."DREP"))
 
Remote SQL Information (identified by operation id):
----------------------------------------------------
 
  13 - SELECT "A1"."DREP","A2"."DATE_REP" FROM "PF_REPORT"."SV_DAY_REPORT" "A1","ADBUS"."V_KPS_DA_BY_COL" "A2" WHERE 
        "A2"."DATE_REP"="A1"."DREP" (accessing 'TTT1UA00.WORLD' )



| 13 | REMOTE | | 1 | 9 | 2 (0)| 00:00:01 | | | TTT1U~ | R->S |

Вроде "хотелка" получилась - обращение к удаленной базе единоразовое

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


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