행위

오라클 벌크 인서트

DB CAFE

thumb_up 추천메뉴 바로가기


1 벌크 인서트(BULK INSERT) 로 입력 속도 증가[편집]

  1. 대량 인서트 성능 개선시 벌크 인서트를 사용하여 성능 개선

1.1 일반 INSERT[편집]

  • 샘플 테이블
create table LARGE_TBL (id number, value varchar2(50));
begin
        for i in 1 .. 1000000 loop
                insert into large_tbl values (i,'foobar');
        end loop;
        commit;
end;
/
  • 일반 INSERT 는 40초 소요
Elapsed: 00:00:40.53
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute 1000000     15.67      15.42         11       2838    1040617     1000000
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total   1000001     15.67      15.42         11       2838    1040617     1000000

1.2 BULK INSERT[편집]

  • 테이블 레코드 형식의 배열에 값을 저장
declare
        TYPE tbl_ins IS TABLE OF LARGE_TBL%ROWTYPE index by binary_integer;
        w_ins tbl_ins;
begin
        for i in 1 .. 1000000 loop
                w_ins(i).id := i;
                w_ins(i).value := 'foobar';
        end loop;       
        forall i in 1 .. 1000000 insert into large_tbl values w_ins(i);
        commit;
end;
/
  • BULK INSERT 는 1초
Elapsed: 00:00:01.26 

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.49       0.50         11       4804      24093     1000000
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.49       0.51         11       4804      24093     1000000