1. Hugepage 정의, 이점
엔터프라이즈 급의 리눅스 환경에서 hugepage를 사용하는 것은 운영상의 이점이 있기에 거의 필수적으로 사용하고있다.
hugepage 란 커널의 메모리 사용 기법인데, 보통의 경우 regular size page 가 4k로 쪼개져서 메모리를 관리하게 된다.
잘게 쪼개진 page 로 인해 커널이 관리할 메타데이터의 양이 많아지는 부담과 메모리 스왑 현상이 나타나는 단점이 있다.
# 메모리 스왑 : 물리적 메모리 한계를 극복하기 위해 사용빈도가 적은 메모리의 영역을 디스크에 내려서 사용 가능 메모리 영역을 더 확보하려는 현상.
반면 hugepage를 사용하면, 4k 로 쪼개진 page 가 2M 단위로 관리되어 훨씬 적은 양의 메타데이터를 커널이 관리한다.
ex) 100GB SGA 를 사용할 경우
- 4k regular size page : 26,214,400 개
- 2m hugepage : 51200 개
2M hugepage 를 사용할 경우 커널이 관리할 메타데이터가 512 배가 절약 된다.
또한 hugepage 는 메모리에 상주하여 swap out 되지 않는다.
2. 운영중인 DB 의 SGA 에 적절한 hugepage 숫자를 계산하기
my oracle support 에 적절한 갯수 hugepage 를 계산하는 shell script (hugepages_settings.sh)가 있다.
오라클 인스턴스가 떠있는 상태에서 해당 쉘을 실행하자.
나의 경우엔 706 개 hugepage 가 적절하다고 알려준다.
나의 테스트 환경은 메모리가 넉넉하지 않아 instance 가 떠있는 상태에선 적절한 숫자의 hugepage 를 만들지 못한다.
이때는 instance 를 내리고 다시 명령어를 적용한다.
cat /proc/meminfo | grep Huge
sysctl -w vm.nr_hugepages=706
# 서버재기동시에도 적용위해
vi /etc/sysctl.conf
vm.nr_hugepages=706
hugepage 를 사용하여 SGA 가 기동되었다.
3. SGA 에서 hugepage 파라미터 설정
alter system set use_large_pages={ TRUE | FALSE | AUTO | ONLY | AUTO_ONLY } scope=spfile;
* USE_LARGE_PAGES 파라미터 값
- TRUE : hugepage 를 사용하지만 부족하면 일반 4k page 를 사용.
- FALSE : hugepage 를 사용하지 않고 일반 page 사용
- ONLY : hugepage 만으로 SGA 를 사용. free hugepage 가 부족시 instance 시작시 에러 발생
# USE_LARGE_PAGES 가 리눅스에만 해당하는 파라미터지만 FALSE 로 적용시 성능저하 가능성 있음.
AMM 을 쓰는 경우의 USE_LARGE_PAGES 를 FALSE 로 적용하는 것은 해당하지 않음.
# 호환성
1) incompatible
- AMM 을 사용할 경우에는 사용 불가
2) compatible
- AUTO PGA MANAGEMENT
WORKAREA_SIZE_POLICY = AUTO
PGA_AGGREGATE_TARGET = XXX
- Automatic Shared Memory Management
ALTER SYSTEM SET memory_target=0 SCOPE=BOTH;
ALTER SYSTEM SET SGA_TARGET=500M SCOPE=BOTH;
'생계 > Oracle' 카테고리의 다른 글
oracle audit 파일 삭제 (0) | 2023.05.29 |
---|---|
대용량 컬럼 drop 하기 # set unused (2) | 2023.05.04 |
[oracle] 현재 접속 스키마 변경 current_schema (0) | 2023.03.29 |
RMAN CATALOG DB 쓰는 이유 (0) | 2023.02.28 |
오라클 메모리 구조 Memory Architecture (0) | 2023.01.24 |