2026년 09월 18일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-12827 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-12827 insufficient parallel query slaves available 는?
ORA-12827 에러는 Oracle 데이터베이스에서 병렬 쿼리(Parallel Query)를 실행할 때 필요한 병렬 슬레이브(Parallel Query Slave) 프로세스가 충분하지 않을 경우 발생하는 에러입니다. 병렬 실행을 위해 요청된 슬레이브 수가 현재 시스템에서 사용 가능한 슬레이브 수보다 많을 때, 또는 PARALLEL_MIN_PERCENT 파라미터로 설정된 최소 슬레이브 비율을 충족하지 못할 때 주로 발생합니다. 대용량 데이터를 처리하는 DW(Data Warehouse) 환경이나 야간 배치 작업 시간대에 여러 병렬 쿼리가 동시에 실행될 때 빈번하게 나타나는 에러입니다.
주요 발생 원인
1. PARALLEL_MIN_PERCENT 파라미터 설정으로 인한 슬레이브 부족
PARALLEL_MIN_PERCENT 파라미터는 요청한 병렬 슬레이브 수의 최소 비율을 지정합니다. 예를 들어 이 값이 50으로 설정되어 있고 8개의 슬레이브를 요청했는데 4개 미만만 사용 가능하다면, Oracle은 ORA-12827을 발생시키며 쿼리 실행을 거부합니다. 이 파라미터가 기본값(0)이 아닌 값으로 설정되어 있을 때 특히 주의가 필요합니다.
2. PARALLEL_MAX_SERVERS 한도 초과
PARALLEL_MAX_SERVERS 파라미터는 인스턴스 전체에서 동시에 실행될 수 있는 병렬 서버 프로세스의 최대 개수를 제한합니다. 여러 세션이 동시에 병렬 쿼리를 실행하면 이 한도에 빠르게 도달하며, 새로운 병렬 요청은 슬레이브를 할당받지 못해 에러가 발생합니다. 특히 피크 타임에 대용량 테이블의 Full Table Scan이 집중될 때 이 문제가 심각해집니다.
3. Resource Manager 정책에 의한 병렬 슬레이브 제한
Oracle Resource Manager를 사용하는 환경에서는 Consumer Group별로 병렬 서버 사용량이 제한될 수 있습니다. 특정 사용자 그룹에 할당된 병렬 슬레이브 수의 한도에 도달하면, 해당 그룹의 추가적인 병렬 쿼리는 ORA-12827을 만나게 됩니다. Resource Manager 정책이 엄격하게 설정된 멀티테넌트(CDB/PDB) 환경에서 특히 자주 발생합니다.
해결 방법
원인 1: PARALLEL_MIN_PERCENT 조정
현재 설정값을 확인하고 필요 시 낮추거나 0으로 초기화합니다.
-- 현재 파라미터 값 확인
SHOW PARAMETER PARALLEL_MIN_PERCENT;
-- 세션 레벨에서 0으로 초기화 (즉시 적용)
ALTER SESSION SET PARALLEL_MIN_PERCENT = 0;
-- 시스템 레벨에서 변경 (재시작 불필요)
ALTER SYSTEM SET PARALLEL_MIN_PERCENT = 0 SCOPE = BOTH;
-- 변경 후 확인
SELECT NAME, VALUE
FROM V$PARAMETER
WHERE NAME = 'parallel_min_percent';
원인 2: PARALLEL_MAX_SERVERS 한도 상향 조정
현재 병렬 슬레이브 사용 현황을 모니터링하고 적절한 값으로 조정합니다.
-- 현재 병렬 슬레이브 사용 현황 확인
SELECT DEGREE, INSTANCES, QCSID
FROM V$PX_SESSION
ORDER BY QCSID;
-- 현재 PARALLEL_MAX_SERVERS 값 확인
SHOW PARAMETER PARALLEL_MAX_SERVERS;
-- PARALLEL_MAX_SERVERS 값을 상향 조정
ALTER SYSTEM SET PARALLEL_MAX_SERVERS = 128 SCOPE = BOTH;
-- 활성 병렬 쿼리 수 모니터링
SELECT COUNT(*) AS ACTIVE_PX_SERVERS
FROM V$PX_PROCESS
WHERE STATUS = 'IN USE';
-- 병렬 쿼리 대기 현황 확인
SELECT SID, SERIAL#, SQL_ID, EVENT, WAIT_TIME
FROM V$SESSION
WHERE EVENT LIKE '%parallel%'
ORDER BY WAIT_TIME DESC;
원인 3: Resource Manager 정책 조정
Resource Manager 설정을 확인하고 병렬 슬레이브 한도를 조정합니다.
-- 현재 Resource Plan 확인
SELECT PLAN, STATUS, MANDATORY
FROM DBA_RSRC_PLANS
WHERE STATUS = 'ACTIVE';
-- Consumer Group별 병렬 슬레이브 한도 확인
SELECT PLAN, GROUP_OR_SUBPLAN, PARALLEL_SERVER_LIMIT
FROM DBA_RSRC_PLAN_DIRECTIVES
WHERE PARALLEL_SERVER_LIMIT IS NOT NULL
ORDER BY PLAN, GROUP_OR_SUBPLAN;
-- 병렬 슬레이브 한도 상향 조정 예시
BEGIN
DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA();
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
PLAN => 'MY_RESOURCE_PLAN',
GROUP_OR_SUBPLAN => 'BATCH_GROUP',
NEW_PARALLEL_SERVER_LIMIT => 80
);
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/
-- 임시로 특정 쿼리의 병렬도를 낮춰서 실행
SELECT /*+ PARALLEL(t, 2) */ *
FROM LARGE_TABLE t
WHERE CREATED > SYSDATE - 30;
긴급 상황 시 병렬 처리 비활성화
-- 세션 레벨에서 병렬 처리 강제 비활성화
ALTER SESSION DISABLE PARALLEL QUERY;
ALTER SESSION DISABLE PARALLEL DML;
ALTER SESSION DISABLE PARALLEL DDL;
-- 특정 테이블의 병렬도를 1로 임시 변경
ALTER TABLE LARGE_TABLE PARALLEL 1;
-- 작업 완료 후 원래 병렬도로 복원
ALTER TABLE LARGE_TABLE PARALLEL 8;
예방 방법
1. 병렬 슬레이브 사용량 정기 모니터링 및 적정 파라미터 유지
병렬 쿼리 리소스 사용량을 AWR(Automatic Workload Repository) 리포트와 V$ 뷰를 통해 주기적으로 모니터링하여 피크 타임 사용량을 파악하고 적절한 PARALLEL_MAX_SERVERS 값을 유지합니다. 아래 쿼리를 스케줄러에 등록하여 임계값 초과 시 알림을 받도록 구성하는 것이 좋습니다.
-- 병렬 슬레이브 사용률 모니터링 쿼리 (정기 실행 권장)
SELECT
SYSDATE AS CHECK_TIME,
(SELECT VALUE FROM V$PARAMETER WHERE NAME = 'parallel_max_servers') AS MAX_SERVERS,
COUNT(*) AS IN_USE_SERVERS,
ROUND(COUNT(*) /
(SELECT VALUE FROM V$PARAMETER WHERE NAME = 'parallel_max_servers') * 100, 2
) AS USE_PCT
FROM V$PX_PROCESS
WHERE STATUS = 'IN USE';
2. PARALLEL_MIN_PERCENT는 0으로 유지하고, 쿼리 힌트로 병렬도를 명시적으로 제어
PARALLEL_MIN_PERCENT를 0이 아닌 값으로 설정하면 예상치 못한 ORA-12827이 발생할 수 있으므로, 이 파라미터는 기본값(0)으로 유지하는 것이 권장됩니다. 대신 중요도가 높은 배치 쿼리는 힌트를 통해 명시적으로 병렬도를 제어하고, Resource Manager로 Consumer Group별 최대 병렬 슬레이브를 관리하는 방식을 채택하면 안정적인 운영이 가능합니다.
관련 에러
- ORA-12801: 병렬 쿼리 서버에서 에러가 발생했을 때 나타나는 에러로, ORA-12827과 함께 나타나는 경우가 많습니다.
- ORA-12805: 병렬 슬레이브가 예상치 못하게 종료될 때 발생하며, 리소스 부족 상황에서 연쇄적으로 발생할 수 있습니다.
- ORA-04031: SGA의 Shared Pool 메모리 부족으로 발생하며, 병렬 쿼리 실행 계획 파싱 시 함께 나타날 수 있습니다.
- ORA-12826:
PARALLEL_MIN_PERCENT관련 에러로, ORA-12827과 유사한 조건에서 발생합니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.