database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 17299 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 17299
PARALLEL DML 사용 방법
작성자
정재익(xlib)
작성일
2004-02-11 19:40
조회수
11,708

PARALLEL DML 사용 방법
======================


Purpose
-------
Oracle8 version부터는 DML 문장에도 Parallel 기능을 사용할 수 있다.
그 기능을 사용하는 방법을 확인하고 적용해 보자.


Explanation
-----------

Oracle8에서 대용량의 Database를 지원하기 위한 방법의 하나로
Parallel DML이 있다.  Oracle8은 Oracle7의 Parallel Query Option과
비슷한 구조로 Parallel DML을 실행한다. 
  Parallel하게 조회를 하면 테이블에 대한 부분적인 scan을 하는
동시에 여러 개의 parallel server process 가 블럭 범위에 의해
동적으로 나누어진다. Parallel DML도 DML 작업을 parallel 하게
여러 개의 process를 동시에 실행하여 처리할 수 있는 방법으로
batch job에서 실행하는 partitioned table이나 large table의 경우
performance를 크게 향상시킬 수 있는 방법이다.

1.  실행 방법

  먼저 다음의 parameter 를 init<SID>.ora file에 setting해 준다.

 PARALLEL_MAX_SERVERS - Parallel server process의 최대 개수
                                            (default 5)
 PARALLEL_MIN_SERVERS - Oracle startup 시 뜨는 parallel process 개수
                                            (default 0)

  Parallel DML을 사용을 위해서는 먼저 해당 세션에서 parallel DML을
enable 시키는 명령문을 실행해야 한다.

  alter session enable parallel dml;  -> enabling parallel dml
  alter session disable parallel dml; -> disabling parallel dml

  parallel dml 을 enable하거나 disable 하기 전에는 반드시 commit
이나 rollback 을 해 주어야 한다. 

SQL> insert into dept values (50,'abc','abc');
1 row created.

SQL> alter session enable parallel dml;
ERROR:
ORA-12841: Cannot alter the session parallel DML state within a
transaction

SQL> commit;
SQL> alter session enable parallel dml;
Session altered.
SQL> update /*+ parallel(testdml,10) */ testdml set c = '2';

 serial update를 한 후에 같은 object를 다시 parallel하게 udpate
할 수는 없다.  Parallel dml은 transaction의 첫번째 DML이 되어야 한다.

SQL> alter session enable parallel dml;
Session altered.
SQL> update testdml set c = '1';
999998 rows updated.
SQL> update /*+ parallel(testdml,10) */ testdml set c = '2';
update /*+ parallel(testdml,10) */ testdml set c = '2'
                                                   *
ERROR at line 1:
ORA-12839: cannot modify an object in parallel after modifying it

 default 는 disable이므로 parallel dml을 사용하기 전에 반드시
enabling 해주어야 한다.  Disable parallel dml mode의 세션에서는
parallel dml을 실행하여도 에러 없이 serial하게 실행된다.


2.  Space 의 관리

  (1) Create table .. as select, create index 작업의 저장 영역

   Parallel 하게 table 이나 index를 생성하는 경우 create 명령의
storage 절의 initial 값으로 temporary segment를 생성한다. 
Initial 값이 5M이고 parallel degree 를 10으로 설정하여 table을
생성하는 경우는 5M 씩 10개의 temporary segment가 만들어지면서
data를 저장한다. 그리고 Parallel coordinator 가 temporary
segment를 병합한다.

  (2) Temporary segment 의 free space 관리

   Data의 loading 작업이 끝난 후에 각 temporary segment에서
사용되지 않은 free space를 가진 extent가 tablespace level에서
설정한 minimum extent 값보다 크면 parallel coordinator 가
모든 temporary segment를 병합할 때 사용하지 않은 영역은 잘라낸다. 
잘려진 영역은 datafile의 free space로 돌려지며 다른 object에 의해
사용될 수 있다. 그러나 연속된 영역이 아니므로 하나의 큰 segment로
합쳐질 수 없다.  (external fragmentation)
  위의 경우에서 free space를 가진 extent가 minimum extent 값보다
작으면 parallel coordinator 가 모든 temporary segment를 병합할 때
사용하지 않은 영역도 포함시킨다. 이 부분은 후에 data가 insert될 때
사용된다. (internal fragmentation)


3.  제한 사항

(1) UPDATE 와 DELETE 문은 non-partitioned table에서는 parallel
하게 실행되지 않는다.

(2) Initial parameter Row_locking = intend 가 지정된 경우는
Parallel insert, update, delete가 실행되지 않는다.

(3) Trigger가 걸린 table에 대해서는 parallel dml을 실행할 수 없다.
trigger가 걸린 table에 사용할 때에는 trigger를 disable해야 한다.

(4) 같은 transaction 내에서 parallel DML 문장에 의해 update된
table에 대해 다시 dml 문을 실행할 수는 없다.  Parallel DML 문장
이후에는 반드시 commit을 해야 한다.

(5) self-referential integrity, delete cascade 등에서는 parallel
DML을 사용할 수 없다.

(6) Parallel DML은 object , LOB column 을 가진 table에서는
사용할 수 없다.

(7) Distributed transaction 에서는 parallel DML을 사용할 수 없다.

(8) Clustered table에서는 parallel DML을 사용할 수 없다.

출처:http://211.106.111.2:8880/bulletin/list.jsp?seq=11453&pg=0&sort_by=last_updated&keyfield=subject&keyword=PARALLEL

[Top]
No.
제목
작성자
작성일
조회
17302Direct load 또는 parallel insert 의 사용방법
정재익
2004-02-11
13050
17301Parallel load 기능의 활용 예제
정재익
2004-02-11
7705
17300Parallel 인덱스 사용시 주의사항
정재익
2004-02-11
7868
17299PARALLEL DML 사용 방법
정재익
2004-02-11
11708
17193APM 에 오라클 9i 추가 설치하기
정재익
2004-02-04
9067
17192RedHat 8 에 Oracle 9i 설치하기
정재익
2004-02-04
12045
16672[참고] 오라클 리스너에서 접속 제한하기
문태준
2003-12-10
9167
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다