powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тормоза при join-е нескольких таблиц чероз DBlink
25 сообщений из 54, страница 2 из 3
Тормоза при join-е нескольких таблиц чероз DBlink
    #39397403
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
также написан был и обсуждаемый запрос, но он работать отказался.
какая-то хня с этими линками, честное слово
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39397724
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasу меня есть рабочий код (собственно для которого я давно создавал тему), где идет вставка в локальную таблицу из нескольких линкованных таблиц через execute immediate. без хинта висит по полчаса, с хинтом пара минут всего
хотя Вячеслав Любомудров утверждал обратное.Это не только я утверждал, но и нота "Limitations of DRIVING_SITE Hint For DMLS and DDLS (Doc ID 825677.1)"
Хотя, тут я неправ -- когда все таблицы в запросе удаленные и на одном сайте , то да, все соединения могут быть выполнены на том удаленном сайте. Это работает как для INSERT, так и для CTAS (хотя из ноты я понял обратное). Оно, кстати, и без всякого DRIVING_SITE так выполнится.

Если хоть одна таблица локальная или на разных сайтах, то все будет выполнятся на target сайте (соответственно, при любом UPDATE/DELETE/MERGE тоже) и никакой DRIVING_SITE не поможет
Код: 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.
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.
--
-- Все таблички удаленные на одном сайте
--
tst> explain plan for
  2  select * from t1@tst_lnk a, t1@tst_lnk b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------
Plan hash value: 2031298245

----------------------------------------------------------------------------------------
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT REMOTE|      |     1 |     4 |     7  (15)| 00:00:01 |        |
|*  1 |  HASH JOIN             |      |     1 |     4 |     7  (15)| 00:00:01 |        |
|   2 |   TABLE ACCESS FULL    | T1   |     1 |     2 |     3   (0)| 00:00:01 |    TST |
|   3 |   TABLE ACCESS FULL    | T1   |     1 |     2 |     3   (0)| 00:00:01 |    TST |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("A2"."DUMMY"="A1"."DUMMY")

Note
-----
   - fully remote statement
   - dynamic sampling used for this statement (level=2)

20 rows selected.

tst> explain plan for
  2  insert into t2 select * from t1@tst_lnk a, t1@tst_lnk b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------
Plan hash value: 2014232345

----------------------------------------------------------------------
| Id  | Operation                | Name | Cost (%CPU)| Inst   |IN-OUT|
----------------------------------------------------------------------
|   0 | INSERT STATEMENT         |      |     0   (0)|        |      |
|   1 |  LOAD TABLE CONVENTIONAL | T2   |            |        |      |
|   2 |   REMOTE                 |      |            | TST_L~ | R->S |
----------------------------------------------------------------------

Remote SQL Information (identified by operation id):
----------------------------------------------------

   2 - EXPLAIN PLAN INTO PLAN_TABLE@! FOR SELECT
       "A2"."DUMMY","A1"."DUMMY" FROM "T1" "A2","T1" "A1" WHERE
       "A2"."DUMMY"="A1"."DUMMY" (accessing 'TST_LNK.FEB.RU' )


17 rows selected.

tst> explain plan for create table t3 as
  2  select a.dummy a, b.dummy b from t1@tst_lnk a, t1@tst_lnk b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------
Plan hash value: 4198801308

--------------------------------------------------------------------
| Id  | Operation              | Name | Cost (%CPU)| Inst   |IN-OUT|
--------------------------------------------------------------------
|   0 | CREATE TABLE STATEMENT |      |     0   (0)|        |      |
|   1 |  LOAD AS SELECT        | T3   |            |        |      |
|   2 |   REMOTE               |      |            | TST_L~ | R->S |
--------------------------------------------------------------------

Remote SQL Information (identified by operation id):
----------------------------------------------------

   2 - EXPLAIN PLAN INTO PLAN_TABLE@! FOR SELECT
       "A2"."DUMMY","A1"."DUMMY" FROM "T1" "A2","T1" "A1" WHERE
       "A2"."DUMMY"="A1"."DUMMY" (accessing 'TST_LNK.FEB.RU' )


17 rows selected.

--
-- Все таблички удаленные на разных сайтах
--
tst> explain plan for
  2  select /*+ driving_site(b) */ * from t1@tst_lnk a, t1@tst_lnk2 b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------
Plan hash value: 1661057672

-----------------------------------------------------------------------------------------------
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
-----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT REMOTE|      |   327 |  1308 |     6  (17)| 00:00:01 |        |      |
|*  1 |  HASH JOIN             |      |   327 |  1308 |     6  (17)| 00:00:01 |        |      |
|   2 |   TABLE ACCESS FULL    | T1   |     1 |     2 |     3   (0)| 00:00:01 |    TST |      |
|   3 |   REMOTE               | T1   |   327 |   654 |     2   (0)| 00:00:01 | TST_L~ | R->S |
-----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("A2"."DUMMY"="A1"."DUMMY")

Remote SQL Information (identified by operation id):
----------------------------------------------------

   3 - SELECT "DUMMY" FROM "T1"@TST_LNK.FEB.RU "A2" (accessing 'TST_LNK.FEB.RU' )


Note
-----
   - fully remote statement
   - dynamic sampling used for this statement (level=2)

26 rows selected.

tst> explain plan for
  2  insert into t2 select /*+ driving_site(b) */ * from t1@tst_lnk a, t1@tst_lnk2 b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------
Plan hash value: 1534287080

-------------------------------------------------------------------------------------------------
| Id  | Operation                | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
-------------------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT         |      |   327 |  1308 |     5  (20)| 00:00:01 |        |      |
|   1 |  LOAD TABLE CONVENTIONAL | T2   |       |       |            |          |        |      |
|*  2 |   HASH JOIN              |      |   327 |  1308 |     5  (20)| 00:00:01 |        |      |
|   3 |    REMOTE                | T1   |   327 |   654 |     2   (0)| 00:00:01 | TST_L~ | R->S |
|   4 |    REMOTE                | T1   |   327 |   654 |     2   (0)| 00:00:01 | TST_L~ | R->S |
-------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("A"."DUMMY"="B"."DUMMY")

