AMM(Auto Memory Management)이란 오라클에서 인스턴스 메모리를 관리하는 가장 간단한 방법이다. 오라클에는 PGA(System Global Area), SGA(Program Global Area) 불리는 메모리 영역이 존재한다. 11g 이상에서 도입한 AMM 관리 기법은 SGA+PGA를 자동으로 관리하는 방식이다. 이때 전체 메모리를 설정하는 memory_max_target, memroy_target 파라미터를 설정해 주어야 하는 데 리눅스 운영체제의 /dev/shm
크기가 최대치가 된다. 리눅스는 기본적으로 전체 메모리의 50%를 ‘/dev/shm’에 할당하는 데 필요한 경우 이 영역을 변경하고 오라클 파라미터를 설정해야 오류가 나지 않는다. CentOS 8, Database 설치 글을 참고하여 필요한 만큼 설정(fstab, size)한다.
AMM 기능을 사용하면 SGA_TARGET, PGA_AGGREGATE_TARGET의 값을 0으로 지정하는 것이 좋다. 0이 아닌 경우 그 값을 최솟값으로 인식하기 때문이다.
su - oracle
sqlplus /nolog
SQL> conn / as sysdba
SQL> show parameter target
# 현재 설정되어 있는 memory_max_target, memory_target,
# pga_aggregate_target, sga_target 값을 확인한다.
AMM 설정
SQL> alter system set memory_max_target=6G scope=spfile;
SQL> alter system set memory_target=6G scope=spfile;
SQL> alter system set sga_target=0 scope=spfile;
SQL> alter system set pga_aggregate_target=0 scope=spfile;
SQL> shutdown immediate;
SQL> startup;
SQL> show parameter target
SQL> show parameter memory_max_target
SQL> show parameter memroy_target
SQL> exit
CharacterSet PLS-553
SELECT DISTINCT(NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,
DECODE(TYPE#, 1, DECODE(CHARSETFORM, 1, 'VARCHAR2', 2, 'NVARCHAR2', 'UNKOWN'), 9,
DECODE(CHARSETFORM, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'), 96,
DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'), 112,
DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN
FROM SYS.COL$
WHERE CHARSETFORM IN (1,2) AND TYPE# IN (1, 9, 96, 112);