오라클동영상,FORALL 기반 벌크 입력(BULK INSERT) 실습, DMLL성능향상, 오라클교육, 오라클학원, SQL교육, SQL학원, 자바학원, 자바교육, SQL동영상
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=722
ojc.asia
https://www.youtube.com/watch?v=RE79vqW_s6o&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=31

https://www.youtube.com/watch?v=mAQNkUZ_9CA&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=30

https://www.youtube.com/watch?v=Ub3XCyENie0&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=25

오라클 PL/SQL
성능향상을 위한
FORALL기반 BULK INSERT
실습
[실습]
사번(empno), 이름(ename), 직무(job) 3개의 컬럼을 갖는 BULKTEST라는 테이블을 생성하여 100만건 정도 데이터를 입력하는데. 개별 건씩 입력 하는것과 FORALL을 이용하여 벌크로 INSERT하는 방식의 성능차이에 대해 확인해 보겠습니다. FORALL을 이용하여 DML문을 작성하면 한 번에 한 행씩 실행될 모든 DML 문을 생성하고 SQL 실행엔진에 한번에 모두 보냅니다. FORALL 구문을 이용하면 INSERT, UPDATE, DELETE와 같은 DML 사용시 컬렉션을 사용하며 매우 빠르게 작업을 할 수 있습니다. FORALL구문은 데이터를 오라클의 TABLE TYPE(배열)에 담아서 한번에 SQL 실행엔진에 넘겨서 실행을 하므로 성능 향상에 도움이 됩니다. |
1. 실습 테이블 생성 create table bulktest ( empno number primary key, ename varchar2(20), job varchar2(50)); set timing on alter system flush SHARED_POOL; 2. 일반적인 반복문을 통한 개별 INSERT -- 24초 경과 declare cnt number := 0; begin while (cnt < 1000000) loop cnt := cnt + 1; insert /*+ loop insert */ into bulktest values ( cnt, cnt || '길동', '개발직'); end loop; commit; end; 3. Shared Pool에서 파싱된 SQL문 및 실행횟수 확인 -- 오라클이 INSERT 구문을 내부적으로 바인드 변수 처리를 하여 SQL문장은 하나, 실행횟수는 1,000,000임을 알수 있습니다. select substr(sql_text,1,60) "sql", count(*), sum(executions) "총실행횟수" from v$sqlarea where sql_text like '%loop%' group by substr(sql_text,1,60) having count(*) > 0 order by 2; select count(1) from bulktest; truncate table bulktest; 4. FORALL을 이용한 BULK INSERT alter system flush SHARED_POOL; -- 2초 declare type bulktype is table of bulktest%rowtype index by binary_integer; mydata bulktype; begin for i in 1 .. 1000000 loop mydata(i).empno := i; mydata(i).ename := i || '길동'; mydata(i).job := '개발직'; end loop; forall i in 1 .. 1000000 insert /*+ bulk insert */ into bulktest values mydata(i); commit; end; 5. Shared Pool에서 파싱된 SQL문 및 실행횟수 확인 -- 오라클이 INSERT 구문을 내부적으로 바인드 변수 처리를 하여 SQL문장은 하나, 실행횟수도 하나임을 확인할 수 있습니다. select substr(sql_text,1,60) "sql", count(*), sum(executions) "총실행횟수" from v$sqlarea where sql_text like '%bulk%' group by substr(sql_text,1,60) having count(*) > 0 order by 2; select count(1) from bulktest; truncate table bulktest; |
#FORALL, #벌크입력, #BULKINSERT, #SQL튜닝, #오라클교육, #오라클학원,#SQL교육, #SQL학원, #자바학원, #자바교육, #SQL동영상, FORALL, 벌크입력, BULKINSERT, SQL튜닝, 오라클교육, 오라클학원,SQL교육, SQL학원, 자바학원, 자바교육, SQL동영상