SlideShare a Scribd company logo
DiscussionQuestion대용량 테이블에 대한 DML 처리는 ?Answer PARALLEL DML을 사용한다?
DiscussionQuestion more Trigger가 걸린 온라인 대용량 테이블에대한 DML 처리는 ?Answer한 건씩 한다?
Discussion대부분의 대용량 테이블에 대한 빠른 DML 처리는 PARALLEL 설정을 사용한다.하지만 해당 테이블에 TRIGGER가 걸려있거나 ONLINE 사용중인 테이블은 이에대한 부담이 크다. 이런 상황인 경우에 SQL을 일일이 만들어서 특정 범위를 반복적으로 DML을 수행하는경우가 있는데 작업자는 무한적 앉아서 엔터돌이를 해야 하는 걸까.좀 더 생각을 한 사람은 특정범위를 기준으로 PL/SQL을 통해 한 번에 작업을 한다.그러나. 문제는 현재 이 작업이 어느 정도 수행이 되었는지를 모르기 때문에재 작업의 부담도 크고 매우 답답함을 느낀다.다음의 내용은 이런 경우에 활용 가능한 TIP이다.
구조설계1. 한번에 대용량 처리가 불가능하다면 처리하고자 하는 데이터의 기준범위를 설정한다.5천만건을UPDATE해야하는데 해당 테이블에 트리거가 걸려있다.테스트를 해보니 대략 1만건 정도를 한번에 처리하는 것은 큰 부담이 없다고 판단되었다.2. FOR LOOP를 통해 1만 * ? = 5천만을 LOOP할 수 있는 구조를 만든다i * j = 5000만
PACKAGE를 활용PACKAGE의 인수가 V$SESSION에 나타난다SELECT SID, MODULE, ACTION FROM V$SESSION WHERE SID = ?
DML작성EX. UPDATABLE JOIN 활용의 예UPDATE 대상범위를 활용 하기 위해 “B”집합에 “ROWNUM”을 활용한 RNUM 속성과A 테이블 ROWID를RID 속성으로미리 만들어 둔다i, j 를 활용하여 업데이트 범위를 “1만”건 단위로 균일하게 처리할 수 있도록 조건을 추가하고 작업이 끝나면 j 를 증가시켜 다음 범위의 시작점을 초기화 시킨다
예제DECLAREiinteger;    j integer;BEGIN    j := 0;    for i in 1..5000 loop        DBMS_APPLICATION_INFO.SET_MODULE('업데이트 진행중: CUSTOMER', 'NOW : ' || (j+1));        UPDATE         (            SELECT                  A.*  ,                DECODE(B.MNFRM_RTRN_IND_CD,'P','C',B.MNFRM_RTRN_IND_CD) MNFRM_RTRN_IND_CD_NEW,                DECODE(B.BTRY_RTRN_IND_CD,'P','C',B.BTRY_RTRN_IND_CD) BTRY_RTRN_IND_CD_NEW,                DECODE(B.CHREQP_RTRN_IND_CD,'P','C',B.CHREQP_RTRN_IND_CD) CHREQP_RTRN_IND_CD_NEW            FROM CUSTOMER A, CUSTOMER_HIST B            WHERE A.ROWID = B.RID AND RNUM BETWEEN (j + 1) AND (10000 * i)        ) X        SET MNFRM_RTRN_IND_CD=MNFRM_RTRN_IND_CD_NEW,            BTRY_RTRN_IND_CD=BTRY_RTRN_IND_CD_NEW;        j := 10000 * i;        COMMIT;    end loop;end;/SQL> 위 BLOCK을 수행하기 전에 SID를 먼저 확인한 후 작업을 진행한다
MONITORINGSQL> SELECT SID, MODULE, ACTION FROM V$SESSION WHERE SID = ?수행결과SID   MODULE                            ACTION----  ---------------------------------  ----------------18   업데이트 진행중: CUSTOMER   NOW : 400001 row selected.SQL>
TIP2자신의 SID를 모르는 경우작업도구에서 SID를 알 수 없으면 .. 다음의 SQL을 활용한다SQL> SELECT SID FROM V$SESSION WHERE AUDSID = USERENV('SESSIONID') ;SID---181 row selected.SQL>단, DBA를 통해 V$SESSION에 대한 조회 권한과 관련 PACKAGE 수행권한을 획득해야 한다

