18
The Technique of Java Programming

오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

Embed Size (px)

Citation preview

Page 1: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

The Technique of Java Programming

Page 2: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

들어가기

이 자료는 교육 등 비영리 목적으로만 사용해야 합니다 !!!!

Page 3: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

만든사람 및 책 소개

• 오라클 SQL과 PL/SQL을 다루는 기술 : 오라클 프로그래밍 , 현장 밀착 입문서는 따로 있다 !

• 홍형경

• 주요 저서 : - 〈뇌를 자극하는 오라클 프로그래밍 SQL&PL/SQL

- Head First 시리즈를 비롯해 다수의 책 번역

Page 4: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

PL/SQL 성능 향상 기법넷째 마당 . 실무 능력을 높이는 오라클 프로그래밍 기법

16장

Page 5: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

01 일괄 처리

함수 성능 향상

병렬 처리

02

PL/SQL 성능 향상 기법

03

Page 6: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

01

개요

일괄 처리

● DB 상에서 대량의 데이터 처리 시 성능 저하 발생 작업 시간이 오래 걸린다

● 일반적인 성능 향상 기법 SQL 튜닝

● SQL 튜닝은 전문 튜너의 영역으로 수 많은 경험과 전문적 기술을 필요로 함

● SQL 튜닝 외에 개발자 입장에서 좀 더 빠른 성능을 발휘할 수 있는 PL/SQL 기능을 살펴본다

Page 7: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

01

BULK COLLECT

일괄 처리

● SELECT INTO 와 FETCH 문에서 사용

● 결과 로우 수가 1 개 이상일 때는 컬렉션 변수에 넣는다

● 일반적으로 반복문을 사용해 한 로우씩 변수에 값을 할당

● BULK COLLECT 절을 사용하면 한 번에 일괄 처리

Page 8: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

01

BULK COLLECT

일괄 처리

● 사용 예

-- 커서 선언 CURSOR c1 IS SELECT employee_id FROM emp_bulk;

-- 컬렉션 타입 선언 TYPE bkEmpTP IS TABLE OF emp_bulk.employee_id%TYPE; -- bkEmpTP 형 변수 선언 vnt_bkEmpTP bkEmpTP;

OPEN c1; -- 루프를 돌리지 않는다 . FETCH c1 BULK COLLECT INTO vnt_bkEmpTP; CLOSE c1;

Page 9: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

01

FOR ALL 문

일괄 처리

● INSERT, UPDATE, DELETE, MERGE 같은 DML 문과 함께 사용되어 일괄처리 성능이 좋음

● 사용 예

-- BULK COLLECT 절을 사용해 vnt_BulkID 변수에 데이터 담기 FETCH c1 BULK COLLECT INTO vnt_BulkID;

-- 루프를 돌리지 않고 DELETE. FORALL i IN 1..vnt_BulkID.COUNT UPDATE emp_bulk SET retire_date = hire_date WHERE bulk_id = vnt_BulkID(i);

Page 10: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

02

사용자 정의 함수

함수 성능 향상

● 자주 사용하는 기능을 함수로 만든다 재사용 가능 , 개발 편의성

● 함수의 과도한 사용 심각한 성능 저하를 초래

● 성능 저하 예

UPDATE emp_bulk SET dep_name = fn_get_depname_normal ( department_id ) WHERE bulk_id BETWEEN 1 AND 1000;

동일한 department_id 가 1,000 건이라면 같은 부서명을 가져오기 위해

부서 테이블을 1,000 번 읽는다

Page 11: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

02

RESULT CACHE 기능

함수 성능 향상

● 한 번 가져온 데이터를 캐시에 담아 재사용 하는 기능

● 함수가 반환하는 데이터가 동일하다면 테이블은 1 번만 조회

● 구문 CREATE OR REPLACE FUNCTION 함수명 ( 매개변수 1, …) RETURN 반환타입 RESULT_CACHE RELIES_ON ( 참조테이블 1, …) IS BEGIN … END;

Page 12: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

02

RESULT CACHE 기능

함수 성능 향상

● RELIES_ON ( 참조테이블 1, …) 이미 가져온 데이터가 캐시에 담겨 있는데 원천참조 테이블에서 데이터가 변경됐을 경우에는 새로 데이터를 가져와야 함 . 이러한 역할을 수행하는 것이 RELIES_ON 절

● RESULT CACHE 기능 사용 정보

V$RESULT_CACHE_STATISTICS 시스템 뷰

Page 13: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

03

병렬 처리란 ?

병렬 처리

● 하나의 작업을 처리하기 위해 동시에 여러 개의 프로세스를 띄워 분할해서 처리하는 것

● 많은 데이터를 처리 시 병렬 처리를 하면 수행 성능이 극대화 됨

● 하지만 과도한 사용은 역효과를 불러옴

병렬 처리시 사용할 수 있는 병렬 프로세스 개수가 유한하므로 동시에 과도한 작업 시 정체 유발

Page 14: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

03

ALTER SESSION 을 사용하는 방법

병렬 처리

● ALTER SESSION ENABLE PARALLEL QUERY

병렬 쿼리 옵션을 활성화 ( 디폴트로 활성화 상태임 )

● ALTER SESSION FORCE PARALLEL QUERY PARALLEL degree 수

degree 수 만큼 병렬 프로세스를 띄워 쿼리를 수행

● ALTER SESSION DISABLE PARALLEL QUERY

병렬 쿼리 옵션 비활성화

Page 15: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

03

PARALLEL 힌트를 사용하는 방법

병렬 처리

● /*+ PARALLEL ( 테이블명 degree 수 ) */

쿼리 문 (SELECT 문 ) 에 직접 PARALLEL 이라는 병렬 힌트를 준다

● 사용 예

SELECT /*+ PARALLEL (a 4), PARALLEL(b 4) */ a.column1, a.column2, … FROM TABELA a, TABLEB b WHERE a.column_1 = b.column_1 AND ….

Page 16: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

03

병렬 DML

병렬 처리

● 쿼리 뿐만 아니라 INSERT, UPDATE, DELETE, MERGE 문 실행 시 병렬 처리 가능

● ALTER SESSION ENABLE PARALLEL DML

DML 문 실행 시 병렬 처리 활성화 ( 디폴트는 비활성화 )

● ALTER SESSION FORCE PARALLEL DML PARALLEL degree 수

degree 수 만큼 병렬 프로세스를 띄워 DML 문 처리

● ALTER SESSION DISABLE PARALLEL DML

DML 문 실행 시 병렬 처리 비활성화

Page 17: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

03

병렬 DML

병렬 처리

● 사용 예

-- 강제로 병렬 DML 을 실행시키고 degree 수는 4 로 설정했다 . EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DML PARALLEL 4';

Page 18: 오라클 SQL과 PL/SQL을 다루는 기술 - 16장.PL/SQL 성능 향상 기법

03

병렬 처리 시 주의사항

병렬 처리

● 응답속도가 빠른 SQL 문에는 병렬 처리를 하지 않는다

● 병렬 프로세스 (degree) 수를 적절히 사용

● 병렬 DML 처리 시 반드시 처리가 끝난 뒤에는 DML 옵션을 비활성화

● INSERT~SELECT 문 처럼 SELECT 문이 있으면 병렬 DML 뿐만 아니라

병렬 쿼리 기능도 함께 사용