본문 바로가기

oracle

병렬 실행을 위한 매개 변수의 초기화 및 튜닝

크리에이티브 커먼즈 라이선스
Creative Commons License

출처 : http://docs.oracle.com/cd/E11882_01/server.112/e25523/parallel004.htm#i1007196

===============================================================

병렬 실행을 위한 매개 변수의 초기화 튜닝

Oracle Database 데이터베이스 시작 CPU_COUNT 하면 PARALLEL_THREADS_PER_CPU 값을 기반으로 병렬 실행 매개 변수의 기본값을 계산합니다. 매개 변수를 수동으로 조정하여 특정 시스템 구성이나 성능 목표에 맞게 값을 늘리거나 줄일 있습니다.

 

- 병렬 실행이 전혀 사용되지 않는 시스템에서 PARALLEL_MAX_SERVERS 0으로 설정할 있습니다.

- 풍부한 SGA 메모리를 갖춘 대규모 시스템 처리량을 높이기 위해 PARALLEL_EXECUTION_MESSAGE_SIZE 늘릴 있습니다.

 

병렬 실행 매개 변수를 수동으로 조정할 있습니다.

병렬 실행은 기본적으로 활성화되어 있습니다.

 

병렬 실행을 초기화 조정에는 다음 단계가 포함됩니다.

- 기본 파라미터 설정 사용

- 워크로드의 균형

- 세션에서 병렬 실행의 강제

 

기본 파라미터 설정 사용

기본적으로 Oracle Database 병렬 실행 매개 변수가 자동으로 8-3 같이 설정됩니다.

 

8-3 매개 변수 기본값

매개 변수

기본

비고

PARALLEL_ADAPTIVE_

MULTI_USER

TRUE

병렬 실행하여 SQL DOP 요청의 수를 제한하여 시스템 과부하를 방지합니다.

PARALLEL_DEGREE_LIMIT

CPU_COUNT X PARALLEL_THREADS_PER_CPU X ACTIVE_INSTANCES

AUTO DOP 사용하면, 문장에 허용되는 DOP 최대값을 제어합니다.

PARALLEL_DEGREE_POLICY

MANUAL

자동 DOP, 문장 대기열 메모리 병렬 실행을 사용할지 여부를 제어합니다. 기본적으로 기능은 비활성화되어 있습니다.

PARALLEL_EXECUTION_

MESSAGE_SIZE

16KB

병렬 실행 서버 병렬 실행 서버 질의 코디네이터 통신에 사용되는 버퍼의 크기. 버퍼는 공유 풀에서 할당됩니다.

PARALLEL_FORCE_LOCAL

FALSE

병렬 실행을 현재 RAC 인스턴스로 제한합니다.

PARALLEL_MAX_SERVERS

CPU_COUNT x PARALLEL_THREADS_PER_CPU x ( PGA_AGGREGATE_TARGET > 0 경우는 2, 그렇지 않으면 1) x 5

하나의 인스턴스에 대한 병렬 실행 프로세스와 병렬 복구 프로세스의 최대 수를 지정합니다. 수요가 증가하면 인스턴스를 시작할 만들어진 프로세스 수에서 최대 값으로 프로세스의 수가 증가합니다.

매개 변수의 설정이 너무 낮은 질의 처리에 충분한 병렬 실행 프로세스를 얻을 없는 경우가 있습니다. 너무 높게 설정하면 최대 메모리 자원 부족이 발생하여 성능이 저하될 있습니다.

PGA_AGGREGATE_TARGET 값을 MEMORY_TARGET 설정 되어 있는 경우 파생 있습니다.

다양한 시나리오에서 PGA_AGGREGATE_TARGET 사용에 대한 자세한 내용은 "Oracle Database 성능 튜닝 가이드" 참조하십시오.

PARALLEL_MIN_SERVERS

0

Oracle Database 시작할 병렬 실행하기 시작 예약 병렬 실행 프로세스의 수를 지정합니다. 설정을 늘리면 병렬 문장의 시작 비용을 균형 화하는 도움이 병렬 실행 프로세스는 데이터베이스가 중지될 때까지 삭제되지 않기 때문에 필요한 메모리 사용량은 증가합니다.

