본문 바로가기

카테고리 없음

[Oracle] 오라클 병렬 처리 힌트 ( PARALLEL HINT )

반응형

병렬 처리는 대용량 데이터를 빠르게 처리하기 위한 핵심 기술입니다. 오라클은 다양한 병렬 처리 힌트를 제공하여 쿼리 성능을 극대화할 수 있게 해 줍니다. 이 포스트에서는 주요 병렬 처리 관련 힌트들을 자세히 살펴보고, 실제 사용 예제를 통해 그 효과를 이해해 보겠습니다.

1. PARALLEL 힌트

PARALLEL 힌트는 특정 테이블이나 인덱스에 대해 병렬 처리를 지시합니다.

문법

/*+ PARALLEL(table_name, degree) */

여기서 degree는 병렬 처리의 정도를 나타냅니다. 숫자로 지정하거나 'DEFAULT'를 사용할 수 있습니다.

예제

SELECT /*+ PARALLEL(employees, 4) */
    department_id, AVG(salary)
FROM 
    employees
GROUP BY 
    department_id;

이 예제에서는 employees 테이블에 대해 4개의 병렬 처리 프로세스를 사용하여 각 부서의 평균 급여를 계산합니다.

2. PARALLEL_INDEX 힌트

PARALLEL_INDEX 힌트는 인덱스 스캔을 병렬로 수행하도록 지시합니다.

문법

/*+ PARALLEL_INDEX(table_name, index_name, degree) */

예제

SELECT /*+ PARALLEL_INDEX(employees, emp_department_ix, 2) */
    employee_id, first_name, last_name
FROM 
    employees
WHERE 
    department_id = 50;

이 예제에서는 emp_department_ix 인덱스를 2개의 병렬 프로세스로 스캔하여 50번 부서의 직원 정보를 조회합니다.

3. NO_PARALLEL 힌트

NO_PARALLEL 힌트는 병렬 처리를 비활성화합니다.

문법

/*+ NO_PARALLEL(table_name) */

예제

SELECT /*+ NO_PARALLEL(orders) */
    order_id, customer_id, order_date
FROM 
    orders
WHERE 
    order_date > DATE '2023-01-01';

이 예제에서는 orders 테이블에 대해 병렬 처리를 비활성화하고 순차적으로 처리합니다.

4. PARALLEL_ENABLE 힌트

PARALLEL_ENABLE 힌트는 사용자 정의 함수에 대해 병렬 처리를 활성화합니다.

문법

CREATE FUNCTION function_name RETURN data_type
PARALLEL_ENABLE
AS
BEGIN
    -- function body
END;

예제

CREATE FUNCTION get_department_name(p_dept_id NUMBER) 
RETURN VARCHAR2
PARALLEL_ENABLE
AS
    v_dept_name VARCHAR2(30);
BEGIN
    SELECT department_name INTO v_dept_name
    FROM departments
    WHERE department_id = p_dept_id;

    RETURN v_dept_name;
END;

이 예제에서는 부서 ID를 입력받아 부서 이름을 반환하는 함수를 병렬 처리가 가능하도록 생성합니다.

5. PQ_DISTRIBUTE 힌트

PQ_DISTRIBUTE 힌트는 병렬 쿼리 환경에서 조인 작업의 분배 방식을 지정합니다.

문법

/*+ PQ_DISTRIBUTE(table_name, outer_distribution, inner_distribution) */

예제

SELECT /*+ PQ_DISTRIBUTE(d HASH HASH) */
    e.employee_id, e.first_name, e.last_name, d.department_name
FROM 
    employees e
JOIN 
    departments d ON e.department_id = d.department_id;

이 예제에서는 employeesdepartments 테이블을 조인할 때, 양쪽 모두 해시 분배 방식을 사용하도록 지시합니다.

주의사항

  1. 병렬 처리는 시스템 리소스를 많이 사용하므로, 적절한 상황에서만 사용해야 합니다.
  2. 병렬 처리의 정도(degree)는 시스템의 CPU 수와 전체 워크로드를 고려하여 설정해야 합니다.
  3. 작은 테이블이나 간단한 쿼리에 대해서는 병렬 처리가 오히려 성능을 저하시킬 수 있습니다.
  4. 병렬 처리 힌트는 데이터베이스의 병렬 처리 설정과 상호작용하므로, 전체적인 데이터베이스 설정을 고려해야 합니다.
  5. 트랜잭션 처리가 빈번한 OLTP 시스템에서는 병렬 처리를 신중하게 사용해야 합니다.

병렬 처리 힌트는 대용량 데이터를 다루는 복잡한 쿼리의 성능을 크게 향상시킬 수 있는 강력한 도구입니다. 하지만 그 사용에는 신중한 고려가 필요합니다. 데이터의 크기, 시스템 리소스, 쿼리의 특성 등을 종합적으로 고려하여 적절히 사용해야 합니다. 올바르게 사용된 병렬 처리 힌트는 데이터 웨어하우스나 대규모 배치 작업의 성능을 극대화하는 데 큰 도움이 될 수 있습니다.

반응형