생계/Oracle2023. 5. 3. 23:41

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)가 있다. 

 MOS (Doc ID 401749.1) 

 

https://login.oracle.com:443/oam/server/obrareq.cgi?encquery%3DK%2Fs4FslU9YB9bzkyYnXg2wvQoxpbKfzNpzo%2FO9uCIXObYULdq8rUDNdi1%2B31Dulke9vAtUU1ryGV%2B7SVsVx0rSUw6HkOJ%2B6EO%2FHswwoggbJW0LTHEknFRxiBdYgqTzCKn7cL2gPg7ZfvAOwQEqvF85UiBCW5kJXeC1x7gLWMI4q8zqp6XICsWDVews3QRcsZA42BbpFYHxtPosRsLW22qId1IF3jEWxHI36GC4Tr5sRBDTxbACj0DZHXLsFnJE%2B4G6db0lXm6LBAL%2F6fVQZkNedgfSWGx0pq3IsifbvD3aZ9VrUmyGGXI96blm7uBnqiAPKPxyxHVm5qou042s4NssTR7WjyT3KtCdPec%2BKP7z5uuZFWXXuXCvvDn6SqNI7SPvdAyoVDErSvtDr%2B5dhFNw%3D%3D%20agentid%3DcorpWebgates%20ver%3D1%20crmethod%3D2

 

login.oracle.com:443

 

오라클 인스턴스가 떠있는 상태에서 해당 쉘을 실행하자.

나의 경우엔 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;

반응형
Posted by 돌고래트레이너