PARALLEL_MIN_PERCENT

0

병렬 실행에 필요한 요청한 병렬 실행 프로세스의 최소 백분율을 지정합니다. 기본값은 0으로 사용 가능한 병렬 서버 프로세스가 없는 경우, 병렬 문장은 직렬로 실행됩니다.

PARALLEL_MIN_TIME_

THRESHOLD

30

최적화 프로그램 추정 실행 시간. 이것보다 값의 경우, 문장은 자동 병렬 쿼리 자동 DOP 도출 후보입니다.

PARALLEL_SERVERS_TARGET

4 X CPU_COUNT X PARALLEL_THREADS_PER_CPU X ACTIVE_INSTANCE

문장의 큐잉을 사용할 때까지 쿼리를 실행하는 사용할 있는 병렬 실행 서버 프로세스의 . 문장의 대기열은 PARALLEL_DEGREE_POLICY AUTO 설정되어 있는 경우에만 활성화되는 것에 주의하십시오.

PARALLEL_THREADS_PER_

CPU

2

병렬 실행하는 동안 CPU 처리할 있는 병렬 실행 프로세스 또는 스레드의 수를 나타냅니다.

 

일부 매개 변수 설정 방법에 따라 Oracle Database 제약을 받으므로 주의하십시오. 예를 들어, PROCESSES 20으로 설정하면 25 개의 슬레이브를 검색할 없습니다.

 

세션에서 병렬 실행의 강제

병렬로 실행해야 하지만 테이블에 대한 DOP 설정 또는 관련 질의 변화를 피하고 싶은 경우는 다음의 문장을 사용하여 병렬 처리를 적용할 있습니다.

 

ALTER SESSION FORCE PARALLEL QUERY;

 

이후의 모든 쿼리는 제한을 위반하지 않는 병렬로 실행됩니다. DML 문장과 DDL 문장도 적용할 있습니다. 절은 세션의 후속 문장에 지정되는 모든 병렬 절보다 우선 되지만 병렬 hint 우선하지 않습니다.

 

예를 들어, 일반적인 OLTP 환경에서는 테이블에 병렬 설정이 없지만 매일 배치 스크립트를 사용하여 이러한 테이블에서 데이터를 병렬로 수집할 있습니다. 세션 중에 DOP 설정하여 사용자가 테이블을 병렬로 변경하고 완료되면 직렬로 되돌릴 필요가 없습니다.

 

병렬 실행을 위한 일반적인 매개 변수 조정

절의 내용은 다음과 같습니다.

- 병렬 작업 자원 제한을 설정하는 파라미터

- 자원 소비에 영향을 주는 변수

- I / O 관련된 파라미터

 

병렬 작업 자원 제한을 설정하는 파라미터

자원 한계를 설정하는 매개 변수를 보여 줍니다.

- PARALLEL_FORCE_LOCAL

- PARALLEL_MAX_SERVERS

- PARALLEL_MIN_PERCENT

- PARALLEL_MIN_SERVERS

- PARALLEL_SERVERS_TARGET

- SHARED_POOL_SIZE

 

PARALLEL_FORCE_LOCAL

PARALLEL_FORCE_LOCAL 매개 변수의 권장 값은 FALSE 입니다.

 

매개 변수는 병렬로 실행되는 SQL 문을 Oracle RAC 환경의 단일 인스턴스로 제한되는지 여부를 나타냅니다. 매개 변수를 TRUE 설정하면 쿼리 코디네이터가 실행하는 단일 RAC 인스턴스에 처리하는 병렬 슬레이브의 범위를 제한할 있습니다.

 

PARALLEL_MAX_SERVERS

PARALLEL_MAX_SERVERS 기본값은 다음과 같습니다.

(CPU_COUNT x PARALLEL_THREADS_PER_CPU x (2 if PGA_AGGREGATE_TARGET> 0; otherwise 1) x 5)

 