More Related Content

PDF
웹동네 스터디 4주차-자바스크립트기초4
PDF
생체 광학 데이터 분석 AI 경진대회 1위 수상작
PPTX
Min inconmensurable weight
PPTX
DB와암호화 패턴
PDF
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
PDF
트랜잭션_인덱싱.pdf
PDF
대량의 DML 작업에 대한 성능개선방안_Wh oracle
PPTX
효율적인Sql작성방법 2주차
웹동네 스터디 4주차-자바스크립트기초4
생체 광학 데이터 분석 AI 경진대회 1위 수상작
Min inconmensurable weight
DB와암호화 패턴
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
트랜잭션_인덱싱.pdf
대량의 DML 작업에 대한 성능개선방안_Wh oracle
효율적인Sql작성방법 2주차

Similar to NO PARALLEL DML (20)

PPT
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
PPTX
효율적인 SQL 작성방법 1주차
PDF
Fundamentals of Oracle SQL
PPT
7.데이터수정
DOC
제1회 Tech Net Sql Server 2005 T Sql Enhancements
PDF
NLJ BATCH와 부분범위 처리_Wh oracle
PDF
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
PDF
Oracle Query Optimizer 관련 Parameter_OracleParameter
PDF
SQL PlAN MANAGEMENT 활용_Wh oracle
PPTX
DBMS 아키텍처
PDF
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
PPT
활용예시를 통한 Sql server 2012의 향상된 프로그래밍 기능 엿보기
PDF
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
PPTX
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
PDF
Database
PDF
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
PPTX
181215 MS SQL로 알아보는 데이터베이스
PDF
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
PPTX
SQL쿼리튜닝팁 - 허성
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
효율적인 SQL 작성방법 1주차
Fundamentals of Oracle SQL
7.데이터수정
제1회 Tech Net Sql Server 2005 T Sql Enhancements
NLJ BATCH와 부분범위 처리_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
Oracle Query Optimizer 관련 Parameter_OracleParameter
SQL PlAN MANAGEMENT 활용_Wh oracle
DBMS 아키텍처
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
활용예시를 통한 Sql server 2012의 향상된 프로그래밍 기능 엿보기
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
Database
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
181215 MS SQL로 알아보는 데이터베이스
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
SQL쿼리튜닝팁 - 허성
Ad

More from Kyung Sang Jang (18)

DOC
Oracle History #14
DOC
O10g miscellaneous 17
DOC
O10g flashback 13
DOC
O10g data control_10
DOC
O10g bak rec_15
DOC
O10g asm 16
DOC
O10g app support_11
DOC
O10g security 12
DOC
Oracle History #7
DOC
Oracle History #8
DOC
Oracle History #9
PDF
Oracle History #6
PDF
Oracle History #5
DOC
Oracle History #4
DOC
OracleHistory3
DOC
OracleHistory2
DOC
OracleHistory1
PPTX
11g nf sql_anlz
Oracle History #14
O10g miscellaneous 17
O10g flashback 13
O10g data control_10
O10g bak rec_15
O10g asm 16
O10g app support_11
O10g security 12
Oracle History #7
Oracle History #8
Oracle History #9
Oracle History #6
Oracle History #5
Oracle History #4
OracleHistory3
OracleHistory2
OracleHistory1
11g nf sql_anlz
Ad

