Huge Page
HugePage 내용
구성 방법
- 적정한 HugePage 값 계산
# (InnoDB Buffer 사이즈 + 10% 여유) / HugePage 사이즈 SELECT (@@INNODB_BUFFER_POOL_SIZE + (@@INNODB_BUFFER_POOL_SIZE * 0.1 )) / 1024 / 1024 / 2 AS "Recommended setting: vm.nr_hugepages"; /* +--------------------------------------+ | Recommended setting: vm.nr_hugepages | +--------------------------------------+ | XXX | +--------------------------------------+ */
- 계산한 값으로 HugePages 변경 및 커널 파라미터 변경
sysctl -w vm.nr_hugepages=XXX sysctl -w vm.swappiness=1 # mysql gid 값 확인 cat /etc/group | grep mysql #mysql:x:XX: # 확인된 gid 값으로 해당 파라미터 설정 sysctl -w vm.hugetlb_shm_group=XX # 재기동 이후에도 적용될 수 있도록 함 vi /etc/sysctl.conf # 추가할 내용 vm.nr_hugepages=XXX vm.swappiness=1 vm.hugetlb_shm_group=XX
- memlock 변경
vi /etc/security/limits.conf # 추가할 내용 mysql soft memlock unlimited mysql hard memlock unlimited
- MySQL 설정 변경
vi /etc/my.cnf # 추가할 내용 ([mysqld]) large-pages
- 변경한 커널 파라미터 적용 및 MySQL 재기동
# 변경한 커널 파라미터 적용 sysctl -p # HugePage 사용 현황 확인 cat /proc/meminfo | grep -i huge # MySQL 재기동 service mysqld restart
- MySQL에서 사용하고 있는 HugePages 수 확인
# pl 파일 생성 vi usedhugepages.pl # 추가할 내용 sub UsedHugePages { my $pid=$_[0]; open (NUMAMAPS, "/proc/$pid/numa_maps") || die "can't open numa_maps"; my $HUGEPAGECOUNT=0; while (<NUMAMAPS>) { if (/huge.*dirty=(\d+)/) { $HUGEPAGECOUNT+=$1; } } close NUMAMAPS; return ($HUGEPAGECOUNT); } printf "%d huge pages\n", UsedHugePages($ARGV[0]); # mysql pid ps -ef | grep mysql | grep -v root # pl 파일 샐행 perl usedhugepages.pl mysql_pid #XXX huge pages