PGA_AGGREGATE_TARGET 값을 MEMORY_TARGET 설정되어 있는 경우 파생 있습니다. 다양한 시나리오에서 PGA_AGGREGATE_TARGET 사용에 대한 자세한 내용은 "Oracle Database 성능 튜닝 가이드" 참조하십시오. 계산은 DOP 특성이 높은 테이블에 대한 병렬 쿼리로는 충분하지 않을 있습니다. 높은 DOP 쿼리를 실행하려는 사용자는 PARALLEL_MAX_SERVERS 다음과 같이 설정하는 것이 좋습니다.

 

2 x DOP x NUMBER_OF_CONCURRENT_USERS

예를 들어, PARALLEL_MAX_SERVERS 64 설정하면 쿼리가 2 개의 슬레이브 세트를 사용하여 세트 DOP 8하면 4 개의 병렬 쿼리를 동시에 실행할 있습니다.

 

사용자 프로세스가 너무 많은 경우

동시 사용자 질의 서버 프로세스가 너무 많은 메모리 충돌 (페이징), I / O 경합 또는 과도한 컨텍스트 스위칭이 발생할 있습니다. 충돌로 인해 병렬 실행을 사용하지 않으면 수준보다 시스템 처리량이 감소할 있습니다. PARALLEL_MAX_SERVERS 값을 늘리는 것은 그것에 의해 생성되는 로드를 위한 충분한 메모리 I / O 대역폭을 시스템에 있는 경우에만 사용하십시오.

 

운영 체제 성능 모니터링 도구를 사용하면 메모리, 스왑 공간 I / O 대역폭의 가용성을 확인할 있습니다. CPU 디스크 모두 실행 대기열 길이 시스템 I / O 서비스 시간을 확인합니다. 프로세스를 추가하는 경우 시스템에 충분한 스왑 공간이 있는지 확인합니다. 질의 서버 프로세스 수를 제한하면 병렬 작업을 수행할 있는 동시 사용자 수를 제한 있지만, 시스템 처리량은 안정되게 됩니다.

 

사용자의 자원 제한

사용자에게 리소스 소비자 그룹을 설정하는 것으로, 지정된 사용자가 사용할 있는 병렬 처리의 양을 제한할 있습니다. 이것은 사용자 또는 사용자 그룹이 사용할 있는 세션 동시 로그온 병렬 프로세스의 수를 제한하는 사용됩니다.

 

병렬 실행 문을 처리하는 질의 서버 프로세스는 세션 ID 사용하여 로그온 합니다. 프로세스는 사용자의 동시 세션 제한에 대해 계산됩니다. 예를 들어, 사용자가 사용할 있는 병렬 실행 프로세스를 10 개로 제한하려면 사용자 제한을 11 설정합니다. 1 프로세스가 병렬 코디네이터를 위한 기타 10 프로세스가 2 세트 질의 서버를 구성합니다. 이렇게하면 병렬 코디 네이터 1 세션 병렬 실행 프로세스가 10 세션을 사용할 있습니다.

 

사용자 프로필을 사용하여 자원 관리에 대한 자세한 내용 "Oracle Database 관리자 가이드" , GV $ 뷰를 쿼리 자세한 내용은 "Oracle Real Application Clusters 관리 배포 가이드" 참조하십시오.

 

PARALLEL_MIN_PERCENT

PARALLEL_MIN_PERCENT 매개 변수의 권장 값은 0입니다.

 

매개 변수를 사용하면 사용자는 사용 중인 응용 프로그램에 따라 허용 DOP 기다리는 있습니다. 매개 변수를 0 아닌 값으로 설정하면 요청된 DOP 시점에서 시스템이 실현되지 않을 경우, Oracle Database 오류를 반환합니다. 예를 들어, PARALLEL_MIN_PERCENT 50 (50 %) 설정하면 다중 사용자 쿼리 조정 알고리즘이나 리소스 제한으로 DOP 50 % 이상 감소되면 Oracle Database ORA-12827 반환됩니다. 다음 예제를 제공합니다.

 

SELECT / * + FULL (e) PARALLEL (e, 8) * / d.department_id, SUM (SALARY)

FROM employees e, departments d

WHERE e.department_id = d.department_id

GROUP BY d.department_id ORDER BY d.department_id;

Oracle Database에서 다음 메시지가 반환됩니다.

 

ORA-12827 : insufficient parallel query slaves available

 

PARALLEL_MIN_SERVERS