Remote SQL Information (identified by operation id):
----------------------------------------------------

   3 - SELECT /*+ OPAQUE_TRANSFORM */ "DUMMY" FROM "T1" "A" (accessing 'TST_LNK.FEB.RU' )

   4 - SELECT /*+ OPAQUE_TRANSFORM */ "DUMMY" FROM "T1" "B" (accessing 'TST_LNK2.FEB.RU'
       )


25 rows selected.
--
-- Про локальные таблички и другие операции можешь сам посмотреть
--



PS. Все твои домыслы "так работает, так почему-то не работает" звучат не убедительно. Если действительно хочешь разобраться -- включай трассировку, смотри ожидания, реальный план.
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39397790
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудровbarrabasу меня есть рабочий код (собственно для которого я давно создавал тему), где идет вставка в локальную таблицу из нескольких линкованных таблиц через execute immediate. без хинта висит по полчаса, с хинтом пара минут всего
хотя Вячеслав Любомудров утверждал обратное.Это не только я утверждал, но и нота "Limitations of DRIVING_SITE Hint For DMLS and DDLS (Doc ID 825677.1)"
Хотя, тут я неправ -- когда все таблицы в запросе удаленные и на одном сайте , то да, все соединения могут быть выполнены на том удаленном сайте. Это работает как для INSERT, так и для CTAS (хотя из ноты я понял обратное). Оно, кстати, и без всякого DRIVING_SITE так выполнится.

Если хоть одна таблица локальная или на разных сайтах, то все будет выполнятся на target сайте (соответственно, при любом UPDATE/DELETE/MERGE тоже) и никакой DRIVING_SITE не поможет
Код: 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.
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.
--
-- Все таблички удаленные на одном сайте
--
tst> explain plan for
  2  select * from t1@tst_lnk a, t1@tst_lnk b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------
Plan hash value: 2031298245

----------------------------------------------------------------------------------------
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT REMOTE|      |     1 |     4 |     7  (15)| 00:00:01 |        |
|*  1 |  HASH JOIN             |      |     1 |     4 |     7  (15)| 00:00:01 |        |
|   2 |   TABLE ACCESS FULL    | T1   |     1 |     2 |     3   (0)| 00:00:01 |    TST |
|   3 |   TABLE ACCESS FULL    | T1   |     1 |     2 |     3   (0)| 00:00:01 |    TST |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("A2"."DUMMY"="A1"."DUMMY")

Note
-----
   - fully remote statement
   - dynamic sampling used for this statement (level=2)

20 rows selected.

tst> explain plan for
  2  insert into t2 select * from t1@tst_lnk a, t1@tst_lnk b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------
Plan hash value: 2014232345

----------------------------------------------------------------------
| Id  | Operation                | Name | Cost (%CPU)| Inst   |IN-OUT|
----------------------------------------------------------------------
|   0 | INSERT STATEMENT         |      |     0   (0)|        |      |
|   1 |  LOAD TABLE CONVENTIONAL | T2   |            |        |      |
|   2 |   REMOTE                 |      |            | TST_L~ | R->S |
----------------------------------------------------------------------

Remote SQL Information (identified by operation id):
----------------------------------------------------

   2 - EXPLAIN PLAN INTO PLAN_TABLE@! FOR SELECT
       "A2"."DUMMY","A1"."DUMMY" FROM "T1" "A2","T1" "A1" WHERE
       "A2"."DUMMY"="A1"."DUMMY" (accessing 'TST_LNK.FEB.RU' )


17 rows selected.

tst> explain plan for create table t3 as
  2  select a.dummy a, b.dummy b from t1@tst_lnk a, t1@tst_lnk b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------
Plan hash value: 4198801308

--------------------------------------------------------------------
| Id  | Operation              | Name | Cost (%CPU)| Inst   |IN-OUT|
--------------------------------------------------------------------
|   0 | CREATE TABLE STATEMENT |      |     0   (0)|        |      |
|   1 |  LOAD AS SELECT        | T3   |            |        |      |
|   2 |   REMOTE               |      |            | TST_L~ | R->S |
--------------------------------------------------------------------

Remote SQL Information (identified by operation id):
----------------------------------------------------

   2 - EXPLAIN PLAN INTO PLAN_TABLE@! FOR SELECT
       "A2"."DUMMY","A1"."DUMMY" FROM "T1" "A2","T1" "A1" WHERE
       "A2"."DUMMY"="A1"."DUMMY" (accessing 'TST_LNK.FEB.RU' )


17 rows selected.

--
-- Все таблички удаленные на разных сайтах
--
tst> explain plan for
  2  select /*+ driving_site(b) */ * from t1@tst_lnk a, t1@tst_lnk2 b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------
Plan hash value: 1661057672

-----------------------------------------------------------------------------------------------
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
-----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT REMOTE|      |   327 |  1308 |     6  (17)| 00:00:01 |        |      |
|*  1 |  HASH JOIN             |      |   327 |  1308 |     6  (17)| 00:00:01 |        |      |
|   2 |   TABLE ACCESS FULL    | T1   |     1 |     2 |     3   (0)| 00:00:01 |    TST |      |
|   3 |   REMOTE               | T1   |   327 |   654 |     2   (0)| 00:00:01 | TST_L~ | R->S |
-----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("A2"."DUMMY"="A1"."DUMMY")

Remote SQL Information (identified by operation id):
----------------------------------------------------

   3 - SELECT "DUMMY" FROM "T1"@TST_LNK.FEB.RU "A2" (accessing 'TST_LNK.FEB.RU' )


Note
-----
   - fully remote statement
   - dynamic sampling used for this statement (level=2)

26 rows selected.

tst> explain plan for
  2  insert into t2 select /*+ driving_site(b) */ * from t1@tst_lnk a, t1@tst_lnk2 b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------
Plan hash value: 1534287080

-------------------------------------------------------------------------------------------------
| Id  | Operation                | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
-------------------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT         |      |   327 |  1308 |     5  (20)| 00:00:01 |        |      |
|   1 |  LOAD TABLE CONVENTIONAL | T2   |       |       |            |          |        |      |
|*  2 |   HASH JOIN              |      |   327 |  1308 |     5  (20)| 00:00:01 |        |      |
|   3 |    REMOTE                | T1   |   327 |   654 |     2   (0)| 00:00:01 | TST_L~ | R->S |
|   4 |    REMOTE                | T1   |   327 |   654 |     2   (0)| 00:00:01 | TST_L~ | R->S |
-------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("A"."DUMMY"="B"."DUMMY")

