오라클에서 대용량 데이터를 처리할 때,
단일 프로세스만 사용하는 쿼리는 느리고 비효율적일 수 있습니다.
이럴 때 사용하는 것이 바로 병렬 처리 힌트(Parallel Hint)입니다.
Oracle은 병렬 쿼리 기능을 통해
하나의 SQL 실행을 여러 프로세스가 나눠서 동시에 처리할 수 있게 해줍니다.
이 글에서는
✅ 병렬 처리 힌트의 종류,
✅ 사용 방법과 주의사항,
✅ 병렬 처리 시 얻을 수 있는 성능 이점
등을 알기 쉽게 정리해드립니다.
⚙️ 병렬 처리란?
하나의 쿼리를 여러 CPU가 동시에 나눠 실행하는 기능
오라클은 CPU가 여럿일 때, 하나의 SQL을
👉 스캔, 정렬, 조인, 집계 등의 단계로 나눠
👉 병렬 슬레이브 프로세스들이 동시에 작업하게 합니다.
✅ 그 결과: 속도 향상, 대기 시간 감소, 대용량 처리에 강력
🧠 대표 병렬 처리 힌트 2종
1. 🚀 PARALLEL(table, degree) — 병렬 실행 요청
SELECT /*+ PARALLEL(emp, 4) */ * FROM emp;
- 설명: emp 테이블을 4개의 프로세스로 병렬 처리 요청
- degree 생략 가능: /*+ PARALLEL(emp) */ → 디폴트 병렬도 사용
- 적용 대상:
- 테이블 Full Scan
- 대용량 조인
- 집계 함수 등
✅ 사용 예
SELECT /*+ PARALLEL(sales, 8) */ product_id, SUM(amount)
FROM sales
GROUP BY product_id;
2. ⛔ NOPARALLEL(table) — 병렬 실행 억제
SELECT /*+ NOPARALLEL(emp) */ * FROM emp;
- 설명: 특정 테이블에 대해 병렬 처리를 강제로 하지 않도록 설정
- 사용 시점:
- 병렬 처리 시 오히려 성능이 저하될 때
- 시스템 자원 과다 소모 방지 필요 시
✅ 병렬 힌트 적용 시 효과
작업 유형 | 병렬 처리 효과 |
Full Table Scan | ✅ 빠른 블록 읽기 가능 |
대용량 조인 | ✅ 처리 시간 단축 |
정렬/집계 | ✅ 병렬 분산 처리로 부하 감소 |
INSERT/CREATE TABLE AS SELECT | ✅ Direct Path 병렬 가능 |
⚠️ 병렬 힌트 사용 시 주의사항
주의 항목 | 설명 |
🔧 서버 설정 | 병렬 처리는 서버의 CPU/메모리 설정에 따라 제한 |
🔄 IO 부하 | 병렬도가 너무 높으면 오히려 디스크 병목 발생 가능 |
📊 통계 필수 | 옵티마이저가 병렬 실행을 고려하려면 통계가 최신이어야 함 |
🧪 반드시 테스트 | 힌트만 믿지 말고 실행 계획으로 효과 확인 필요 |
🔍 실행 계획 확인 예시
EXPLAIN PLAN FOR
SELECT /*+ PARALLEL(emp, 4) */ * FROM emp;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
실행 계획에서 PX COORDINATOR, PX SEND, PX BLOCK 같은 키워드가 있으면 병렬 처리 적용됨.
📌 힌트 요약 정리표
힌트 | 설명 |
PARALLEL(table) | 병렬 처리 요청 (기본 병렬도 사용) |
PARALLEL(table, N) | 병렬도 N으로 명시 |
NOPARALLEL(table) | 병렬 처리 사용 금지 |
🏁 마무리
병렬 힌트는
🔸 대용량 테이블
🔸 집계 쿼리
🔸 Full Table Scan
상황에서 성능을 획기적으로 개선할 수 있는 도구입니다.
하지만 시스템 자원 상황과 병렬 계획 여부에 따라
반드시 EXPLAIN PLAN이나 AUTOTRACE로 실행 결과를 검토하고
필요할 때에만 전략적으로 사용하세요.