매개 변수를 사용하면 하나의 인스턴스에서 병렬 작업에 시작 예약 프로세스 수를 지정할 있습니다. 구문은 다음과 같습니다.

 

PARALLEL_MIN_SERVERS = n

n 변수는 병렬 작업에 시작하고 유지하는 프로세스 수입니다.

PARALLEL_MIN_SERVERS 설정은 메모리 사용량과 실행 비용의 균형을 유지할 있습니다. PARALLEL_MIN_SERVERS 사용하여 실행되는 프로세스는 데이터베이스가 중지될 때까지 종료하지 않습니다. 이렇게 하면 쿼리가 실행되는 경우에는 많은 경우 프로세스가 사용할 있습니다.

 

PARALLEL_SERVERS_TARGET

PARALLEL_SERVERS_TARGET 권장 값은 4 X CPU_COUNT X PARALLEL_THREADS_PER_CPU X ACTIVE_INSTANCES 입니다.

 

PARALLEL_DEGREE_POLICY AUTO 설정되어 있으면 시스템에서 현재 사용되고 있는 병렬 프로세스의 수를 PARALLEL_SERVERS_TARGET 이상의 경우, 병렬 실행에 필요한 문장은 대기열에 포함됩니다. 이것은 시스템에서 사용할 있는 병렬 서버 프로세스의 최대 수는 없습니다 (그것은 PARALLEL_MAX_SERVERS 의해 제어됩니다.) 그러나 PARALLEL_SERVERS_TARGET 문장의 대기열을 사용하여 병렬 실행이 필요한 각각의 문장이 필요한 병렬 서버 자원에 할당된 병렬 서버 프로세스의 과잉에 의한 장애를 방지할 있습니다.

 

SHARED_POOL_SIZE

병렬 실행에서 직렬 SQL 실행에 필요한 메모리 자원 이외에 많은 메모리 자원이 필요합니다. 추가 메모리는 질의 서버 프로세스 문의 담당자 간의 통신 데이터를 전달하는 사용됩니다.

 

Oracle Database 공유 풀에서 질의 서버 프로세스에 메모리가 할당됩니다.

다음과 같이 공유 튜닝합니다.

- 공유 풀의 다른 클라이언트 (공유 커서 또는 저장 프로 시저 ) 고려합니다.

- 값이 다중 사용자 시스템의 성능이 향상되지만 작은 값이 메모리 사용량이 감소하게주의합니다.

- , 병렬 실행에 사용되는 버퍼의 수를 모니터링하고

V$PX_PROCESS_SYSSTAT shared pool PX msg pool 표시된 현재 최고 수위 목표를 비교합니다.

 

참고 :

사용 가능한 메모리가 충분하지 않으면 오류 메시지 12853 ( "PX 버퍼 메모리가 부족합니다. 현재는 String KB이지만 최대 String KB 필요합니다. ") 생성됩니다. 이것은 PX 버퍼를 위한 SGA 메모리가 충분하지 않은 경우에 발생합니다. 적어도 ( MAX - CURRENT ) 바이트를 추가하도록 SGA 메모리를 재구성해야 합니다.

 

기본적으로 Oracle Database 병렬 실행 버퍼를 공유 풀에서 할당합니다.

 

Oracle Database에서 시작할 다음 오류가 표시되면,

SHARED_POOL_SIZE 값이 데이터베이스를 시작할 있도록 충분히 낮출 필요가 있습니다.

 

ORA-27102 : out of memory

SVR4 Error : 12 : Not enough space

 

SHARED_POOL_SIZE 크기를 낮춘 다음 오류가 발생할 있습니다.

 

ORA-04031 : unable to allocate 16084 bytes of shared memory

( "SHARED pool", "unknown object", "SHARED pool heap", "PX msg pool")

 

경우 다음 쿼리를 실행하여 Oracle Database 16,084 바이트를 할당되지 않은 이유를 확인합니다.

 

SELECT NAME, SUM (BYTES)

FROM V$SGASTAT WHERE POOL = 'SHARED POOL'

GROUP BY ROLLUP (NAME);

출력은 다음과 같습니다.

 

NAME                       SUM(BYTES)

-------------------------- ----------

PX msg pool                   1474572