Remote SQL Information (identified by operation id):
----------------------------------------------------

   3 - SELECT /*+ OPAQUE_TRANSFORM */ "DUMMY" FROM "T1" "A" (accessing 'TST_LNK.FEB.RU' )

   4 - SELECT /*+ OPAQUE_TRANSFORM */ "DUMMY" FROM "T1" "B" (accessing 'TST_LNK2.FEB.RU'
       )


25 rows selected.
--
-- Про локальные таблички и другие операции можешь сам посмотреть
--



PS. Все твои домыслы "так работает, так почему-то не работает" звучат не убедительно. Если действительно хочешь разобраться -- включай трассировку, смотри ожидания, реальный план.


Вячеслав Любомудровbarrabasу меня есть рабочий код (собственно для которого я давно создавал тему), где идет вставка в локальную таблицу из нескольких линкованных таблиц через execute immediate. без хинта висит по полчаса, с хинтом пара минут всего
хотя Вячеслав Любомудров утверждал обратное.Это не только я утверждал, но и нота "Limitations of DRIVING_SITE Hint For DMLS and DDLS (Doc ID 825677.1)"
Хотя, тут я неправ -- когда все таблицы в запросе удаленные и на одном сайте , то да, все соединения могут быть выполнены на том удаленном сайте. Это работает как для INSERT, так и для CTAS (хотя из ноты я понял обратное). Оно, кстати, и без всякого DRIVING_SITE так выполнится.

Если хоть одна таблица локальная или на разных сайтах, то все будет выполнятся на target сайте (соответственно, при любом UPDATE/DELETE/MERGE тоже) и никакой DRIVING_SITE не поможет
Код: 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.
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.
--
-- Все таблички удаленные на одном сайте
--
tst> explain plan for
  2  select * from t1@tst_lnk a, t1@tst_lnk b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------
Plan hash value: 2031298245

----------------------------------------------------------------------------------------
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT REMOTE|      |     1 |     4 |     7  (15)| 00:00:01 |        |
|*  1 |  HASH JOIN             |      |     1 |     4 |     7  (15)| 00:00:01 |        |
|   2 |   TABLE ACCESS FULL    | T1   |     1 |     2 |     3   (0)| 00:00:01 |    TST |
|   3 |   TABLE ACCESS FULL    | T1   |     1 |     2 |     3   (0)| 00:00:01 |    TST |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("A2"."DUMMY"="A1"."DUMMY")

Note
-----
   - fully remote statement
   - dynamic sampling used for this statement (level=2)

20 rows selected.

tst> explain plan for
  2  insert into t2 select * from t1@tst_lnk a, t1@tst_lnk b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------
Plan hash value: 2014232345

----------------------------------------------------------------------
| Id  | Operation                | Name | Cost (%CPU)| Inst   |IN-OUT|
----------------------------------------------------------------------
|   0 | INSERT STATEMENT         |      |     0   (0)|        |      |
|   1 |  LOAD TABLE CONVENTIONAL | T2   |            |        |      |
|   2 |   REMOTE                 |      |            | TST_L~ | R->S |
----------------------------------------------------------------------

Remote SQL Information (identified by operation id):
----------------------------------------------------

   2 - EXPLAIN PLAN INTO PLAN_TABLE@! FOR SELECT
       "A2"."DUMMY","A1"."DUMMY" FROM "T1" "A2","T1" "A1" WHERE
       "A2"."DUMMY"="A1"."DUMMY" (accessing 'TST_LNK.FEB.RU' )


17 rows selected.

tst> explain plan for create table t3 as
  2  select a.dummy a, b.dummy b from t1@tst_lnk a, t1@tst_lnk b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------
Plan hash value: 4198801308

--------------------------------------------------------------------
| Id  | Operation              | Name | Cost (%CPU)| Inst   |IN-OUT|
--------------------------------------------------------------------
|   0 | CREATE TABLE STATEMENT |      |     0   (0)|        |      |
|   1 |  LOAD AS SELECT        | T3   |            |        |      |
|   2 |   REMOTE               |      |            | TST_L~ | R->S |
--------------------------------------------------------------------

Remote SQL Information (identified by operation id):
----------------------------------------------------

   2 - EXPLAIN PLAN INTO PLAN_TABLE@! FOR SELECT
       "A2"."DUMMY","A1"."DUMMY" FROM "T1" "A2","T1" "A1" WHERE
       "A2"."DUMMY"="A1"."DUMMY" (accessing 'TST_LNK.FEB.RU' )


17 rows selected.

--
-- Все таблички удаленные на разных сайтах
--
tst> explain plan for
  2  select /*+ driving_site(b) */ * from t1@tst_lnk a, t1@tst_lnk2 b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------
Plan hash value: 1661057672

-----------------------------------------------------------------------------------------------
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
-----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT REMOTE|      |   327 |  1308 |     6  (17)| 00:00:01 |        |      |
|*  1 |  HASH JOIN             |      |   327 |  1308 |     6  (17)| 00:00:01 |        |      |
|   2 |   TABLE ACCESS FULL    | T1   |     1 |     2 |     3   (0)| 00:00:01 |    TST |      |
|   3 |   REMOTE               | T1   |   327 |   654 |     2   (0)| 00:00:01 | TST_L~ | R->S |
-----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("A2"."DUMMY"="A1"."DUMMY")

Remote SQL Information (identified by operation id):
----------------------------------------------------

   3 - SELECT "DUMMY" FROM "T1"@TST_LNK.FEB.RU "A2" (accessing 'TST_LNK.FEB.RU' )


Note
-----
   - fully remote statement
   - dynamic sampling used for this statement (level=2)

26 rows selected.

tst> explain plan for
  2  insert into t2 select /*+ driving_site(b) */ * from t1@tst_lnk a, t1@tst_lnk2 b where a.dummy=b.dummy;

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------
Plan hash value: 1534287080

