티스토리 뷰

아직도 4KB짜리 조각 메모리 쓰세요?

Oracle 데이터베이스 느려지는

근본 원인, 2MB 대형 페이지 설정

하나로 10배 빠르게 해결하는

DB 성능 최적화 노하우 대공개!

 

. HugePages란 무엇이며 
  왜 필요할까?

혹시 여러분의 Oracle DBMS가 대규모 트래픽

에서 예상치 못한 성능 저하를 겪고 있진

않습니까?

그 원인은 서버의 메모리 관리 방식,

특히 HugePages (HugeTLB) 설정 여부일 수

있습니다.

일반적으로 리눅스 운영체제는 메모리를 4KB

단위의 작은 페이지로 관리합니다.

하지만 시스템 글로벌 영역 (SGA)이 수십 GB에

달하는 대형 데이터베이스 환경에서는, 운영

체제가 관리해야 할 페이지 테이블 엔트리(PTE)

의 수가 기하급수적으로 늘어납니다.

이 방대한 관리 작업은 CPU 오버헤드를 유발

하고, TLB Miss를 증가시켜 메모리 접근 속도

를 저하시킵니다.

HugePages는 이러한 문제를 해결하기 위해

고안되었습니다. 메모리를 2MB 단위의 거대한

블록으로 할당하여 페이지 테이블 관리 부담을

혁신적으로 줄여줍니다.

  • 성능 이점
    메모리 접근 속도 개선 (TLB Miss 감소),
    CPU 사용량 감소.

  • 안정성 이점
    할당된 HugePages 영역은 스와핑(Swapping)
    대상에서 제외되어 치명적인 디스크 I/O 발생
    을 원천 차단합니다. Oracle DB 성능 최적화
    의 핵심 단계입니다.
* TLB (Translation Lookaside Buffer)
​TLB는 컴퓨터가 매우 빠르게
메모리를 찾는 것을 돕는 특별한 작은 캐시
라고 생각하시면 되요!

 


. HugePages 설정을
  언제 검토할까요?

다음과 같은 상황이라면 즉시 HugePages 설정

을 점검하고 활성화해야 합니다.

1. 대규모 SGA 사용

Oracle 인스턴스의 SGA 크기가 수 GB 이상

으로 설정된 경우.

2. AMM (Automatic Memory Management)

미사용

MEMORY_TARGET 대신 ASMM

(SGA_TARGET,

PGA_AGGREGATE_TARGET)을 사용 중인

환경. HugePages는 AMM과 동시에 사용할

수 없습니다.

3. 높은 CPU 부하 또는 TLB Miss

OS 레벨에서 메모리 관리 관련 CPU 사용률

이 높게 나타나거나, 경쟁 상황에서 성능 지연

이 자주 발생할 때.

특정 업무의 데이터베이스에서 발생한 멀티

프로세스 동시 실행 문제와 같은 리소스 경합

상황에서도 메모리 오버헤드 감소를 위해

HugePages 활성화는 필수적인 해결책으로

제안됩니다.


 

. HugePages 설정 적용 방법

HugePages 설정은 OS 커널 변경을 포함

하므로, 반드시 계획된 유지보수 기간에 진행

해야 합니다.

1. 요구 사항 계산 및 메모리 잠금 설정

계산 스크립트(Doc ID 401749.1 기반 참조)를

실행하여 필요한 페이지 개수를 확인합니다.

제시된 예시 값인 vm.nr_hugepages = 18754를

기준으로 진행합니다.

1) 필요한 메모리 크기 확인

18,754 X 2,048KB = 38,408,192 KB

2) 메모리 잠금 (memlock) 설정:

Oracle 사용자(e.g, oracle)가 이 메모리를

잠글 수 있도록 limits.conf 파일을 수정합니다.

Bash
     # /etc/security/limits.conf 파일에 추가 (예시)
     oracle soft memlock 39000000
     oracle hard memlock 39000000

💡 Tip : 변경 후, Oracle 사용자로 
             새로운 세션을 열어 적용합니다.



2. OS 커널 매개변수 설정 및 적용

/etc/sysctl.conf 파일을 편집하여 HugePages

개수를 설정합니다.

Bash
     # /etc/sysctl.conf 파일에
     # HugePages 개수 설정
     vm.nr_hugepages = 18754

파일 저장 후, 다음 명령을 실행하여

변경 내용을 시스템 커널에 반영합니다.

Bash
     /sbin/sysctl -p

3. Oracle 인스턴스 재시작

HugePages가 SGA 영역에 할당되도록 Oracle

데이터베이스 인스턴스를 재시작해야 합니다.

SQL
     $ sqlplus / as sysdba
     SQL> shutdown immediate;
     SQL> startup;


. HugePages 설정 체크리스트

설정 적용 후, 아래의 검증 작업을 통해

HugePages가 정상적으로 작동하고 있는지

확인해야 합니다.

No.
확인 항목
확인 방법
성공 기준
1
OS 커널 설정
grep HugePages /proc/meminfo
HugePages_Total이 설정한 18754와 일치하는지 확인.
2
실제 사용량
grep HugePages /proc/meminfo
HugePages_Used 값이 SGA 크기에 맞게 할당되어 있는지 확인.
3
Alert Log 메시지
alert_SID.log 파일 확인
인스턴스 시작 시 "Using large pages for SGA" 메시지가 포함되어야 합니다.
4
DB 매개변수
SQL> SHOW PARAMETER use_large_pages;
USE_LARGE_PAGES가 ONLY 또는 TRUE로 설정되어 있는지 확인.

위와 같은 확인 절차를 통해 여러분의 Oracle

데이터베이스는 불필요한 메모리 관리 오버헤드

에서 벗어나 훨씬 더 빠르고 안정적인 성능

발휘하게 될 것입니다.


Oracle DB 성능 향상에 관심 있는 많은 DBA를

비롯한 관리자분들께 HugePages는 선택이

아닌 필수입니다. 작은 페이지 조각 관리에

낭비되던 CPU 리소스를 핵심 업무에 집중시켜,

느린 쿼리 문제에 대한 가장 확실한 해결책을

제시합니다. 계산된 값을 정확히 적용하고,

재시작 후 검증하는 절차만 잘 따른다면 곧바로

성능 개선 효과를 체감하실 수 있습니다.

지금 바로 여러분의 Oracle 시스템을 점검해

보시기 바랍니다.