free memory                    562132

                              2036704

 

SHARED_POOL_SIZE 지정하면 보유해야 하는 메모리 용량이 Pool 보다 경우, Oracle Database에서 얻을 있는 메모리를 모두 할당하지 않습니다. 일부 영역이 남아 있습니다. 쿼리가 실행될 , Oracle Database 필요한 메모리를 취득하려고 합니다. Oracle Database 560KB 사용하여 실패하면 16KB 필요합니다. 오류는 필요 용량의 누적보고 되지 않습니다. 필요한 추가 메모리 용량을 확인하는 가장 좋은 방법은 "메시지 버퍼 메모리 추가" 식을 사용합니다.

 

예제 문제를 해결하려면 SHARED_POOL_SIZE 값을 늘립니다. 샘플 출력에 표시되도록 SHARED_POOL_SIZE 2MB입니다. 사용 가능한 메모리 용량에 따라 다르지만 SHARED_POOL_SIZE 값을 4MB 늘린 다음 데이터베이스 시작을 시도하십시오. Oracle Database에서 계속 ORA-4031 메시지가 표시되면 부팅이 성공할 때까지 SHARED_POOL_SIZE 값을 점차적으로 늘립니다.

 

메시지 버퍼의 추가 메모리 요구 사항 계산

공유 풀의 초기 설정을 확인한 메시지 버퍼의 추가 메모리 요구 사항을 계산하고 커서에 필요한 추가 공간을 결정할 필요가 있습니다.

 

메시지 버퍼 메모리 추가

메시지 버퍼를 수용할 있도록 SHARED_POOL_SIZE 매개 변수의 값을 늘려야 합니다. 메시지 버퍼는 질의 서버 프로세스가 서로 통신할 있습니다.

 

Oracle Database 생산자 저희 서버와 소비자 저희 서버 간의 가상 연결마다 일정 수의 버퍼가 사용됩니다. 연결 수는 DOP 증가에 맞추어 제곱의 수를 증가합니다. 이러한 이유로 병렬 실행에 사용되는 메모리의 최대 용량은 시스템에서 허용되는 DOP 최대값에 의해 제한됩니다. 값을 제어하려면 PARALLEL_MAX_SERVERS 매개 변수를 사용하거나 정책과 프로필을 사용합니다.

 

필요한 메모리 용량을 계산하려면 다음 공식을 사용합니다.

 

- SMP 시스템 :

mem in bytes = (3 x size x users x groups x connections)

 

- SMP Real Application Clusters MPP 시스템 :

mem in bytes = ((3 x local) + (2 x remote)) x (size x users x groups) / instances

인스턴스에서 식에서 계산된 메모리가 사용됩니다.

 

항목의 의미는 다음과 같습니다.

- SIZE = PARALLEL_EXECUTION_MESSAGE_SIZE

- USERS = DOP 최적일 경우 실행이 예상되는 동시 병렬 실행 자수

- GROUPS = 쿼리에 사용되는 질의 서버 프로세스 그룹

 

간단한 SQL 문장에 필요한 것은 1 그룹입니다. 그러나 쿼리 관련 서브쿼리가 병렬로 처리되는 경우, Oracle Database 이미 하나의 질의 서버 프로세스 그룹을 사용합니다.

 

- CONNECTIONS = (DOP 2 + 2 x DOP)

시스템이 클러스터 또는 MPP 경우 인스턴스 수를 고려할 필요가 있습니다. 인스턴스 수에 따라 DOP 증가하기 때문입니다. , 개의 인스턴스 클러스터에서 DOP 4로하면 결과 DOP 8입니다. 소극적인 견적으로 초기 값은 PARALLEL_MAX_SERVERS 인스턴스 수를 곱하면 4 나눈 값을 사용하는 것을 추천합니다.

 

- LOCAL = CONNECTIONS / INSTANCES

- REMOTE = CONNECTIONS - LOCAL

 

공유 원래 설정으로 용량을 추가합니다. 그러나 이러한 메모리 구조 하나의 값을 설정하기 전에 다음 단원에서 설명하는 커서에 대한 추가 메모리도 고려할 필요가 있습니다.

 

 

저작자 표시 변경 금지
신고