-------------------------------------------------------------------------------------------------
| Id  | Operation                | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
-------------------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT         |      |   327 |  1308 |     5  (20)| 00:00:01 |        |      |
|   1 |  LOAD TABLE CONVENTIONAL | T2   |       |       |            |          |        |      |
|*  2 |   HASH JOIN              |      |   327 |  1308 |     5  (20)| 00:00:01 |        |      |
|   3 |    REMOTE                | T1   |   327 |   654 |     2   (0)| 00:00:01 | TST_L~ | R->S |
|   4 |    REMOTE                | T1   |   327 |   654 |     2   (0)| 00:00:01 | TST_L~ | R->S |
-------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("A"."DUMMY"="B"."DUMMY")

Remote SQL Information (identified by operation id):
----------------------------------------------------

   3 - SELECT /*+ OPAQUE_TRANSFORM */ "DUMMY" FROM "T1" "A" (accessing 'TST_LNK.FEB.RU' )

   4 - SELECT /*+ OPAQUE_TRANSFORM */ "DUMMY" FROM "T1" "B" (accessing 'TST_LNK2.FEB.RU'
       )


25 rows selected.
--
-- Про локальные таблички и другие операции можешь сам посмотреть
--



PS. Все твои домыслы "так работает, так почему-то не работает" звучат не убедительно. Если действительно хочешь разобраться -- включай трассировку, смотри ожидания, реальный план.

да, на самом деле для получения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
---------------------------------------------------------------------------------------
| Id | Operation                 | Name         | Rows   | Bytes    | Cost | Time     |
---------------------------------------------------------------------------------------
|  0 | INSERT STATEMENT          |              | 160975 | 37185225 | 4144 | 00:00:50 |
|  1 |   LOAD TABLE CONVENTIONAL | BUF_CARD     |        |          |      |          |
|  2 |    SEQUENCE               | SEQ_BUF_CARD |        |          |      |          |
|  3 |     VIEW                  |              | 160975 | 37185225 | 4144 | 00:00:50 |
|  4 |      REMOTE               |              |        |          |      |          |
---------------------------------------------------------------------------------------

достаточно было NO_MERGE, DRIVING_SITE не влиял никак

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
      select 
             seq_buf_card.NEXTVAL, :vPackageNum,   
             'N', 0, :vExtAppName, :vExtAppId, 'N',
             CARD_NUM,  INT_SUBJ_ID, SUBJ_NAME,
             CARD_STATUS, CARD_REM, STATUS_DATE, CARD_TYPE_ID,
             FLAG_LIMIT_SCHEME, ISSUE_DATE
        from (
         select /*+  NO_MERGE */      
                c.GR_NOMER CARD_NUM,  
                c.ID_VLADELTZA INT_SUBJ_ID,  f.NAME SUBJ_NAME,
                c.ID_SOSTOYANYA CARD_STATUS, TRIM(c.DERJATEL) CARD_REM,  
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39397791
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без хинта NO_MERGE и при любых вариациях DRIVING_SITE

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
----------------------------------------------------------------------------------------
| Id  | Operation                 | Name         | Rows   | Bytes    | Cost | Time     |
----------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT          |              | 160975 | 44912025 | 4144 | 00:00:50 |
|   1 |   LOAD TABLE CONVENTIONAL | BUF_CARD     |        |          |      |          |
|   2 |    SORT AGGREGATE         |              |      1 |       26 |      |          |
|   3 |     REMOTE                | ECFIL015     |      3 |       78 |    4 | 00:00:01 |
|   4 |    SORT AGGREGATE         |              |      1 |       51 |      |          |
|   5 |     REMOTE                | ECFIL028     |      1 |       51 |    4 | 00:00:01 |
|   6 |    SEQUENCE               | SEQ_BUF_CARD |        |          |      |          |
| * 7 |     HASH JOIN RIGHT OUTER |              | 160975 | 44912025 | 4144 | 00:00:50 |
|   8 |      REMOTE               | ECFIL002     |  10689 |   801675 |   86 | 00:00:02 |
|   9 |      REMOTE               |              | 160975 | 28653550 | 1615 | 00:00:20 |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
------------------------------------------
* 7 - access("C"."ID_VLADELTZA"="F"."ID_FIRMY"(+))
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39397797
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

Не работал пример с курсором . По времени выполнения и без плана было понятно , что хинт не пользовался. В этом загвоздка.
Хотя бы угадать, как оптимизатор обрабатывает запрос с удаленными таблицам с применением pl/sql типов.
А вы делаете теоретические выкладки.
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39397799
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но почему план чисто в SQL, в plsql блоках for c in (select ...) и в open c for 'select ' разный я так и не понял.
еще и при разных способах фетча (с bulk collect и без)
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39397808
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnetИнтересно, что с fetch хинт не влияет на план запроса , а с fetch bulk collect влияет.
кстати, такое ощущение что хин не работает вообще.
с fetch bulk collect работает 2 секунды что с хинтом что без.
а простой фетч висит 15 минут, так-же на хинт не обращая внимания.
записей всего 8000 в результате получаю, т.е. это не то чтобы долгая построчная выборка
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398295
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще наблюдение
переписываю на forall загрузку транзакций из внешней системы
в ней дата хранится как дата без времени и в отдельном поле время в виде кол-ва секунд в дне
если фетчить получать поля по отдельности - все ок
если написать в запросе t.DATA + t.VREMYA/86400 OPER_DATE, чтобы получить дату со временем сразу, план ломается и все старания летят к чертям.
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398549
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnetНе работал пример с курсором . По времени выполнения и без плана было понятно , что хинт не пользовался. В этом загвоздка.
Хотя бы угадать, как оптимизатор обрабатывает запрос с удаленными таблицам с применением pl/sql типов.
А вы делаете теоретические выкладки.Если ты не знаешь, как это работает (должно работать), то метаться методом тыка можно долго.
Например, некоторые вещи работать просто не будут, они так устроены (тот же DRIVING_SITE)
А если не работает то, что по всем прикидкам должно работать, то нужно и подходить более серьезно -- делать трассировку, смотреть планы, ожидания. А не метаться со всякими "давай попробуем так, а еще так" и делать глубокомысленные выводы из обрывков информации, неизвестно когда и на каких данных полученной
Это если, конечно, интересен результат, а не процесс

PS. Это, конечно, больше к ТС. Остальным, собственно, пофиг, какие давать советы, можно и "пометаться" и "выводы поделать"
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398579
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровPS. Это, конечно, больше к ТС. Остальным, собственно, пофиг, какие давать советы, можно и "пометаться" и "выводы поделать" Зато можно почувствовать себя "мега -исследователем", несмотря на переливание из пустого в порожнее.
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398627
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВячеслав ЛюбомудровPS. Это, конечно, больше к ТС. Остальным, собственно, пофиг, какие давать советы, можно и "пометаться" и "выводы поделать" Зато можно почувствовать себя "мега -исследователем", несмотря на переливание из пустого в порожнее.Если это про меня, то да, мне интересно "поисследовать" что-то, с чем мне не приходится (часто) сталкиваться
Ну и записать, ибо так оно лучше запоминается. Ну не писать же в свой блокнотик, его же никто не прочитает, чтож я, зря старался?
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398637
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЕсли это про меняНет, конечно же.
Вячеслав Любомудровчтож я, зря старался?И истинных исследователей это основной результат.
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398641
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
господа, планы я смотрю (выкладывал тут в том числе)
но как план мне поможет понять почему он именно такой?
т.е.
Код: 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.
select 
                t.TRN_GUID                                    EXT_OPER_GUID,
                t.DATA                                      EXT_DATE,
                t.VREMYA                                     EXT_TIME_SEC,
                t.ID_PRINADL                                 EXT_SUBJ_TYPE_ID,
                t.ID_KLIENTA                                 ID_KLIENTA,
                s.ID_KLIENTA_IMPORTA                         ID_KLIENTA_IMPORTA,
                t.ID_PRICHINY                                OPER_REASON,
                t.OPERATZIYA                                 OPER_OPER,
                t.ID_KOSH_ZA_CHTO                            EXT_GOODS_ID,
                t.ID_KOSH_SCHEM                              EXT_PAY_GOODS_ID,             
                (select c.ID_KOSHELKA from XXX.ECFIL061@XXX c
                  where c.ID_EMITENTA = t.EM_GDE_OBSL and c.ID_PRIVYAZKI_LOCAL = t.ID_KOSH_ZA_CHTO) PP_LOCAL_GOODS_ID, 
                (select c.ID_PRIVYAZKI_GLOB from  XXX.ECFIL061@XXX c
                  where c.ID_EMITENTA = y.ID_EMITENT and c.ID_KOSHELKA = t.ID_KOSH_ZA_CHTO) PP_GLOBAL_GOODS_ID,
                t.SUMMA_ZA_CHTO                              SUMMA_ZA_CHTO,
                t.SUMMA_CHEM_REALNO                          SUMMA_CHEM_REALNO,
                t.BASE_DELTA_PRICE                           BASE_DELTA_PRICE,
                t.BASE_DELTA_SUM                             BASE_DELTA_SUM,   
                t.TZENA_TERMINALA                            TZENA_TERMINALA, 
                t.TZENA_PERESCHETA                           TZENA_PERESCHETA,
                t.NOMER_SCHEMY                               NOMER_SCHEMY,
                XXX.Get_Price@XXX(TZENA_TERMINALA, TZENA_PERESCHETA, NOMER_SCHEMY) GET_PRICE_VALUE,
                t.GR_NOMER                                   CARD_NUM_GRAPH,
                t.EM_GDE_OBSL                                TERM_ISS_NUM,
                t.NOMER_TERMINALA                            TERM_NUM,
                t.FILIAL_WHERE                               TERM_FILIAL,
                t.ID_TO                                      EXT_POS_ID,
                l.NAZVANIE                                   EXT_POS_NAME,
                l.ADRES                                      EXT_POS_ADDRESS,
                t.GR_NOMER_KARTY_OPER                        OP_CARD_NUM_GRAPH,
                case
                   when t.ID_PRICHINY in (50,60) then
                       (select to_char(i.ID_GR_OP)||'.'||to_char(i.NOMER_V_GRUPPE)
                          from XXX.ECFIL148@XXX i
                         where i.GUID_GENERATED = t.TRN_GUID
                        )
                   when t.ID_PRICHINY in (51,61) then
                       (select to_char(i.ID_GR_OP)||'.'||to_char(i.NOMER_V_GRUPPE)
                          from XXX.ECFIL148@XXX i
                         where i.DATA_OBSL = t.DATA and i.VREMYA_OBSL = t.VREMYA
                           and i.GUID_RETURNED = t.TRN_GUID
                        )
                   when t.ID_PRICHINY in (52,62) then
                       (select to_char(i.ID_GR_OP)||'.'||to_char(i.NOMER_V_GRUPPE)
                          from XXX.ECFIL148@XXX i
                         where i.DATA_OBSL = t.DATA and i.VREMYA_OBSL = t.VREMYA
                           and i.GUID_REALIZED = t.TRN_GUID
                        )
                   else null
                end                                          OPER_GROUP_CODE,
                u.MANAGER_ID                                 EXT_MANAGER_CODE
           from XXX.P5CONFIG@XXX y,  XXX.ECFIL139@XXX t, 
                (select ID_FIRMY, 2 ID_PRINADL, MANAGER_ID from XXX.ECFIL002@XXX) u, 
                XXX.ECFIL108@XXX s,
                XXX.ECFIL037@XXX l
          where 1=1  and t.DATA = sysdate and t.DATA = sysdate - 1  and t.ID_KLIENTA = s.ID_NASHEGO_KLIENTA (+)
            and t.ID_PRINADL = s.ID_PRINADLEJNOSTI (+)
            and t.ID_KLIENTA = u.ID_FIRMY (+)
            and t.ID_PRINADL = u.ID_PRINADL (+)                  
            and t.ID_TO = l.ID_TOCHKI_OBSLUGIVANIYA (+)
            and t.EM_GDE_OBSL = l.ID_EMITENT (+)
            and t.FILIAL_WHERE = l.ID_FILIALA (+)


даёт нужный
Код: plaintext
1.
2.
3.
4.
5.
6.
--------------------------------------------------------------
| Id  | Operation        | Name | Cost (%CPU)| Inst   |IN-OUT|
--------------------------------------------------------------
|   0 | SELECT STATEMENT |      |     0   (0)|        |      |
|   1 |  REMOTE          |      |            | MAG25~ | R->S |
--------------------------------------------------------------

а если напишу t.DATA + VREMYA/86400, чтобы получить дату и время в одном поле

Код: 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.
select 
                t.TRN_GUID                                    EXT_OPER_GUID,
[color=red]                t.DATA + VREMYA/86400                         OPER_DATE,[/color]
                t.ID_PRINADL                                 EXT_SUBJ_TYPE_ID,
                t.ID_KLIENTA                                 ID_KLIENTA,
                s.ID_KLIENTA_IMPORTA                         ID_KLIENTA_IMPORTA,
                t.ID_PRICHINY                                OPER_REASON,
                t.OPERATZIYA                                 OPER_OPER,
                t.ID_KOSH_ZA_CHTO                            EXT_GOODS_ID,
                t.ID_KOSH_SCHEM                              EXT_PAY_GOODS_ID,             
                (select c.ID_KOSHELKA from XXX.ECFIL061@XXX c
                  where c.ID_EMITENTA = t.EM_GDE_OBSL and c.ID_PRIVYAZKI_LOCAL = t.ID_KOSH_ZA_CHTO) PP_LOCAL_GOODS_ID, 
                (select c.ID_PRIVYAZKI_GLOB from  XXX.ECFIL061@XXX c
                  where c.ID_EMITENTA = y.ID_EMITENT and c.ID_KOSHELKA = t.ID_KOSH_ZA_CHTO) PP_GLOBAL_GOODS_ID,
                t.SUMMA_ZA_CHTO                              SUMMA_ZA_CHTO,
                t.SUMMA_CHEM_REALNO                          SUMMA_CHEM_REALNO,
                t.BASE_DELTA_PRICE                           BASE_DELTA_PRICE,
                t.BASE_DELTA_SUM                             BASE_DELTA_SUM,   
                t.TZENA_TERMINALA                            TZENA_TERMINALA, 
                t.TZENA_PERESCHETA                           TZENA_PERESCHETA,
                t.NOMER_SCHEMY                               NOMER_SCHEMY,
                XXX.Get_Price@XXX(TZENA_TERMINALA, TZENA_PERESCHETA, NOMER_SCHEMY) GET_PRICE_VALUE,
                t.GR_NOMER                                   CARD_NUM_GRAPH,
                t.EM_GDE_OBSL                                TERM_ISS_NUM,
                t.NOMER_TERMINALA                            TERM_NUM,
                t.FILIAL_WHERE                               TERM_FILIAL,
                t.ID_TO                                      EXT_POS_ID,
                l.NAZVANIE                                   EXT_POS_NAME,
                l.ADRES                                      EXT_POS_ADDRESS,
                t.GR_NOMER_KARTY_OPER                        OP_CARD_NUM_GRAPH,
                case
                   when t.ID_PRICHINY in (50,60) then
                       (select to_char(i.ID_GR_OP)||'.'||to_char(i.NOMER_V_GRUPPE)
                          from XXX.ECFIL148@XXX i
                         where i.GUID_GENERATED = t.TRN_GUID
                        )
                   when t.ID_PRICHINY in (51,61) then
                       (select to_char(i.ID_GR_OP)||'.'||to_char(i.NOMER_V_GRUPPE)
                          from XXX.ECFIL148@XXX i
                         where i.DATA_OBSL = t.DATA and i.VREMYA_OBSL = t.VREMYA
                           and i.GUID_RETURNED = t.TRN_GUID
                        )
                   when t.ID_PRICHINY in (52,62) then
                       (select to_char(i.ID_GR_OP)||'.'||to_char(i.NOMER_V_GRUPPE)
                          from XXX.ECFIL148@XXX i
                         where i.DATA_OBSL = t.DATA and i.VREMYA_OBSL = t.VREMYA
                           and i.GUID_REALIZED = t.TRN_GUID
                        )
                   else null
                end                                          OPER_GROUP_CODE,
                u.MANAGER_ID                                 EXT_MANAGER_CODE
           from XXX.P5CONFIG@XXX y,  XXX.ECFIL139@XXX t, 
                (select ID_FIRMY, 2 ID_PRINADL, MANAGER_ID from XXX.ECFIL002@XXX) u, 
                XXX.ECFIL108@XXX s,
                XXX.ECFIL037@XXX l
          where 1=1  and t.DATA = sysdate and t.DATA = sysdate - 1  and t.ID_KLIENTA = s.ID_NASHEGO_KLIENTA (+)
            and t.ID_PRINADL = s.ID_PRINADLEJNOSTI (+)
            and t.ID_KLIENTA = u.ID_FIRMY (+)
            and t.ID_PRINADL = u.ID_PRINADL (+)                  
            and t.ID_TO = l.ID_TOCHKI_OBSLUGIVANIYA (+)
            and t.EM_GDE_OBSL = l.ID_EMITENT (+)
            and t.FILIAL_WHERE = l.ID_FILIALA (+)


получу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
--------------------------------------------------------------------------------------------------
| Id  | Operation                | Name     | Rows  | Bytes |TempSpc| Cost (%CPU)| Inst   |IN-OUT|
--------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT         |          | 12580 |  4963K|       |  1263   (1)|        |      |
|   1 |  REMOTE                  | ECFIL061 |     1 |    12 |       |     3   (0)| MAG25~ | R->S |
|   2 |  REMOTE                  | ECFIL061 |     1 |    12 |       |     2   (0)| MAG25~ | R->S |
|   3 |  REMOTE                  | ECFIL148 |     2 |    88 |       |     4   (0)| MAG25~ | R->S |
|   4 |  REMOTE                  | ECFIL148 |     1 |    66 |       |     4   (0)| MAG25~ | R->S |
|   5 |  REMOTE                  | ECFIL148 |     1 |    66 |       |     4   (0)| MAG25~ | R->S |
|   6 |  FILTER                  |          |       |       |       |            |        |      |
|   7 |   HASH JOIN RIGHT OUTER  |          | 12580 |  4963K|       |  1263   (1)|        |      |
|   8 |    VIEW                  |          | 10689 |   302K|       |    87   (2)|        |      |
|   9 |     REMOTE               | ECFIL002 | 10689 |   271K|       |    87   (2)| MAG25~ | R->S |
|  10 |    HASH JOIN RIGHT OUTER |          | 12580 |  4606K|       |  1177   (1)|        |      |
|  11 |     REMOTE               | ECFIL108 |  9903 | 99030 |       |     8   (0)| MAG25~ | R->S |
|  12 |     HASH JOIN OUTER      |          | 12580 |  4484K|  3416K|  1168   (1)|        |      |
|  13 |      MERGE JOIN CARTESIAN|          | 12580 |  3267K|       |   733  (27)|        |      |
|  14 |       REMOTE             | P5CONFIG |     1 |    13 |       |     5   (0)| MAG25~ | R->S |
|  15 |       BUFFER SORT        |          | 12580 |  3108K|       |   728  (27)|        |      |
|  16 |        REMOTE            | ECFIL139 | 12580 |  3108K|       |   534   (0)| MAG25~ | R->S |
|  17 |      REMOTE              | ECFIL037 | 54316 |  5251K|       |   177   (1)| MAG25~ | R->S |
--------------------------------------------------------------------------------------------------


что с того что я узнаю что план строится неправильный при простом fetch, а не fetch bulk collect на одном запросе? я и так по времени что неправильно работает. как трассировка бы помогла выбрать именно fetch bulk collect ?
как она помогла бы с t.DATA + VREMYA/86400?
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398644
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет ли переменной с именем VREMYA ?
Ну и возможно стоит переходить на 10053 -- сам я в этом не силен, но иногда удается понять почему был выбран именно такой план
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398645
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот и приходится перебирать варианты и искать тормозные куски в запросе постепенно подключая их
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398646
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровНет ли переменной с именем VREMYA ?
Ну и возможно стоит переходить на 10053 -- сам я в этом не силен, но иногда удается понять почему был выбран именно такой план
нет. я транслитом переменные не называю :)
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398647
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо перебирать, надо постараться понять -- почему
Для этого есть инструменты и надо научиться ими пользоваться
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398648
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10053?
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398649
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровНе надо перебирать, надо постараться понять -- почему
Для этого есть инструменты и надо научиться ими пользоваться

ну с t.DATA + t.VREMYA/86400 как понять то?
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398651
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasВячеслав ЛюбомудровНет ли переменной с именем VREMYA ?
Ну и возможно стоит переходить на 10053 -- сам я в этом не силен, но иногда удается понять почему был выбран именно такой план
нет. я транслитом переменные не называю :)
там реально было t.DATA + t.VREMYA/86400 конечно. это уже в сейчас скопировал неудачно. план это не меняет
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398652
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasну с t.DATA + t.VREMYA/86400 как понять то?Ну тут просто - оторвать горе-архитектору ногти по самые уши.
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398653
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще такие "метания", как разные, например, NLS_* настройки у текущей сессии и сессии по db-линку (на мой взгляд, это может повлиять на всякие сортировки/группировки)
Опять же, локальные переменные, передаваемые как бинды -- возможно, не всегда их можно передать
В общем, если 10046 кажет явно неожиданный план и его не удается хинтами отправить выполняться на удаленный узел (к моему стыду, я не сильно вчитывался в твои листинги и не понял, что все [не]выполняется на одном удаленном узле), то наверное, есть смысл подключать тяжелую артилерию в виде 10053
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39398654
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicbarrabasну с t.DATA + t.VREMYA/86400 как понять то?Ну тут просто - оторвать горе-архитектору ногти по самые уши.
это внешняя система данная нам в ощущениях


