물리 메모리 증설

2023. 4. 3.·Oracle/Installation

물리 메모리 증설 시 인스턴스 메모리 설정을 변경하기 전에 kernel.shmmax, kernel.shmall, vm.nr_hugepages 파라미터를 변경해야 합니다.

 

참고로 아래 명령어로 파라미터 값을 조회할 수 있습니다.

# sysctl -a | grep kernel.shm

# cat /etc/sysctl.conf | grep kernel.shm


kernel.shmmax 파라미터는 공유 메모리의 최대 크기(바이트)를 의미하며 일반적으로 물리 메모리 크기와 동일한 값을 설정합니다. kernel.shmall 파라미터는 공유 메모리의 최대 페이지 개수를 의미하며 CEIL (shmmax / PAGE_SIZE) 공식으로 값을 계산할 수 있습니다. 증설의 경우 두 파라미터 모두 기존 값에 증설한 비율을 곱한 값을 설정하면 됩니다. 참고로 파라미터 값은 sysctl 명령어의 -w 옵션과 -p 옵션으로 설정할 수 있습니다. -w 옵션은 입력 값을 설정하며, -p 옵션은 /etc/sysctl.conf 파일에 저장된 값을 설정합니다. 리부트 후에도 설정값을 적용하려면 /etc/sysctl.conf 파일의 값을 변경해야 합니다.

# sysctl -w kernel.shmmax=value

# vi /etc/sysctl.conf
kernel.shmmax = value
kernel.shmall = value

# sysctl -p

 

참고로 아래의 명령어로 PAGE_SIZE 값을 조회할 수 있습니다.

# getconf PAGE_SIZE
4096

 

vm.nr_hugepages 파라미터는 HugePage 개수를 의미하며 (SGA / Hugepagesize) * 1.05 공식으로 대략적인 값을 계산할 수 있습니다. 정확한 값은 hugepages_settings.sh 스크립트로 계산해야 합니다. 증설의 경우 기존 값에 변경된 비율을 곱한 값을 설정하고 인스턴스를 재기동 후에 hugepages_settings.sh 스크립트로 계산된 값을 재설정하면 됩니다.

# vi /etc/sysctl.conf
vm.nr_hugepages=value

# sysctl -p

 

아래 링크에서 hugepages_settings.sh 파일을 다운로드할 수 있습니다.

hugepages_settings.sh
0.00MB

 

참고로 아래의 명령어로 Hugepagesize 값을 조회할 수 있습니다.

# cat /proc/meminfo | grep -i huge
HugePages_Total:   71680
HugePages_Free:     4710
HugePages_Rsvd:        1
HugePages_Surp:        0
Hugepagesize:       2048 kB

 

memlock은 잠글 수 있는 메모리(SGA)의 최대 크기(바이트)를 의미하며 vm.nr_hugepages * Hugepagesize 공식으로 값을 계산할 수 있습니다. vm.nr_hugepages 파라미터에 따라 memlock 값을 변경해야 하지만 Exadata는 memlock 값이 unlimited로 설정되어 있어 값을 변경할 필요가 없습니다.

# cat /etc/security/limits.conf | grep memlock
oracle    soft     memlock     unlimited
oracle    hard     memlock     unlimited

 

kernel.shmmax, kernel.shmall 파라미터를 잘못 설정하면 ORA-27102: out of memory 또는 ORA-27104: system-efined limits for shared memory was misconfigured 에러가 발생할 수 있고, vm.nr_hugepages 파라미터를 잘못 설정하면 ORA-27106: system pages not available to allocate memory 에러가 발생할 수 있습니다. 만약 사용중인 HugePage가 해제되지 않아 ORA-27106 에러가 발생한 경우라면 icps -m 명령어로 사용 현황을 확인하고 sysctl 명령어로 vm.nr_hugepages 파라미터를 0으로 설정하여 HugePage를 해제한 후 값을 재설정해야 합니다.

# ipcs -m

# sysctl -w vm.nr_hugepages=0
# sysctl -p

 

관련 링크

  • Oracle Linux: HugePages What It Is... and What It Is Not... (Doc ID 361323.1)
  • Oracle Linux: HugePages on Oracle Linux 64-bit (Doc ID 361468.1)
  • Oracle Linux: Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID 401749.1)
저작자표시 비영리 변경금지 (새창열림)
'Oracle/Installation' 카테고리의 다른 글
  • Oracle Database 23c Free - Developer Release 설치
  • Oracle Database 23c Free - Developer Release 공개
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 주력해 왔으며, 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며, Oracle 사의 공식 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • Oracle (171)
        • SQL (33)
        • PLSQL (10)
        • Performance (74)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (5)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
물리 메모리 증설
상단으로

티스토리툴바