DB

full parallel hint 오라클 힌트 사용방법 (쿼리 속도가 안나온다면?)

A라는 테이블에 6,900만건의 데이터가 있고 B라는 테이블에 1억 6천만건의 데이터가 있다. 물론 인덱스도 당연히 생성되어있다.

내가 필요한 특정 자료를 찾기위해 2개의 테이블을 조인걸고 조회했을때 인덱스를 태운다하더라도 너무 느린경우가 발생한다. 데이터가 조회되지않고 20분 넘게 돌아가거나 서버 설정에 의해 자동으로 끊기는 경우가 발생한다.

이러한 경우 돌파구로 패러럴 힌트절을 일시적으로 사용해볼 수 있다. Parallel hint는 자바에서 스레드와 비슷한 개념으로 이해하면 좋을 것 같다. 여러프로세스가 동일작업을 동시에 나눠서 실행해주는 병렬처리 힌트절이다.

PARALLEL 힌트절은 FULL 힌트절과 같이 사용되는데 병렬 처리를 위한 힌트절로 처리 성능은 매우 좋다. 다만 자원을 독점적으로 사용하게된다. 그럼으로 Multi User 환경에서는 주의해야 한다. 만약 수치값을 1로 주면 FULL 힌트절만 동작하게되며, 수치값을 주지 않는다면 사용 가능한 자원 모두를 사용하므로 주의해야 한다.

PARALLEL HINT 예시

SELECT /*+ FULL( A ) PARALLEL(A 8) FULL(B) PARALLEL(B 8) */

FROM TB_TEST A, TB_DETAIL B

WHERE A.ID = B.ID

페러럴 힌트절의 8과 같은 숫자를 parallel degree라고 하는데, 숫자가 높을 수록 cpu자원을 독점하게 된다.

DB서버의  CPU가 4 코어라면  페러럴 힌트는 4까지 사용할 수 있다.

단일 테이블 데이터조회시에도 페러럴힌트절을 다음 예제 처럼 사용할 수 있다.

SELECT /*+ FULL( A ) PARALLEL(A 16)  */

COUNT(1) as CNT

FROM TB_DETAIL A

참고로 SELECT문과 마찬가지로 INSERT, UPDATE, DELETE 등에서도  페러럴 힌트절을 사용할 수 있다. 단 아래명령어를 실행하여 설정이 필요하다.

ALTER SESSION ENABLE PARALLEL DML; 

INSERT /*+ PARALLEL(a,4) */ INTO 테이블 a

error: Content is protected !!