8.11.4.2 대형 페이지 지원 활성화
하드웨어 또는 운영 시스템의 아키텍처에 따라 기본 (일반적으로 4K 바이트)보다 큰 메모리 페이지를 지원합니다. 이 지원의 실제 구현은 기반이되는 하드웨어와 운영 체제에 따라 다릅니다. 대량의 메모리 액세스하는 응용 프로그램의 경우 큰 페이지를 사용하여 변환 룩 어 사이드 버퍼 (TLB; Translation Lookaside Buffer)의 실수가 감소하여 성능이 향상 될 수 있습니다.
MySQL에서 InnoDB에서 대형 페이지를 사용하여 버퍼 풀 및 추가 메모리 풀에 메모리를 할당 할 수 있습니다.
MySQL의 표준 대형 페이지 사용에 지원되는 최대 크기 인 4M 바이트까지의 사용이 시도됩니다. Solaris에서는 '초대형 페이지'기능 256M 바이트의 페이지 사용이 가능합니다. 이 기능은 최신 SPARC 플랫폼에서 사용할 수 있습니다. 이것은 --super-large-pages
또는 --skip-super-large-pages
옵션을 사용하여 활성화하거나 비활성화 할 수 있습니다.
MySQL은 대형 페이지 지원 Linux 구현 (Linux에서는 HugeTLB라고도 함)도 지원합니다.
Linux에서 대형 페이지를 사용하기 전에 커널에서이를 지원할 수 있도록해야, HugeTLB 메모리 풀을 구성해야합니다. 참고로 HugeTBL API는 Linux 소스의 Documentation/vm/hugetlbpage.txt
파일에 설명되어 있습니다.
Red Hat Enterprise Linux 등의 일부 최신 시스템의 커널에서는 대형 페이지 기능이 기본적으로 활성화되어있는 것 같습니다. 사용중인 커널에 이것이 적용되는지 여부를 확인하려면 다음 명령을 사용하여 "huge"를 포함 출력 행을 찾습니다.
shell> cat /proc/meminfo | grep -i huge
HugePages_Total : 0
HugePages_Free : 0
HugePages_Rsvd : 0
HugePages_Surp : 0
Hugepagesize : 4096 kB
비어 있지 않은 명령 출력은 대형 페이지 지원이 있는지를 나타냅니다 만, 0 값은 사용하도록 구성된 페이지가 없음을 나타냅니다.
대형 페이지를 지원하도록 커널을 재구성 할 필요가있는 경우, 지침 hugetlbpage.txt
파일을 참조하십시오.
Linux 커널에서 대형 페이지 지원이 활성화되어 있다고 가정하고 그것을 다음 명령을 사용하여 MySQL에서 사용하도록 구성합니다. 일반적으로 시스템이 부팅 할 때마다 명령이 실행되도록 시스템 부팅 중에 실행되는 rc
파일 또는 동등한 시작 파일에 이러한을 켭니다. 명령은 부팅 초기의 MySQL 서버를 시작하기 전에 실행되어야합니다. 시스템에 적절한 같이 할당의 수치와 그룹 번호를 변경하십시오.
# Set the number of pages to be used. # Each page is normally 2MB, so a value of 20 = 40MB. # This command actually allocates memory, so this much # memory must be available. echo 20> / proc / sys / vm / nr_hugepages # Set the group number that is permitted to access this # memory (102 in this case) The mysql user must be a # member of this group. echo 102> / proc / sys / vm / hugetlb_shm_group # Increase the amount of shmem permitted per segment # (12G in this case). echo 1560281088> / proc / sys / kernel / shmmax # Increase total amount of shared memory. The value # is the number of pages. At 4KB / page 4194304 = 16GB. echo 4194304> / proc / sys / kernel / shmall
MySQL에서 사용하는 경우 일반적 shmmax
값을 shmall
값에 가까워 야하고 싶다고 생각합니다.
라지 페이지의 구성을 확인하려면 위에서 설명한대로 다시 /proc/meminfo
를 확인합니다. 이제 0이 아닌 값이 표시되는 것입니다.
shell> cat /proc/meminfo | grep -i huge
HugePages_Total : 20
HugePages_Free : 20
HugePages_Rsvd : 0
HugePages_Surp : 0
Hugepagesize : 4096 kB
hugetlb_shm_group
을 사용하기위한 마지막 단계는 mysql
사용자에게 memlock 제한으로 "unlimited"값을 지정하는 것입니다. 이렇게하려면 /etc/security/limits.conf
을 편집하거나 mysqld_safe 스크립트에 다음 명령을 추가합니다.
ulimit -l unlimited
ulimit 명령을 mysqld_safe에 추가하면 mysql
사용자로 전환하기 전에 root
사용자 memlock 제한이 unlimited
로 설정됩니다. (이것은 mysqld_safe가 root
에 의해 시작 된 것으로 가정합니다.)
MySQL의 대형 페이지 지원은 기본적으로 비활성화되어 있습니다. 그것을 사용하려면 서버를 --large-pages
옵션에서 시작합니다. 예를 들어, 서버의 my.cnf
파일에 다음 줄을 사용할 수 있습니다.
[mysqld] large-pages
이 옵션을 사용하면 InnoDB
는 버퍼 풀 및 추가 메모리 풀에 자동으로 대형 페이지를 사용합니다. InnoDB
가이를 실행할 수없는 경우 기존의 메모리 사용에 돌아가서 오류 로그에 경고를 기록합니다 : Warning : Using conventional memory pool
대형 페이지를 사용하고 있는지 확인하려면 다시 /proc/meminfo
를 확인합니다.
shell> cat /proc/meminfo | grep -i huge
HugePages_Total : 20
HugePages_Free : 20
HugePages_Rsvd : 2
HugePages_Surp : 0
Hugepagesize : 4096 kB