VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

大页内存

操作系统页表所需空间会随着运行环境总内存的增加而增加。在数百GB级别的内存环境中,使用4K的内存页将导致数据库进程页表空间变大,同时TLB miss的概率增加,这将拖慢数据库的查询速度,并且浪费主存空间。为避免大内存运行环境下系统内存页过小导致性能下降,Vastbase引入大页内存功能。当配置文件的enable_huge_pages设置为on时Vastbase数据库在启动时将从操作系统预分配的大页内存中创建共享内存。

用户可以根据运行环境决定是否开启大页内存。根据实践,数百GB级别内存的环境下,若系统内存页大小为4K,开启大页内存可以提高数据库性能。一般而言,数百GB级别的环境下,可以考虑使用大小为2MB的大页;若环境内存达到TB级别,可以选择更大的大页。

enable_huge_pages

参数说明:设置数据库共享内存是否使用大页内存分配。

该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。在主备场景中,该参数不会被同步到其他节点。

取值范围:布尔型

  • on:表示使用大页内存进行共享内存分配。
  • off:表示使用普通内存页进行共享内存分配。

默认值:off

启用大页内存需要提前在操作系统完成大页配置。具体配置方法详见下方示例。

huge_page_size

参数说明:大页内存使用的页面大小。该选项仅在enable_huge_pages设置为on时生效。

该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。在主备场景中,该参数不会被同步到其他节点。

取值范围:整型,0 ~ 1073741823,单位为8KB。也可按照xxkB、xxMB、xxGB的方式设置。

默认值: 0,代表使用操作系统默认的大页大小。操作系统默认值可以通过/proc/meminfo中的Hugepagesize项查看。

  • 此参数的值必须是当前环境操作系统下可选的大页大小。具体的大页可选值可以通过/sys/kernel/mm/hugepages/目录查看。若enable_huge_pages设置为on时,填入的大页大小在当前环境下不支持,数据库将无法启动。

  • 不同操作系统提供不同大小的大页,具体选择需参考运行环境总内存大小,以及当前环境下内存负载情况。一般而言,对于数百GB级别的内存环境,可以选择2MB的大页。对于TB级别的内存环境,则可选择更大的大页。

示例

1、查看系统默认大页大小。

cat /proc/meminfo | grep Hugepagesize

2、查看系统支持大页大小。

ls /sys/kernel/mm/hugepages

3、设置大页数量。

设置大页数量前,用户需要知道当前配置下数据库的共享内存共需多少个页面。以使用2MB大页为例。当配置文件中enable_huge_pages设置为on时,数据库启动将打印如下日志:

LOG:  Allocate shared memory as huge pages. Huge page size: 2048 KB, required pages count: 1670

此日志提示用户在当前配置下,数据库的共享内存将需要1670个2MB大页。此时,更改/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages文件的值。

设置大页时操作系统需寻找指定数量的空载内存。以本示例为例,操作系统将寻找1670个大小为2M的空载内存进行大页内存的分配。若无法找到指定数量的空载内存,操作系统将设置当前可分配的最大数量。因此,设置大页内存后请检查文件,确保大页数量充足以保证数据库正常启动。

echo 1670 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

启动数据库后,可以通过/proc/meminfo查看系统当前大页的使用情况。

4、给与数据库进程用户使用大页内存权限。

查看数据库进程用户所属用户组id,给与用户使用大页内存权限。

id Vastbase
sysctl -w vm.hugetlb_shm_group=xxxx

5、设置配置文件postgresql.conf,将enable_huge_pages设置为on,开启大页功能。

6、重启数据库。