Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 CTAS vs insert select  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Есть запрос, который интенсивно использует CPU.
Есть ли какая-то возможность чтоб insert select выполнялся бы так же быстро как CTAS?
create table z as select rownum id, lpad(' ',4000,' ') value from dual connect by level <= 100000;

SQL> set timing on
SQL> drop table t;

Table dropped.

Elapsed: 00:00:00.09
SQL> create table t as select /*+ parallel(4) vvv */ regexp_count(value,' ') c from z;

Table created.

Elapsed: 00:00:24.78
SQL> truncate table t;

Table truncated.

Elapsed: 00:00:00.07
SQL> insert /*+ append */ into t select /*+ parallel(4) vvv */ regexp_count(value,' ') c from z;

100000 rows created.

Elapsed: 00:01:14.97
SQL> truncate table t;

Table truncated.

Elapsed: 00:00:00.12
SQL> insert into t select /*+ parallel(4) vvv */ regexp_count(value,' ') c from z;

100000 rows created.

Elapsed: 00:01:15.65

Насколько я вижу при инсерте координор срабатывает до LOAD AS SELECT, а при создании таблицы после, что явно влияет на эффективность параллельности.
==============================================================================================================================================================================
| Id |        Operation        |   Name   |  Rows   | Cost |   Time    | Start  | Execs |   Rows   | Read | Read  | Write | Write |  Mem  | Activity |    Activity Detail    |
|    |                         |          | (Estim) |      | Active(s) | Active |       | (Actual) | Reqs | Bytes | Reqs  | Bytes | (Max) |   (%)    |      (# samples)      |
==============================================================================================================================================================================
|  0 | CREATE TABLE STATEMENT  |          |         |      |         1 |    +25 |     5 |        4 |      |       |       |       |       |          |                       |
|  1 |   PX COORDINATOR        |          |         |      |         1 |    +25 |     5 |        4 |      |       |       |       |       |          |                       |
|  2 |    PX SEND QC (RANDOM)  | :TQ10000 |    116K | 4835 |         3 |    +23 |     4 |        4 |      |       |       |       |       |          |                       |
|  3 |     LOAD AS SELECT      |          |         |      |        25 |     +1 |     4 |        4 |      |       |    20 |   1MB |    7M |    82.80 | Cpu (77)              |
|  4 |      PX BLOCK ITERATOR  |          |    116K | 4835 |        24 |     +2 |     4 |     100K |      |       |       |       |       |          |                       |
|  5 |       TABLE ACCESS FULL | Z        |    116K | 4835 |        24 |     +2 |    44 |     100K |  809 | 781MB |       |       |       |    17.20 | direct path read (16) |
==============================================================================================================================================================================

==============================================================================================================================================================================
| Id |        Operation        |   Name   |  Rows   | Cost |   Time    | Start  | Execs |   Rows   | Read | Read  | Write | Write |  Mem  | Activity |    Activity Detail    |
|    |                         |          | (Estim) |      | Active(s) | Active |       | (Actual) | Reqs | Bytes | Reqs  | Bytes | (Max) |   (%)    |      (# samples)      |
==============================================================================================================================================================================
|  0 | INSERT STATEMENT        |          |         |      |        74 |     +2 |     1 |        1 |      |       |       |       |       |          |                       |
|  1 |   LOAD AS SELECT        |          |         |      |        75 |     +1 |     1 |        1 |    3 | 24576 |    18 |   1MB |  542K |    70.09 | Cpu (75)              |
|  2 |    PX COORDINATOR       |          |         |      |        74 |     +2 |     5 |     100K |      |       |       |       |       |          |                       |
|  3 |     PX SEND QC (RANDOM) | :TQ10000 |    116K | 4835 |        74 |     +2 |     4 |     100K |      |       |       |       |       |          |                       |
|  4 |      PX BLOCK ITERATOR  |          |    116K | 4835 |        74 |     +2 |     4 |     100K |      |       |       |       |       |          |                       |
|  5 |       TABLE ACCESS FULL | Z        |    116K | 4835 |        74 |     +2 |    44 |     100K |  809 | 781MB |       |       |       |    29.91 | Cpu (1)               |
|    |                         |          |         |      |           |        |       |          |      |       |       |       |       |          | direct path read (31) |
==============================================================================================================================================================================

========================================================================================================================================================
| Id |         Operation         |   Name   |  Rows   | Cost |   Time    | Start  | Execs |   Rows   | Read | Read  | Activity |    Activity Detail    |
|    |                           |          | (Estim) |      | Active(s) | Active |       | (Actual) | Reqs | Bytes |   (%)    |      (# samples)      |
========================================================================================================================================================
|  0 | INSERT STATEMENT          |          |         |      |           |        |     1 |          |      |       |          |                       |
|  1 |   LOAD TABLE CONVENTIONAL |          |         |      |        75 |     +2 |     1 |        0 |    3 | 24576 |    67.27 | Cpu (74)              |
|  2 |    PX COORDINATOR         |          |         |      |        75 |     +2 |     5 |     100K |      |       |          |                       |
|  3 |     PX SEND QC (RANDOM)   | :TQ10000 |    116K | 4835 |        75 |     +2 |     4 |     100K |      |       |          |                       |
|  4 |      PX BLOCK ITERATOR    |          |    116K | 4835 |        75 |     +2 |     4 |     100K |      |       |          |                       |
|  5 |       TABLE ACCESS FULL   | Z        |    116K | 4835 |        75 |     +2 |    44 |     100K |  809 | 781MB |    32.73 | direct path read (36) |
========================================================================================================================================================
19 янв 15, 21:39    [17140169]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4917
Блог
А так?
alter session force parallel dml parallel 4;
insert /*+ append  */ into t select /*+ parallel(4) vvv */ regexp_count(value,' ') c from z;
19 янв 15, 21:48    [17140199]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
Долбоящер
Guest
alter session enable parallel dml
19 янв 15, 21:50    [17140207]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10040
Alexander Ryndin
А так?


Ну и про NOLOGGING не забываем.

SY.

Сообщение было отредактировано: 19 янв 15, 22:15
19 янв 15, 22:14    [17140278]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
parallel dml
Спасибо, координатор переместился куда и хотелось.
А как вообще можно понять какое текущее значение установлено для parallel dml?
По системным вьюхам включая v$px_session ничего полезного не нашел.
SY
Ну и про NOLOGGING не забываем.
Ну это несколько из другой оперы и в отрыве от политики бекапов не рассматривается.
20 янв 15, 01:38    [17140787]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
dbms_photoshop
А как вообще можно понять какое текущее значение установлено для parallel dml?
По системным вьюхам включая v$px_session ничего полезного не нашел.
v$ses_optimizer_env
select * from v$ses_optimizer_env where name like 'parallel_dml%' and sid=userenv('SID')
20 янв 15, 02:17    [17140805]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
xtender,

Спасибо. Совсем все позабывал... это ж еще и в 10053 пишется.
20 янв 15, 02:24    [17140808]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
Долбоящщщщщер
Guest
dbms_photoshop
parallel dml
Спасибо, координатор переместился куда и хотелось.
А как вообще можно понять какое текущее значение установлено для parallel dml?

v$session.PDDL_STATUS - ENABLED by default
v$session.PDML_STATUS - DISABLED by default
20 янв 15, 04:56    [17140874]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Долбоящщщщщер
v$session.PDDL_STATUS - ENABLED by default
v$session.PDML_STATUS - DISABLED by default

простенькая дурацкая загадка :)
+ какая команда была выполнена в другой сессии?
SQL> select s.sid,s.PDML_ENABLED,s.PDML_STATUS from v$session s where sid=userenv('SID');

    SID PDML_ENAB PDML_STATUS
------- --------- ------------------------
   1168 NO        DISABLED
SQL> select sid,name,value from v$ses_optimizer_env where name like 'parallel_dml%' and sid=userenv('SID');

    SID NAME                           VALUE
------- ------------------------------ ---------------------------------------------------------------------------
   1168 parallel_dml_forced_dop        4
   1168 parallel_dml_mode              forced
SQL>
SQL> alter session force parallel dml parallel 4;
SQL> select s.sid,s.PDML_ENABLED,s.PDML_STATUS from v$session s where sid=userenv('SID');

    SID PDML_ENAB PDML_STATUS
------- --------- ------------------------
   1168 NO        DISABLED
SQL> select sid,name,value from v$ses_optimizer_env where name like 'parallel_dml%' and sid=userenv('SID');

    SID NAME                           VALUE
------- ------------------------------ ---------------------------------------------------------------------------
   1168 parallel_dml_forced_dop        4
   1168 parallel_dml_mode              forced
SQL>
SQL> pause Выполняю одну команду в другой сессии...
Выполняю одну команду в другой сессии...

SQL>
SQL> select s.sid,s.PDML_ENABLED,s.PDML_STATUS from v$session s where sid=userenv('SID');

    SID PDML_ENAB PDML_STATUS
------- --------- ------------------------
   1168 YES       FORCED
SQL> select sid,name,value from v$ses_optimizer_env where name like 'parallel_dml%' and sid=userenv('SID');

    SID NAME                           VALUE
------- ------------------------------ ---------------------------------------------------------------------------
   1168 parallel_dml_forced_dop        4
   1168 parallel_dml_mode              forced
20 янв 15, 11:21    [17141771]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
Динозаурр
Guest
xtender,

И каков ответ?
20 янв 15, 15:03    [17143257]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
dba123
Member

Откуда:
Сообщений: 1054
xtender,

имхо, начальные условия сразу загадочные
SQL> select s.sid,s.PDML_ENABLED,s.PDML_STATUS from v$session s where sid=userenv('SID');

    SID PDML_ENAB PDML_STATUS
------- --------- ------------------------
   1168 NO        DISABLED
SQL> select sid,name,value from v$ses_optimizer_env where name like 'parallel_dml%' and sid=userenv('SID');

    SID NAME                           VALUE
------- ------------------------------ ---------------------------------------------------------------------------
   1168 parallel_dml_forced_dop        4
   1168 parallel_dml_mode              forced
можно ли начать тест с такой строки?
alter session force parallel dml parallel 1;
20 янв 15, 15:14    [17143327]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
dba123
имхо, начальные условия сразу загадочные
это и есть основная часть загадки :)
20 янв 15, 16:18    [17143742]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Динозаурр
xtender,

И каков ответ?
+ простейший ответ
alter system set parallel_max_servers=0
20 янв 15, 16:19    [17143752]     Ответить | Цитировать Сообщить модератору
 Re: CTAS vs insert select  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
имхо могут быть и другие похожие ответы, т.к. фактически opt_env params и PDML_ENABLED c PDML_STATUS - разные вещи
20 янв 15, 16:22    [17143784]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить