No. 18443
V8I) PARALLEL QUERY & PARALLEL DDL 사용 방법 ========================================
Purpose ------- 이 문서에서는 Parallel Query와 Parallel DDL 에 대해 알아보도록 한다.
Explanation ----------- Parallel Query 에 관한 일반적인 내용과 사용방법은 Note. 10801를 참조한다.
Parallel query 는 수행할 Query, DML, DDL문에 따라 parallelism decision 이 각각 다르다. 일반적인 Query의 경우, degree of parallelism이 가장 높은 table/index를 reference로 삼고 Parallel DML문이 subquery를 포함할 경우, subquery의 degree는 DML operation의 degree와 같게 그리고 Parallel DDL문이 subquery를 포함할 경우, subquery의 degree는 DDL operation의 degree와 동일하게 설정한다.
1. Rules For Parallelizing Queries (SELECT) 1) Decision To Parallelize 다음의 조건이 충족되어야 parallelization이 가능하다. 'Parallel' hint(PARALLEL, PARALLEL_INDEX)가 명시되든지 schema object의 정의에 PARALLEL이 선언되어 있어야 하고 최소한 하나의 table에 대한 full scan 또는 여러 partition에 걸친 index range scan이 이루어져야 한다.
2) Degree Of Parallelism Schema object 중 degree가 가장 높은 것을 reference로 채택하고 Hint와 parallel declaration이 공존할 경우, hint가 우선순위이다.
2. Rules For Parallelizing UPDATE And DELETE UPDATE/DELETE는 partitioned table에 대해서만 parallelism이 가능하다. 즉, Partition내 또는 nonpartitioned table에 대해서는 불가능하다. Query와 마찬가지로 parallel option을 줄 수 있는데 Table definition에 PARALLEL절이 정의되면, 이는 query뿐만 아니라 DML문에도 적용된다. 1) Decision To Parallelize 해당 table이 PARALLEL spec을 갖고 있거나 DML문에 PARALLEL hint가 있는 경우에만 가능하다
2) Degree Of Parallelism Query와 동일한 rule을 적용받는다. Query와는 달리 UPDATE/DELETE에는 하나의 reference만이 존재한다. Maximum degree of parallelism = # of partitions 하나의 partition에는 하나의 parallel server process만이 할당가능하다.
3. Rules For Parallelizing INSERT ... SELECT SELECT/INSERT 대상의 table에 각각 hint 또는 declaration을 줄 수 있다. 1) INSERT 대상 table에 대해 PARALLEL이 declare되어 있거나 INSERT문에 hint가 있어야 한다. 결국 SELECT문과는 독립적으로 parallelism decision이 이루어진다.
2) Degree Of Parallelism Insert hint > parallel declaration of insert > maximum query directive
4. Rules For Parallelizing DDL Statements 1) Decision To Parallelize Syntax상에 PARALLEL declaration이 명시되어야 한다.
2) Degree Of Parallelism PARALLEL절에 의해 결정된다.
5. Rules For Parallelizing CREATE INDEX, REBUILD INDEX, MERGE/SPLIT PARTITION Parallel CREATE INDEX or ALTER INDEX ... REBUILD Parallel MOVE PARTITION or SPLIT PARTITION
6. Rules For Parallelizing CREATE TABLE ... AS SELECT 1) Decision To Parallelize (Query) Query상에 'parallel' hint가 명시되거나 CREATE문에 PARALLEL이 명시되거나, schema object 정의시 PARALLEL이 declare되어야 한다. 반드시 한 table에 대해 full scan이 이루어지거나 여러 partition에 걸친 index range scan이 이루어져야 한다.
2) Degree Of Parallelism (Query) CREATE문의 PARALLEL절에 명시된 값을 이용한다. PARALLEL절이 없을 경우 CPU 갯수를 default로 이용한다.
3) Decision To Parallelize (Create) 반드시 PARALLEL절이 있어야 하고 Create operation이 parallelize되면 Oracle은 가급적 scan도 parallelize한다. Create operation이 parallelize되지 않더라도 scan을 parallelize할 수 있다.
4) Degree Of Parallelism (Create) Create문의 PARALLEL절에 따른다. PARALLEL절이 없을 경우, CPU 갯수가 default값으로 지정된다. SELECT문에 명시된 hint는 완전히 무시된다.
7. Satement level에서 수행 가능한 Parallel DDL 다음과 같다. Nonpartitioned table/index에 대해 가능한 parallel DDL statements 이다. CREATE INDEX CREATE TABLE ... AS SELECT ALTER INDEX ... REBUILD Partitioned table/index에 대해 가능한 parallel DDL statements CREATE INDEX CREATE TABLE ... AS SELECT ALTER TABLE ... MOVE/SPLIT PARTITION ALTER INDEX ... REBUILD/SPLIT PARTITION
1) CREATE TABLE ... AS SELECT in Parallel DSS application은 일반적으로 대량의 데이타를 요약해 놓은(roll up) summary table을 필요로 한다 Parallel execution을 통해 query 및 create operation을 parallelize할 수 있다
2) Recoverability And Parallel DDL CREATE/ALTER TABLE/INDEX를 이용하여 summary table을 만들 경우, NOLOGGING절을 이용하여 빠르게 table을 생성한 후 table이 속한 tablespace를 backup받아 놓는다 (undo/redo information을 생성하지 않는다)
3) Space Management For Parallel DDL Storage Space For CREATE TABLE ... AS SELECT and CREATE INDEX Table/index를 parallel creation하게 되면 각 parallel server process는 CREATE문의 storage절에 명시된 값을 참조하여 temporary segment를 할당한다. Coordinator가 각 process의 temporary segment를 합치는 과정에서 일부 segment는 trim될 수도 있다.
4) Free Space And Parallel DDL Serial operation의 경우 table/index create시 최소한 하나의 extent를 필요로 하지만, parallel의 경우에는 parallel server process당 하나의 extent를 필요로 한다. Parallel create시 할당되는 segment가 필요한 만큼보다 클 경우 free space pocket을 생성할 수 있다. 각 temporary segment의 unused space가 tablespace의 MINIMUM EXTENT보다 크면, Oracle은 각 temporary segment의 row merge시 이를 trim하여 system free space로 돌린다. Unused space는 새로운 extent 할당 시 사용될 수 있지만, 큰 segment로 coalescing될 수는 없다.(external fragmentation) MINIMUM EXTENT 값보다 작을 경우에는 row merge시 trim을 할 수 없으며, 따라서 system free space에 돌려지지 않은 채 table/index의 일부로 남게 되어 향후 insert/update시에만 사용된다.(internal fragmentation)
Reference Documents ------------------- Note. 203238.1 Note. 199272.1 Note. 1029948.6
|