Direct Path I/O

๋ณ‘๋ ฌ ์ฟผ๋ฆฌ

SELECT /*+ full(t) parallel(t 4) */ * FROM big_table t;

SELECT /*+ index_ffs(t big_table_x1) parallel_index(t big_table_x1 4) */ count(*) 
FROM big_table t;

Direct Path Insert

-- append_values ํžŒํŠธ ์‚ฌ์šฉ
procedure insert_target( p_source in typ_source) is
begin
    forall i in p_source.first..p_source.last
        insert /*+ append_values */ into target values p_source(i);
end insert_target;

๋ณ‘๋ ฌ DML

-- 1. ์„ธ์…˜ ๋‚ด Parallel DML ํ™œ์„ฑํ™”
alter session enable parallel dml;

insert /*+ parallel(c 4) */ into ๊ณ ๊ฐ c
select /*+ full(o) parallel(o 4) */ * from ์™ธ๋ถ€๊ฐ€์ž…๊ณ ๊ฐ o;

update /*+ full(c) parallel(c 4) */ ๊ณ ๊ฐ c set ๊ณ ๊ฐ์ƒํƒœ์ฝ”๋“œ = 'WD'
where ์ตœ์ข…๊ฑฐ๋ž˜์ผ์‹œ < '20100101';

delete /*+ full(c) parallel(c 4) */ from ๊ณ ๊ฐ c
where ํƒˆํ‡ด์ผ์‹œ < '20100101';
-- 1. ๊ธฐ๋ณธ Parallel Direct Path Insert
insert /*+ append parallel(c 4) */ into ๊ณ ๊ฐ c
select /*+ full(o) parallel(o 4) */ * from ์™ธ๋ถ€๊ฐ€์ž…๊ณ ๊ฐ o;

-- 12c๋ถ€ํ„ฐ๋Š” ์„ธ์…˜ ์„ค์ •(alter session) ์—†์ด๋„ enable_parallel_dml ํžŒํŠธ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ๋ณ‘๋ ฌ DML ํ™œ์„ฑํ™”๊ฐ€ ๊ฐ€๋Šฅ
insert /*+ enable_parallel_dml parallel(c 4) */ into ๊ณ ๊ฐ c
select /*+ full(o) parallel(o 4) */ * from ์™ธ๋ถ€๊ฐ€์ž…๊ณ ๊ฐ o;

update /*+ enable_parallel_dml full(c) parallel(c 4) */ ๊ณ ๊ฐ c
set ๊ณ ๊ฐ์ƒํƒœ์ฝ”๋“œ = 'WD'
where ์ตœ์ข…๊ฑฐ๋ž˜์ผ์‹œ < '20100101';

delete /*+ enable_parallel_dml full(c) parallel(c 4) */ from ๊ณ ๊ฐ c
where ํƒˆํ‡ด์ผ์‹œ < '20100101';

๋ณ‘๋ ฌ DML์ด ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

-- UPDATE(๋˜๋Š” DELETE/INSERT)๊ฐ€ PX_COORDINATOR ์•„๋ž˜์ชฝ์— ๋‚˜ํƒ€๋‚˜๋ฉด UPDATE๋ฅผ ๊ฐ ๋ณ‘๋ ฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฒ˜๋ฆฌ
-------------------------------------------------------------------------------------------
| Id  | Operation                | Name     | Pstart| Pstop |   TQ  |IN-OUT| PQ Distrib |
-------------------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT         |          |       |       |       |      |            |
|   1 |  PX COORDINATOR          |          |       |       |       |      |            |
|   2 |   PX SEND QC (RANDOM)    | :TQ10000 |       |       | Q1,00 | P->S | QC (RAND)  |
|   3 |    UPDATE                | ๊ณ ๊ฐ     |       |       | Q1,00 | PCWP |            |
|   4 |     PX BLOCK ITERATOR    |          |     1 |     4 | Q1,00 | PCWC |            |
|   5 |      TABLE ACCESS FULL   | ๊ณ ๊ฐ     |     1 |     4 | Q1,00 | PCWP |            |
-------------------------------------------------------------------------------------------

-- UPDATE(๋˜๋Š” DELETE/INSERT)๊ฐ€ PX_COORDINATOR ์œ„์ชฝ์— ๋‚˜ํƒ€๋‚˜๋ฉด UPDATE๋ฅผ QC๊ฐ€ ์ฒ˜๋ฆฌ
-------------------------------------------------------------------------------------------
| Id  | Operation                | Name     | Pstart| Pstop |   TQ  |IN-OUT| PQ Distrib |
-------------------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT         |          |       |       |       |      |            |
|   1 |  UPDATE                  | ๊ณ ๊ฐ     |       |       |       |      |            |
|   2 |   PX COORDINATOR         |          |       |       |       |      |            |
|   3 |    PX SEND QC (RANDOM)   | :TQ10000 |       |       | Q1,00 | P->S | QC (RAND)  |
|   4 |     PX BLOCK ITERATOR    |          |     1 |     4 | Q1,00 | PCWC |            |
|   5 |      TABLE ACCESS FULL   | ๊ณ ๊ฐ     |     1 |     4 | Q1,00 | PCWP |            |
-------------------------------------------------------------------------------------------