а пот мегаинформативный трейс
Код: 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.
PARSE #1331077304:c=0,e=66717,p=0,cr=0,cu=2,mis=0,r=0,dep=0,og=1,plh=4204221517,tim=6659453107384
EXEC #1331077304:c=0,e=329,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=4204221517,tim=6659453108216
FETCH #1331077304:c=0,e=14,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=4204221517,tim=6659453110210
STAT #1331077304 id=1 cnt=0 pid=0 pos=1 obj=0 op='REMOTE  ECFIL061 (cr=0 pr=0 pw=0 time=0 us cost=3 size=12 card=1)'
STAT #1331077304 id=2 cnt=0 pid=0 pos=2 obj=0 op='REMOTE  ECFIL061 (cr=0 pr=0 pw=0 time=0 us cost=2 size=12 card=1)'
STAT #1331077304 id=3 cnt=0 pid=0 pos=3 obj=0 op='REMOTE  ECFIL148 (cr=0 pr=0 pw=0 time=0 us cost=4 size=88 card=2)'
STAT #1331077304 id=4 cnt=0 pid=0 pos=4 obj=0 op='REMOTE  ECFIL148 (cr=0 pr=0 pw=0 time=0 us cost=4 size=66 card=1)'
STAT #1331077304 id=5 cnt=0 pid=0 pos=5 obj=0 op='REMOTE  ECFIL148 (cr=0 pr=0 pw=0 time=0 us cost=4 size=66 card=1)'
STAT #1331077304 id=6 cnt=0 pid=0 pos=6 obj=0 op='FILTER  (cr=0 pr=0 pw=0 time=6 us)'
STAT #1331077304 id=7 cnt=0 pid=6 pos=1 obj=0 op='HASH JOIN RIGHT OUTER (cr=0 pr=0 pw=0 time=0 us cost=1263 size=5081916 card=12579)'
STAT #1331077304 id=8 cnt=0 pid=7 pos=1 obj=0 op='VIEW  (cr=0 pr=0 pw=0 time=0 us cost=87 size=309981 card=10689)'
STAT #1331077304 id=9 cnt=0 pid=8 pos=1 obj=0 op='REMOTE  ECFIL002 (cr=0 pr=0 pw=0 time=0 us cost=87 size=277914 card=10689)'
STAT #1331077304 id=10 cnt=0 pid=7 pos=2 obj=0 op='HASH JOIN RIGHT OUTER (cr=0 pr=0 pw=0 time=0 us cost=1177 size=4717125 card=12579)'
STAT #1331077304 id=11 cnt=0 pid=10 pos=1 obj=0 op='REMOTE  ECFIL108 (cr=0 pr=0 pw=0 time=0 us cost=8 size=99030 card=9903)'
STAT #1331077304 id=12 cnt=0 pid=10 pos=2 obj=0 op='HASH JOIN OUTER (cr=0 pr=0 pw=0 time=0 us cost=1168 size=4591335 card=12579)'
STAT #1331077304 id=13 cnt=0 pid=12 pos=1 obj=0 op='MERGE JOIN CARTESIAN (cr=0 pr=0 pw=0 time=0 us cost=733 size=3346014 card=12579)'
STAT #1331077304 id=14 cnt=0 pid=13 pos=1 obj=0 op='REMOTE  P5CONFIG (cr=0 pr=0 pw=0 time=0 us cost=5 size=13 card=1)'
STAT #1331077304 id=15 cnt=0 pid=13 pos=2 obj=0 op='BUFFER SORT (cr=0 pr=0 pw=0 time=0 us cost=728 size=3182487 card=12579)'
STAT #1331077304 id=16 cnt=0 pid=15 pos=1 obj=0 op='REMOTE  ECFIL139 (cr=0 pr=0 pw=0 time=0 us cost=534 size=3182487 card=12579)'
STAT #1331077304 id=17 cnt=0 pid=12 pos=2 obj=0 op='REMOTE  ECFIL037 (cr=0 pr=0 pw=0 time=0 us cost=177 size=5377284 card=54316)'
CLOSE #1331077304:c=0,e=11,dep=0,type=1,tim=6659453159088
=====================
PARSING IN CURSOR #1331166304 len=46 dep=0 uid=31 oct=3 lid=31 tim=6659453160661 hv=3284879970 ad='36af17088' sqlid='bjw0tsz1wqkm2'
SELECT * FROM PETROL5_257_1.P5CONFIG@MAG25701
END OF STMT
PARSE #1331166304:c=0,e=1510,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=6659453160661
CLOSE #1331166304:c=0,e=16,dep=0,type=0,tim=6659453269727
PARSE #1271407240:c=0,e=29,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=6659453269859
EXEC #1271407240:c=0,e=100,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,plh=0,tim=6659453269988
CLOSE #1271407240:c=0,e=19,dep=0,type=3,tim=6659453272436
XCTEND rlbk=1, rd_only=1, tim=6659453272511
PARSE #1271407240:c=0,e=19,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=6659453288689
EXEC #1271407240:c=0,e=51,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,plh=0,tim=6659453288790
CLOSE #1271407240:c=0,e=31,dep=0,type=3,tim=6659453411971
PARSE #1331159904:c=0,e=40,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=6659453412124
EXEC #1331159904:c=15601,e=142,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,plh=0,tim=6659453412303
CLOSE #1331159904:c=0,e=11,dep=0,type=3,tim=6659453419733
PARSE #1271407240:c=0,e=18,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=6659453419783
EXEC #1271407240:c=0,e=49,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,plh=0,tim=6659453419855