NO PARALLEL DML

  • 1. DiscussionQuestion대용량 테이블에 대한 DML 처리는 ?Answer PARALLEL DML을 사용한다?
  • 2. DiscussionQuestion more Trigger가 걸린 온라인 대용량 테이블에대한 DML 처리는 ?Answer한 건씩 한다?
  • 3. Discussion대부분의 대용량 테이블에 대한 빠른 DML 처리는 PARALLEL 설정을 사용한다.하지만 해당 테이블에 TRIGGER가 걸려있거나 ONLINE 사용중인 테이블은 이에대한 부담이 크다. 이런 상황인 경우에 SQL을 일일이 만들어서 특정 범위를 반복적으로 DML을 수행하는경우가 있는데 작업자는 무한적 앉아서 엔터돌이를 해야 하는 걸까.좀 더 생각을 한 사람은 특정범위를 기준으로 PL/SQL을 통해 한 번에 작업을 한다.그러나. 문제는 현재 이 작업이 어느 정도 수행이 되었는지를 모르기 때문에재 작업의 부담도 크고 매우 답답함을 느낀다.다음의 내용은 이런 경우에 활용 가능한 TIP이다.
  • 4. 구조설계1. 한번에 대용량 처리가 불가능하다면 처리하고자 하는 데이터의 기준범위를 설정한다.5천만건을UPDATE해야하는데 해당 테이블에 트리거가 걸려있다.테스트를 해보니 대략 1만건 정도를 한번에 처리하는 것은 큰 부담이 없다고 판단되었다.2. FOR LOOP를 통해 1만 * ? = 5천만을 LOOP할 수 있는 구조를 만든다i * j = 5000만
  • 5. PACKAGE를 활용PACKAGE의 인수가 V$SESSION에 나타난다SELECT SID, MODULE, ACTION FROM V$SESSION WHERE SID = ?
  • 6. DML작성EX. UPDATABLE JOIN 활용의 예UPDATE 대상범위를 활용 하기 위해 “B”집합에 “ROWNUM”을 활용한 RNUM 속성과A 테이블 ROWID를RID 속성으로미리 만들어 둔다i, j 를 활용하여 업데이트 범위를 “1만”건 단위로 균일하게 처리할 수 있도록 조건을 추가하고 작업이 끝나면 j 를 증가시켜 다음 범위의 시작점을 초기화 시킨다
  • 7. 예제DECLAREiinteger; j integer;BEGIN j := 0; for i in 1..5000 loop DBMS_APPLICATION_INFO.SET_MODULE('업데이트 진행중: CUSTOMER', 'NOW : ' || (j+1)); UPDATE ( SELECT A.* , DECODE(B.MNFRM_RTRN_IND_CD,'P','C',B.MNFRM_RTRN_IND_CD) MNFRM_RTRN_IND_CD_NEW, DECODE(B.BTRY_RTRN_IND_CD,'P','C',B.BTRY_RTRN_IND_CD) BTRY_RTRN_IND_CD_NEW, DECODE(B.CHREQP_RTRN_IND_CD,'P','C',B.CHREQP_RTRN_IND_CD) CHREQP_RTRN_IND_CD_NEW FROM CUSTOMER A, CUSTOMER_HIST B WHERE A.ROWID = B.RID AND RNUM BETWEEN (j + 1) AND (10000 * i) ) X SET MNFRM_RTRN_IND_CD=MNFRM_RTRN_IND_CD_NEW, BTRY_RTRN_IND_CD=BTRY_RTRN_IND_CD_NEW; j := 10000 * i; COMMIT; end loop;end;/SQL> 위 BLOCK을 수행하기 전에 SID를 먼저 확인한 후 작업을 진행한다
  • 8. MONITORINGSQL> SELECT SID, MODULE, ACTION FROM V$SESSION WHERE SID = ?수행결과SID MODULE ACTION---- --------------------------------- ----------------18 업데이트 진행중: CUSTOMER NOW : 400001 row selected.SQL>
  • 9. TIP2자신의 SID를 모르는 경우작업도구에서 SID를 알 수 없으면 .. 다음의 SQL을 활용한다SQL> SELECT SID FROM V$SESSION WHERE AUDSID = USERENV('SESSIONID') ;SID---181 row selected.SQL>단, DBA를 통해 V$SESSION에 대한 조회 권한과 관련 PACKAGE 수행권한을 획득해야 한다