출처 : 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
공유 풀 원래 설정으로 이 용량을 추가합니다. 그러나 이러한 메모리 구조 중 하나의 값을 설정하기 전에 다음 단원에서 설명하는 커서에 대한 추가 메모리도 고려할 필요가 있습니다.
'Oracle DB > Administration' 카테고리의 다른 글
Flashback Technology (11gNF) (0) | 2013.08.22 |
---|---|
Flashback Technology (0) | 2013.08.22 |
Securing Stored Data Using Transparent Data Encryption (0) | 2013.08.21 |
병렬 실행을 위한 매개 변수의 초기화 및 튜닝 (0) | 2013.08.21 |
'oracle' 카테고리의 다른 글
ORA-01552: cannot use system rollback segment for non-system tablespace ‘USERS’ (0) | 2017.01.15 |
---|---|
tablespace 관련 명령어 (0) | 2017.01.15 |
오라클 사용량 DB 사이즈 확인 (0) | 2017.01.13 |
ORA-30036: 세그먼트를 8만큼 실행 취소 테이블 스페이스 'UNDOTBS'에서 확장할 수 없음 (0) | 2017.01.13 |
oracle redo log file (0) | 2017.01.13 |