Oracle Database를 사용하기 위한 RHEL 튜닝방법은 3가지가 있다.
tuned
에서 제공하는 tuned-profiles-oracle
프로필 사용
Oracle RDBMS를 위한 tuned-profiles-oracle
은 기본으로 제공되지는 않는다.
RHEL6
: rhel-6-server-optional-rpms
RHEL7
: rhel-7-server-optional-rpms
RHEL8
: rhel-8-for-x86_64-baseos-rpms
위의 채널(레포지토리)를 등록하면 사용할 수 있다.
이 내용에 언급 된 모든 수치는 일반적인 것이 아니며 Red Hat Enterprise Linux에 상주하는 데이터베이스 워크로드에 긍정적인 영향을 미치는 것으로 나타났습니다. 즉, 특정 값은 사용자 환경에 따라 다르며 추가 조정이 필요할 수 있습니다.
vm.swappiness=10
dirty page
를 가질 수있는 활성 메모리의 최대 백분율. 예를 들어 시스템에 1000
개의 메모리 페이지가 있고 dirty_background_ratio
가 3%
로 설정되어 있으면 30페이지가 더러워 지면 쓰기 저장이 시작됩니다 .vm.dirty_background_ratio=3
dirty page
를 가질 수있는 총 메모리의 최대 백분율. 1000
개의 페이지가 있는 시스템 에서 40%
로 설정되어 있으면 400
번째 페이지가 더러워질때까지 대기합니다. 이 메커니즘은 시스템이 더티 페이지를 확인하는 속도를 느리게 합니다.vm.dirty_ratio=40
vm.dirty_expire_centisecs=500
pdflush
가 활성화되는 빈도 (1/100초) :vm.dirty_writeback_centisecs=100
/proc/meminfo
에서 Hugepagesize
얻기$ grep Huge /proc/meminfo HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 2048 kB
Hugepagesize
및 SGA (System Global Area)
값을 사용하여 아래 공식을 사용하여 권장되는 HugePages
수를 계산합니다. SGA에 대한 자세한 내용과 해당 값을 찾을 수있는 위치는 Oracle 설명서를 참조하십시오. PGA (Program Global Area)
는 Hugepages
를 사용하지 않습니다.SGA / huge page size
다음은 20GB SGA에 맞추기 위해 필요한 10240
Hugepages
의 양을 보여주는 예 입니다. 값은 계산을 위해 모두 킬로바이트로 변환되었습니다.
Hugepagesize = 2048 KB 20 GB SGA = 20971520 KB (20971520 / 2048) = 10240
/etc/sysctl.conf
설정에 해당 번호를 추가 합니다.vm.nr_hugepages=10240 vm.hugetlb_shm_group=<insert oracle group ID here>
HugePage
할당을 grub
구성의 커널 줄로 부팅 옵션으로 이동하는 것이 좋습니다. 이를 통해 HugePages
를 더 빠르고 깔끔하게 할당 할 수 있습니다.kernel /vmlinuz-<kernel-version> ro root=/dev/vg01/lv01 hugepages=10240 <other boot options>
Hugepages
가 커널 명령 줄에 설정되어 있지 않은 경우에서 nr_hugepages
값을 설정하여 동적으로 할당 할 수 있습니다.
Oracle 데이터베이스가 Red Hat Enterprise Linux
에서 Huge Pages
를 사용하려면 /etc/security/limits.conf
에서 oracle
사용자에 대한 ulimit
매개 변수 memlock
을 늘려야 할 수도 있습니다. memlock
설정은 KB 단위로 지정되며 Oracle이 할당 할 수있는 Huge Pages
수의 메모리 크기와 일치해야합니다. 따라서 Oracle 데이터베이스가 512 개의 Huge Pages
를 사용할 수 있어야한다면 memlock
을 최소한 (512 * Hugepagesize)
로 설정해야합니다. 기본 시스템에서는 1048576KB (512 * 2048)
가 됩니다.
oracle soft memlock 1048576 oracle hard memlock 1048576
SHMALL
은 시스템 전체에서 사용할 수있는 공유 메모리 페이지의 최대 총량입니다. 따라서 SHMALL
는 항상 최소 ceil(SHMMAX/PAGE_SIZE)
보다 커야 합니다.SHMMAX
은 만들 수있는 단일 공유 메모리 세그먼트의 최대 크기 (바이트)입니다.mem=$(free -b | awk '/Mem/ {print $2}')
page=$(getconf PAGE_SIZE)
SHMALL
대한 페이지에서 시스템 총 메모리의 75%를 계산합니다.all=$(expr $mem \* 75 / 100 / $page + 1)
SHMALL
값에 페이지 크기를 곱하면 다음 SHMMAX
을 얻을 수 있습니다.max=$(expr $all \* $page)
/etc/sysctl.conf
파일 에서 SHMMAX
및 SHMALL
값을 설정 하십시오.echo "kernel.shmmax = $max" >> /etc/sysctl.conf echo "kernel.shmall = $all" >> /etc/sysctl.conf
/etc/sysctl.conf
파일 에서 SHMMNI
와 공유 메모리 세그먼트의 최대 수를 설정 하십시오.echo "kernel.shmmni = 4096" >> /etc/sysctl.conf
kernel.sem="250 32000 100 128"
SEMMSL
은 세마포어 세트당 최대 세마포어 수입니다.SEMMNS
는 시스템의 총 세마포 수를 정의합니다.SEMOPM
은 세마포어 호출 당 최대 세마포어 작업 수를 정의합니다.SEMMNI
는 시스템의 전체 세마포어 세트 수를 정의합니다.# sysctl -w "kernel.sem = 250 32000 100 128" # echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf
# vi /etc/security/limits.conf #<domain> <type> <item> <value> oracle hard nofile 10000
tuned
가 설치된 경우 tuned
및 ktune
서비스 비활성화 # service tuned stop # chkconfig tuned off # service ktune stop # chkconfig ktune off
# tuned-adm off
이 tuned-adm
명령은 모든 설정을 조정 시작 전의 설정으로 되돌리고 부팅시 조정 서비스가 실행되지 않도록합니다. 대안으로, 사용자 정의 된 조정 된 프로필을 생성하여 이전 설정을 대신하고 THP
만 비활성화 할 수 있습니다. Red Hat Enterprise Linux 6
에서 TPP (Transparent hugepages) 비활성화가 적용되지 않음
을 참조하십시오.
/boot/grub/grub.conf
파일의 커널 명령 줄에 transparent_hugepage=never
추가 합니다.kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=a216d1e5-884f-4e5c-859a-6e2e2530d486 rhgb quiet transparent_hugepage=never
# reboot
기본 CFQ I/O 스케줄러
는 대부분의 워크로드에 적합하지만 데이터베이스 환경에 최적의 성능을 제공하지 않습니다. 대신 다음 IO 스케줄러 중 하나를 사용해야합니다.
deadline
스케줄러는 물리적 스토리지에 권장noop
스케줄러는 가상 스토리지에 권장RHEL7
에서는 기본적으로 numa_balancing
이 활성화됩니다. 이것은 Oracle 워크로드에 대한 영향을 볼 수 있으므로 모범 사례는 NUMA 균형 조정을 방지하는 것입니다./etc/sysctl.conf
에서 kernel.numa_balancing = 0
을 구성하고 sysctl -p
를 실행하십시오.