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-03114: not 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