*** 2017-02-04 16:38:49.239
CLOSE #1271407240:c=0,e=25,dep=0,type=3,tim=6659462714405
PARSE #1331306096:c=0,e=28,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=1388734953,tim=6659462714525
EXEC #1331306096:c=0,e=19,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=1388734953,tim=6659462714568
FETCH #1331306096:c=0,e=12,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,plh=1388734953,tim=6659462716176
CLOSE #1331306096:c=0,e=5,dep=0,type=3,tim=6659462717609
PARSE #1271407240:c=0,e=22,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=6659462717660
EXEC #1271407240:c=0,e=80,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,plh=0,tim=6659462717767

...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39399268
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровfortnetНе работал пример с курсором . По времени выполнения и без плана было понятно , что хинт не пользовался. В этом загвоздка.
Хотя бы угадать, как оптимизатор обрабатывает запрос с удаленными таблицам с применением pl/sql типов.
А вы делаете теоретические выкладки.Если ты не знаешь, как это работает (должно работать), то метаться методом тыка можно долго.
Например, некоторые вещи работать просто не будут, они так устроены (тот же DRIVING_SITE)
А если не работает то, что по всем прикидкам должно работать, то нужно и подходить более серьезно -- делать трассировку, смотреть планы, ожидания. А не метаться со всякими "давай попробуем так, а еще так" и делать глубокомысленные выводы из обрывков информации, неизвестно когда и на каких данных полученной
Это если, конечно, интересен результат, а не процесс

PS. Это, конечно, больше к ТС. Остальным, собственно, пофиг, какие давать советы, можно и "пометаться" и "выводы поделать"

Ну, не так уж и долго продолжалось метание...
А интересные вопросы почему игнорируете, все поучаете только.

barrabas но почему план чисто в SQL, в plsql блоках for c in (select ...) и в open c for 'select ' разный я так и не понял.
еще и при разных способах фетча (с bulk collect и без)
кстати, такое ощущение что хин не работает вообще.
с fetch bulk collect работает 2 секунды что с хинтом что без.
а простой фетч висит 15 минут, так-же на хинт не обращая внимания.
записей всего 8000 в результате получаю, т.е. это не то чтобы долгая построчная выборка
...
Рейтинг: 0 / 0
Тормоза при join-е нескольких таблиц чероз DBlink
    #39399326
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnetвсе поучаете только.Да ни в коем разе
Стараюсь просто отбросить заведомо неработоспособные варианты и формализовать доступность возможных
И потом кто сказал, что это твоя записная книжка -- это моя fortnetВячеслав Любомудров...
А интересные вопросы почему игнорируетеДа если бы я сам знал, неужели бы молчал? Обязательно бы по-"поучал"
Пока предположения -- разные версии, разное окружение (NLS), разная цель запроса -- для одной строки лучше FIRST_ROWS, для BULK -- ALL_ROWS (не уверен, что сейчас оптимизатор что-то меняет, в 8-ке, вроде было такое), ошибка в статистике, какие-то трансформации -- причину выбора конкретного плана можно увидеть в 10053, но его надо уметь читать (я не умею, вот и молчу)

PS. По-последнему запросу ТС очень похоже, что он нас либо троллит, либо что-то слишком скрывает (where 1=1 and t.DATA = sysdate and t.DATA = sysdate - 1)
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тормоза при join-е нескольких таблиц чероз DBlink
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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