프린트 하기

OS환경 : Oracle Linux 6.8 (64bit)


DB 환경 : Oracle Database 12.2.0.1


에러 : ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT


해결 방법 : pga_aggregate_limit을 알맞게 설정한다.

PGA 자동 관리(pga_aggregate_target)를 사용하게 되면 target 값을 기준으로 work area 영역을 동적으로 할당하게 됨

하지만 pga_aggregate_target 값은 제한된 값을 나타내는 것은 아니기 때문에, 과도한 pga 사용으로 시스템이 불안정하게 될 수 있었음

12c에서는 pga_aggregate_limit 파라미터를 통해 pga의 사용을 제한할 수 있게됨

pga_aggregate_limit는 설정 값

- 2GB (기본값)

- pga_aggregate_target 값의 200%

- processes 파라미터 값 * 3MB

- Physical Memory의 120% - 총 SGA 크기값 이하



설정 방법

1
alter system set pga_aggregate_limit = n M | G

만약 alter system set pga_aggregate_limit = 0 으로 설정하면 제한을 두지 않음


이렇게 제한을 두지 않고 과도하게 사용할경우

top 명령어로 메모리 확인시

1
Mem:  14359788k total, 14259072k used,   100716k free,

이렇게 99% 사용으로 나오고


alert 로그에서 이런 로그를 만나게됨

1
2
3
4
5
6
7
8
9
10
11
12
13
14
2018-06-01T22:44:14.313042+09:00
WARNING: Heavy swapping observed on system in last 5 mins.
Heavy swapping can lead to timeouts, poor performance, and instance eviction.
Errors in file /app/oracle/diag/rdbms/orcl2/orcl2/trace/orcl2_dbrm_6492.trc  (incident=31266):
ORA-00700: soft internal error, arguments: [kskvmstatact: excessive swapping observed], [], [], [], [], [], [], [], [], [], [], []
Incident details in: /app/oracle/diag/rdbms/orcl2/orcl2/incident/incdir_31266/orcl2_dbrm_6492_i31266.trc
2018-06-01T22:44:21.571762+09:00
Process m000 died, see its trace file
2018-06-01T22:44:22.926062+09:00
Process m000 died, see its trace file
2018-06-01T22:44:23.919768+09:00
Dumping diagnostic data in directory=[cdmp_20180601224423], requested by (instance=1, osid=6492 (DBRM)), summary=[incident=31266].
2018-06-01T22:44:26.942299+09:00
Process m000 died, see its trace file


이상태로 더 놔두면

SQLPLUS 에서 아래 에러가 뜨면서 연결이 종료된다.

1
2
3
4
5
6
7
8
9
ERROR:
ORA-03114not connected to ORACLE
 
DECLARE
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 6913
Session ID: 32 Serial number: 10601



설정 범위

만약 pga_aggregate_limit 값을 2GB 보다 적게 주면 다음과 같은 에러가 발생함

1
ORA-00093: _shared_pool_reserved_min_alloc must be between 4000 and 0


설정 범위 초과 시

CKPT 프로세스가 매 3초마다 pga_aggregate_limit 값을 초과하는지 확인하게됨

만약 허용 범위를 초과 하였다면 해당 세션을 강제 종료하게되며 다음과 같은 에러가 발생함

1
ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT



원인 : PGA 설정범위 초과


참조 : http://www.kova.co.kr/techinfo/sub01_read.asp?fre_code=2&fre_num=4&fre_seq=4