일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Opatch
- DataGuard
- oracle recovery
- 오라클설치
- 19c
- Database
- 디비투
- ogg
- ORACLE19C
- 데이터베이스
- oracle goldengate
- diskgroup
- 오라클아키텍쳐
- oracle installation
- SSH
- Oracle
- goldengate
- Installation
- 오라클
- Oracle 19c
- SILENTMODE
- 사일런트모드
- 오라클구조
- 데이터가드
- ActiveDataGuard
- 오지지
- adg
- linux
- OracleGoldenGate
- 티베로
- Today
- Total
DoubleDBDeep
Oracle Linux - Hugepage 본문
개요
Oracle Linux에서 물리적 메모리는 Page 단위로 관리된다 (4KB 블록)
커널은 page table이라는 시스템 구조에 메모리와 연결할 수 있는 가상 주소를 저장하는데,
이 테이블을 조회할 때 리소스를 많이 먹기 때문에 최근 사용한 주소는 CPU의 TLB(Translation Lookaside Buffer)에 캐시됨 -> 여기 먼저 검색해서 속도 빠르게할려구
대용량 메모리를 사용하는 응용프로그램은 4KB 짜리 블록을 쫌쫌따리로 계속 요청하면 TLB miss가 많이 발생하고 overhead가 많아져서 느려질수 있어서
그렇다면 애초에 커다란 메모리 블록(2MB )을 만들어서 조금만 요청하게 만들자 ! 해서 생긴게 hugepage
* hugepage는 default 2MB 크기이고 1GB로도 설정할 수 있다.
오라클 파라미터 ( use_large_pages ) 설정으로 오라클이 4kb page 메모리 말고 hugepage만 사용할 수 있게 할 수도 있다. -> 방법은 아래에
커널 값 확인 및 수정
확인
-- 현재 hugepage 값 확인
$ cat /proc/meminfo | grep Huge
root@em191:/root# cat /proc/meminfo | grep Huge
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
-- 공유 메모리 IPC 자원목록 조회
root@em191:/media/scripts# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 2 gdm 777 16384 1 dest
0x00000000 5 gdm 777 2129920 2 dest
0xa2a1d5f8 6 grid 600 73728 42
0x00000000 7 oracle 600 8929280 184
0x00000000 8 oracle 600 2499805184 92
0x00000000 9 oracle 600 7847936 92
0x406326fc 10 oracle 600 28672 92
<< Oracle Database Memory Parameter setting >>
NAME DISPLAY_VALUE
------------------------------ --------------------
sga_max_size 2400M
sga_target 2400M
pga_aggregate_target 795M
pga_aggregate_limit 2G
shared_pool_size 0
db_cache_size 0
large_pool_size 0
java_pool_size 0
내 환경에 맞는 Hugepage 값 계산
* 스크립트는 아래 Docs에서 확인할 수 있습니다
MOS Docs : Oracle Linux: Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID 401749.1)
-- 실행권한 부여
$ chmod +x hugepages_settings.sh
-- 실행
$ ./hugepages_settings.sh
<< 1번 노드 >>
root@em191:/media/scripts# ./hugepages_settings.sh
This script is provided by Doc ID 401749.1 from My Oracle Support
(http://support.oracle.com) where it is intended to compute values for
the recommended HugePages/HugeTLB configuration for the current shared
memory segments on Oracle Linux. Before proceeding with the execution please note following:
* For ASM instance, it needs to configure ASMM instead of AMM.
* The 'pga_aggregate_target' is outside the SGA and
you should accommodate this while calculating the overall size.
* In case you changes the DB SGA size,
as the new SGA will not fit in the previous HugePages configuration,
it had better disable the whole HugePages,
start the DB with new SGA size and run the script again.
And make sure that:
* Oracle Database instance(s) are up and running
* Oracle Database 11g Automatic Memory Management (AMM) is not setup
(See Doc ID 749851.1)
* The shared memory segments can be listed by command:
# ipcs -m
Press Enter to proceed...
Recommended setting: vm.nr_hugepages = 1204
<< 2번 노드 >>
[FIN19]oracle@em192:/home/oracle# sh hugepages_settings.sh
This script is provided by Doc ID 401749.1 from My Oracle Support
(http://support.oracle.com) where it is intended to compute values for
the recommended HugePages/HugeTLB configuration for the current shared
memory segments on Oracle Linux. Before proceeding with the execution please note following:
* For ASM instance, it needs to configure ASMM instead of AMM.
* The 'pga_aggregate_target' is outside the SGA and
you should accommodate this while calculating the overall size.
* In case you changes the DB SGA size,
as the new SGA will not fit in the previous HugePages configuration,
it had better disable the whole HugePages,
start the DB with new SGA size and run the script again.
And make sure that:
* Oracle Database instance(s) are up and running
* Oracle Database 11g Automatic Memory Management (AMM) is not setup
(See Doc ID 749851.1)
* The shared memory segments can be listed by command:
# ipcs -m
Press Enter to proceed...
Recommended setting: vm.nr_hugepages = 1638
2번 노드에 싱글 db한대가 더 있어서 1번과 다르게 뜨는걸 볼 수 있음!
-> 오라클에서 만들어 둔 쉘로 하는 방법이고,
해당 서버에서 사용할 DB들의 sga * 1.1 값으로 설정해도 됨.
위 환경으로 계산해보면, 2400MB의 SGA / 2MB (hugepage) = 1200개 * 1.1 = 1320개
근데 이런 DB가 3대다 ? 1320 * 3개의 hugepage 필요하겠지 ..
그래서 싱글로 노드별 다른 디비가 존재하면 노드마다도 값이 달라질 수 있기 때문에 각 노드의 상황에 맞게 설정해야함
Hugepage 적용
MOS Docs : Oracle Linux: HugePages What It Is... and What It Is Not... (Doc ID 361323.1)
-- 사용 중이던 메모리 정리하고 hugepage를 확보하기위해 instance shutdown
$ srvctl stop instance -i EM191 -d EM19
<< 1번 노드 작업 >>
$ sysctl -w vm.nr_hugepages=1204
-- 확인
$ grep Huge /proc/meminfo
root@em191:/media/scripts# sysctl -w vm.nr_hugepages=1204
vm.nr_hugepages = 1204
root@em191:/media/scripts# grep Huge /proc/meminfo
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
FileHugePages: 0 kB
HugePages_Total: 1204
HugePages_Free: 1204
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 2465792 kB
-- instance startup
$ srvctl start instance -i EM191 -d EM19
-- 확인 (free가 줄어들었음)
$ grep Huge /proc/meminfo
root@em191:/media/scripts# grep Huge /proc/meminfo
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
FileHugePages: 0 kB
HugePages_Total: 1204
HugePages_Free: 6
HugePages_Rsvd: 3
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 2465792 kB
reboot 시에도 적용하기 위해 커널 파라미터 변경
$ vi /etc/sysctl.conf
vm.nr_hugepages=1204
Oracle Database에서 parameter로 Hugepage 사용 설정
https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/USE_LARGE_PAGES.html
Database Reference
USE_LARGE_PAGES is used to manage the database's use of large pages for SGA memory.
docs.oracle.com
SQL> show parameter use_large_pages
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
use_large_pages string TRUE
VALUE DESC
ONLY Hugepage만 사용. 할당메모리가 부족한 경우 instance 뜨지 않음
일관된 성능을 위해 오라클이 권장하는 값이고, Exadata, Cloud에서는 Default 설정임
AUTO instance startup 시 필요한 largepage 수를 계산하고 요청함
AUTO_ONLY instance startup 시 필요한 largepage 수를 계산하고 요청함
요청한 만큼의 largepage가 없으면 instance 뜨지 않음
TRUE Mixed page mode allocation
System에 large pages가 구성된 경우 instance에서 사용할 수 있도록 함
(hugepage 먼저 사용 우선시되고 부족하면 page 사용)
FALSE 사용 x
SQL> alter system set use_large_pages=ONLY scope=spfile ;
** alter 후 db 재기동 필요 **
>> AMM 사용 시 Hugepage 사용 불가
(ASMM : SGA 동적 관리 / AMM : SGA+PGA 동적 관리)
MEMORY_TARGET, MEMORY_MAX_TARGET parameter <> 0 이면 사용중인거임
'ETC > Linux' 카테고리의 다른 글
Oracle Linux 7.9 OS 설치 / VirtualBox / NAT SSH 접속 설정 (0) | 2023.02.07 |
---|