[오라클] 메모리 증설 SGA PGA 서버 작업까지

리눅스 서버에서 메모리 증설 후 Oracle SGA/PGA 조정 절차 (완벽 정리)
✅ 1. 리눅스 서버에서 할 작업
💡 물리적 메모리 증설이 완료된 상태에서 진행
1️⃣ 현재 시스템 메모리 확인
free -g # GB 단위로 확인
증설전 → 증설후
MemTotal: 16384 MB # 기존 16GB
MemTotal: 32768 MB # 증설 후 32GB
2️⃣ 리눅스 커널 매개변수 조정 (shmmax, shmall 설정)
Oracle은 **공유 메모리(shared memory)**를 사용하므로, shmmax, shmall 값을 조정해야한다. (잘못하면 DB 안올라옴 )
vi /etc/sysctl.conf
📌 설정 변경 (메모리 32GB 기준 예제)
kernel.shmmax = 30769803776 # > sga_max_target 27G * 1024*1024*1024
kernel.shmall = 6291456 # shmmax / PAGE_SIZE (4096)
✔ shmmax 계산 공식: shmmax ≥ SGA (SGA_TARGET 또는 SGA_MAX_SIZE)
✔ shmall 계산 공식: shmmax / 페이지 크기 (보통 4096바이트)
적용하기 (중 요 !)
sysctl -p
🔹 참고 SHMMAX (kernel.shmmax)의 의미
- SHMMAX는 **"단일 공유 메모리 세그먼트의 최대 크기"**를 의미함.
- 즉, SHMMAX는 SGA 크기(SGA_TARGET 또는 SGA_MAX_SIZE)보다 크거나 같아야 한다.
- 하지만 SHMMAX가 SGA + PGA 전체를 포함할 필요는 없음. (PGA는 공유 메모리가 아닌 개별 프로세스 메모리이므로 SHMMAX와 무관함.)
3️⃣ HugePages 설정 (SGA 성능 향상)
1) 현재 HugePages 설정 확인
grep Huge /proc/meminfo
📌 예시 (기본값은 설정 안되어있음)
HugePages_Total: 15500
HugePages_Free: 1690
HugePages_Rsvd: 16
HugePages_Surp: 0
HugePagesize: 2048 kB
Hugetlb: 31744000 kb
2) HugePages 개수 계산
💡 SGA가 24GB 필요하면
- HugePage 크기 확인
grep Hugepagesize /proc/meminfo
#결과
Hugepagesize: 2048 kB
필요한 HugePages 수 계산
- SGA_TARGET / HugePageSize
- 예제: 24GB / 2MB = 24*1024* / 2 = 12288 페이지 (단위 맞춰서 계산해주기)
3) HugePages 적용
vi /etc/sysctl.conf
수정 :
vm.nr_hugepages = 12288
적용 (중요) :
sysctl -p
✅ 2. Oracle에서 할 작업
1️⃣ 현재 SGA/PGA 설정 확인
SHOW PARAMETER SGA;
SHOW PARAMETER PGA;
NAME TYPE VALUE
---------------------------- ----------- ----------
sga_target big integer 12G
sga_max_size big integer 12G
pga_aggregate_target big integer 4G
2️⃣ 새로운 SGA/PGA 크기 계산
✔ SGA = 오라클에 할당된 메모리의 60~70% (전체메모리 *0.5 * 0.7)
✔ PGA = 오라클에 할당된 메모리의 20~30% (전체메모리 *0.5 * 0.3)
✔ OS 에 전체 메모리의 50% 남기기
📌 예제 (메모리 32GB → 64GB 증가 시)
- 기존: SGA_TARGET=12G, PGA_AGGREGATE_TARGET=4G
- 변경 후: SGA_TARGET= 64 * 0.5 * 0.7 = 22.4G, SGA_MAX_SIZE = 64 * 0.5 * 0.7 = 22.4G , PGA_AGGREGATE_TARGET= 64 * 0.5 * 0.7 = 9.6G
3️⃣ SGA/PGA 변경 적용 (SPFILE 기준)
ALTER SYSTEM SET SGA_MAX_SIZE = 22G SCOPE=SPFILE SID='*';
ALTER SYSTEM SET SGA_TARGET = 22G SCOPE=BOTH SID='*';
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 10G SCOPE=BOTH SID='*';
ALTER SYSTEM SET PGA_AGGREGATE_LIMIT = 20G SCOPE=BOTH SID='*';
📌 SPFILE 사용 시 재시작 필요, SGA_MAX_SIZE 는 SPFILE 에만 적용가능
shutdown immediate;
startup;
또는
#싱글노드
srvctl stop database -db DIGWDB
srvctl start database -db DIGWDB
#RAC
srvctl stop instance -d sigwdb -i SIGWDB1
srvctl start instance -d sigwdb -i SIGWDB1
srvctl stop instance -d sigwdb -i SIGWDB2
srvctl start instance -d sigwdb -i SIGWDB2
✅ 3. 추가적인 성능 점검
1️⃣ Buffer Cache Hit Ratio 확인 (SGA 튜닝 체크)
SELECT name, value FROM V$SYSSTAT WHERE name IN ('buffer cache hit ratio');