IT 기술/DB 개념

Direct Path I/O

keun90 2025. 3. 29. 08:13

정보계 시스템(DW/OLAP등)이 배치 프로그램에서 사용하는 SQL은 주로 대량 데이터를 처리하기 때문에 버퍼캐시를 경유하는 I/O 메커니즘이 오히려 성능을 떨어뜨릴 수 있다. 그래서 오라클은 버퍼캐시를 경유하지 않고 곧바로 데이터 블록을 읽고 쓸 수 있는 Direct Path I/O 기능을 제공한다.

 

1. 병령 쿼리로 Full Scan을 수행할 때 

2. 병렬 DML을 수행할 때

3. Direct Path Insert를 수행할 때

4. Temp 세그먼트 블록들을 읽고 쓸 때

5. direct 옵션을 지정하고 export를 수행할 때

6. nocahe 옵션을 지정한 LOB 컬럼을 읽을 때

 

select /*+ full(t) parallel(t 4) */ * from big_table t;

 

 

Direct Path Insert 

방식

1. insert .. select 문에 append 힌트 사용

2. parallel 힌트를 이용해 병렬 모드로 insert

3. direct 옵션을 지정하고 sql loader(sqlldr)로 데이터 적재

4. ctas(create table ... as select) 문 수행 

 

빠른 이유

1. freelist 참조하지 않고 hmv(high-water-mark) 바깥 영역에 데이터를 순차적으로 입력한다. 

2. 블록을 버퍼캐시에서 탐색하지 않는다.

3. 버퍼캐시에 적재하지 않고, 데이터파일에 직접 기록하낟. 

4. undo 로깅을 안 한다. 

5. redo 로깅을 안 하게 할 수 있다. 

    - alter table t nologging; (o)

    - insert into t nologging select * from test; (x)

    - insert /*+ append nologging */ into t select * from test; (x)

 

주의할 점 두 가지 

1. exclusive 모드 tm lock이 걸린다. 

2. freelist 조회하지 않고 hwm 바깥 영역에 입력하므로 테이블에 여유 공간이 있어도 재활용하지 않는다. 테이블 사이즈 증가한다.

 

 

병렬 DML

insert는 append 힌트 이용, update/delete는 기본적으로 direct path write 불가능하다. 아래와 같이 병렬 dml을 활성화해야 한다. 

alter session enable parallel dml; 

 

insert /*+ parallel(c 4) */ into 고객 c

( insert /*+ append 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';

 

QC(query coordinator) : sql을 병렬로 실행하면 병렬도로 지정한 만큼 또는 두 배로 병렬 프로세스를 띄워 동시에 작업을 진행하는데, 이때 최초 DB에 접속해서 sql을 수행한 프로세스는 qc역할을 맡는다. 단, 병렬로 처리할 수 없거나 병렬로 처리하도록 지정하지 않은 작업은 qc가 직접 처리한다.  

 

 

 

 

'IT 기술 > DB 개념' 카테고리의 다른 글

파티션을 활용한 대량 DELETE 튜닝  (0) 2025.04.14
파티션, 대량 UPDATE 튜닝  (0) 2025.04.07
파티션을 활용한 DML 튜닝  (0) 2025.04.03
MERGE  (0) 2025.03.25
SQLP 학습 이유  (0) 2025.03.24