본문 바로가기

닷컴's_열공/Database

대량의 데이터 INSERT(HINT)

출처 : https://sunder4.tistory.com/506

 

insert /*+ APPEND PARALLEL(ems_test_temp 4)/ into ems_test_temp nologging
select /*+ PARALLEL(ems_test 4) */ * from ems_test;

or alter 명령어를 통해서 테이블 자체를 nologging로 바꾸고..
insert  작업이 끝나면 다시  logging 모드로 변경합니다..

alter session set optimizer_goal=all_rows;
alter session set sort_area_size=52428800;   <-- OS 환경에 따라 조절
alter session set hash_area_size=524288000;  <-- OS 환경에 따라 조절
alter session set db_file_multiblock_read_count = 128;  <-- OS 환경에 따라 조절
alter session enable parallel DDL;
alter session enable parallel DML

append 를 사용했을 때의 여파를 생각하고 하셔야 합니다.append 는 HWM (High Water Mark) 를 직접 찾아서 그 지점부터 insert 해주기 때문에 성능에 효과를 볼수 있지만 테이블 자체에 delete 작업이 자주 일어 나는 경우 공간 낭비가 일어 날수 있습니다.  

그리고 parallel의 경우... 지금 정확히 기억이 나지 않는데. update일 경우에는 테이블 단위 lock이 발생 할겁니다..
--------------------------------------------------------------------------------------------------------/*+ 이부분은 대용량 만질때 그냥 상투적으로 적어 주신다고 보시면 됩니다. */
alter session set optimizer_goal=all_rows;
alter session set sort_area_size=52428800;
alter session set hash_area_size=524288000;
alter session set db_file_multiblock_read_count = 128;
alter session enable parallel DDL;
alter session enable parallel DML; 

truncate table table_name;
drop index table_name_index; 

alter table table_name nologging; 

insert /*+ append parallel(table_name 8) */ into table_name
select /*+ parallel(table_name1 8) full(table_name1) */ * from table_name; 

create index table_name_index
TABLESPACE tablespace_name

NOLOGGING
PARALLEL 12; 

ALTER TABLE table_name LOGGING ;
ALTER INDEX  table_name_index NOPARALLEL NOLOGGING;
----------------------------------------------------------------------------------------------------
tp://download-west.oracle.com/docs/cd/B10501_01/server.920/a90842/apb.htm