Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / cost плана запроса при select и update / 6 сообщений из 6, страница 1 из 1
29.11.2021, 13:20
    #40115857
legg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cost плана запроса при select и update
возникли вопросы, где искать ответы? ну а если у кого уже есть - отсыпьте немного, пожалуйста:
почему при select на стоимость влияет условие where rownum < n где n - некая константа
а при update это же условие на costs в плане не влияет?
планы смотрел в v$sql_plan

IdOperationNameRowsBytesCostTime0UPDATE STATEMENT1152867800:00:011. UPDATEtablitchko* 2.. COUNT STOPKEY3... PARTITION RANGE SINGLE914248138965696867800:00:01* 4.... TABLE ACCESS FULLtablitchko914248138965696867800:00:01
IdOperationNameRowsBytesCostTime0SELECT STATEMENT1152200:00:01* 1. COUNT STOPKEY2.. PARTITION RANGE SINGLE3456200:00:01* 3... TABLE ACCESS FULLtablitchko3456200:00:01
...
Рейтинг: 0 / 0
29.11.2021, 13:46
    #40115868
legg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cost плана запроса при select и update
как всегда забыл самое важное - таблица разбита на партиции по обновляемому полю, при этом происходит перемещение из партиции в партицию. но вопрос то же
...
Рейтинг: 0 / 0
30.11.2021, 08:50
    #40116040
Вопрошатель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cost плана запроса при select и update
возможно стоило начать с того, что показать 2 апдейта с планами. при n=2 и 20000 например.
...
Рейтинг: 0 / 0
30.11.2021, 13:41
    #40116134
legg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cost плана запроса при select и update
Вопрошатель
возможно стоило начать с того, что показать 2 апдейта с планами. при n=2 и 20000 например.

Код: 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.
declare
   str varchar2(2000) := '
create table TABL_LEGG
(
  id            NUMBER  generated by default as identity,
  a_col0        NUMBER INVISIBLE DEFAULT 0,
  a_col1        VARCHAR2(100) not null,
  a_col2        VARCHAR2(128) not null,
  a_col3        NUMBER,
  a_col4        NUMBER,
  a_col5        CHAR(1) default ''0'' not null,
  a_col6        NUMBER not null,
  a_col7        VARCHAR2(3) not null,
  a_col8        DATE not null,
  a_col9        NUMBER not null,
  a_col10       TIMESTAMP(6) not null
)
 
';
   curtxt varchar2(20000) := '';
begin
   execute immediate str;
   str := '
declare
begin
 
   for ii in 1..100000 loop
      insert into TABL_LEGG (a_col1, a_col2, a_col3, a_col4, a_col6, a_col7, a_col8, a_col9, a_col10) values
                            (dbms_random.string(''x'',100), dbms_random.string(''x'',128), dbms_random.value, dbms_random.value, dbms_random.value,
                             dbms_random.string(''x'',3), sysdate- dbms_random.value(1,24)/24, dbms_random.value, systimestamp-dbms_random.value(1,60)/24/60);
   end loop; 
   commit;
 
end;  
   ';
   execute immediate str;
  
   str := 'begin
   for ii in (select * from TABL_LEGG where rownum <2) loop
      exit;
   end loop;
   for txt in (select * from table(dbms_xplan.display_cursor)) loop
      dbms_output.put_line(txt.plan_table_output);
   end loop;   end;';
   execute immediate str;
   str := 'begin  for ii in (select * from TABL_LEGG where rownum <10000) loop
      exit;
   end loop;
   for txt in (select * from table(dbms_xplan.display_cursor)) loop
      dbms_output.put_line(txt.plan_table_output);
   end loop;   end;';
   execute immediate str;
   
   
   str := 'begin update TABL_LEGG set a_col0= 1 where rownum <2;
   rollback;
   for txt in (select * from table(dbms_xplan.display_cursor)) loop
      dbms_output.put_line(txt.plan_table_output);
   end loop;  end;';
   execute immediate str;  
   
   str := 'begin update TABL_LEGG set a_col0= 1 where rownum <10000;
   rollback;
   for txt in (select * from table(dbms_xplan.display_cursor)) loop
      dbms_output.put_line(txt.plan_table_output);
   end loop;   end;';
   execute immediate str;  
   
 
  
   
   
   str := 'drop table TABL_LEGG';
   execute immediate str;
  
end;



результат:
Код: html
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.
SQL_ID  1gcfvzw4wj8vd, child number 1
-------------------------------------
SELECT * FROM TABL_LEGG WHERE ROWNUM <2
 
Plan hash value: 2568330999
 
--------------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |           |       |       |     3 (100)|          |
|*  1 |  COUNT STOPKEY     |           |       |       |            |          |
|   2 |   TABLE ACCESS FULL| TABL_LEGG |   110K|    22M|     3  (34)| 00:00:01 |
--------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - filter(ROWNUM<2)
 
Note
-----
   - dynamic statistics used: dynamic sampling (level=2)
 
SQL_ID  4wbqvckxgyzmh, child number 0
-------------------------------------
SELECT * FROM TABL_LEGG WHERE ROWNUM <10000
 
Plan hash value: 2568330999
 
--------------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |           |       |       |   127 (100)|          |
|*  1 |  COUNT STOPKEY     |           |       |       |            |          |
|   2 |   TABLE ACCESS FULL| TABL_LEGG |   110K|    22M|   127   (1)| 00:00:01 |
--------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - filter(ROWNUM<10000)
 
Note
-----
   - dynamic statistics used: dynamic sampling (level=2)
 
SQL_ID  4k8c56n76vbrx, child number 0
-------------------------------------
UPDATE TABL_LEGG SET A_COL0= 1 WHERE ROWNUM <2
 
Plan hash value: 3658188826
 
---------------------------------------------------------------------------------
| Id  | Operation           | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT    |           |       |       |  1366 (100)|          |
|   1 |  UPDATE             | TABL_LEGG |       |       |            |          |
|*  2 |   COUNT STOPKEY     |           |       |       |            |          |
|   3 |    TABLE ACCESS FULL| TABL_LEGG |   110K|  1399K|  1366   (1)| 00:00:01 |
---------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - filter(ROWNUM<2)
 
Note
-----
   - dynamic statistics used: dynamic sampling (level=2)
 
SQL_ID  61cw1ny14fqb6, child number 0
-------------------------------------
UPDATE TABL_LEGG SET A_COL0= 1 WHERE ROWNUM <10000
 
Plan hash value: 3658188826
 
---------------------------------------------------------------------------------
| Id  | Operation           | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT    |           |       |       |  1366 (100)|          |
|   1 |  UPDATE             | TABL_LEGG |       |       |            |          |
|*  2 |   COUNT STOPKEY     |           |       |       |            |          |
|   3 |    TABLE ACCESS FULL| TABL_LEGG |   110K|  1399K|  1366   (1)| 00:00:01 |
---------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - filter(ROWNUM<10000)
 
Note
-----
   - dynamic statistics used: dynamic sampling (level=2)




почему cost третьего и четвёртого планов совпадают? (
...
Рейтинг: 0 / 0
30.11.2021, 19:13
    #40116270
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cost плана запроса при select и update
...
Рейтинг: 0 / 0
01.12.2021, 10:25
    #40116394
legg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cost плана запроса при select и update
Sayan Malakshinov

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


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