更新时间:2026-10-21 GMT+08:00
分享

内存

介绍与内存相关的参数设置。

这些参数只能在数据库服务重新启动后生效,local_syscache_threshold除外。

memorypool_enable

参数说明:设置是否允许使用内存池。

参数类型:布尔型

参数单位:无

取值范围:

  • on:表示允许使用内存池。
  • off:表示不允许使用内存池。

默认值:off

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

memorypool_size

参数说明:设置内存池大小。

参数类型:整型

参数单位:kB

取值范围:131072 ~ 1073741823

默认值:524288(即512MB)

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值131072,表示memorypool_size为131072kB;带单位取值128MB,表示memorypool_size为128MB。取值如果要带单位,必须为kB、MB、GB。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

enable_memory_limit

参数说明:设置是否启用逻辑内存管理模块。

由于存在固定开销,即shared_buffers和元数据(大约200MB),若max_process_memory减去固定开销小于2GB,GaussDB会强制把enable_memory_limit设置为off。其中元数据是GaussDB内部使用的内存,和部分并发参数,如max_connections、thread_pool_attr、max_prepared_transactions等参数相关。

参数类型:布尔型

参数单位:无

取值范围:

  • on:表示启用逻辑内存管理模块。
  • off:表示不启用逻辑内存管理模块。

默认值:on

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:当该值为off时,不对数据库使用的内存做限制,在大并发或者复杂查询时,使用内存过多,可能导致操作系统OOM问题。

enable_threads_memory_reserve

参数说明:设置是否启用后台线程内存隔离模块。开启后为后台线程按照后台线程优先级预留内存资源。当开启逻辑内存管理模块(即enable_memory_limit为on)时,设置该参数为on才能启动生效。

参数类型:布尔型

参数单位:无

取值范围:

  • on:表示启用后台线程内存隔离模块。
  • off:表示不启用后台线程内存隔离模块。

默认值:on

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。开启之后不同优先级后台线程预留内存和内存使用上限如下。

内存情况

高优先级

中优先级

低优先级

预留内存情况1(最大可用动态内存 < 10G)

最大可用动态内存/10

最大可用动态内存/10

最大可用动态内存/20

预留内存情况1(最大可用动态内存 < 20G)

0.75GB

1.5GB

0.75GB

预留内存情况1(最大可用动态内存 < 40G)

0.9GB

3.0GB

1.5GB

预留内存情况1(最大可用动态内存 >= 40G)

1.0GB

4.0GB

2.0GB

内存使用上限

无

最大可用动态内存 * 30%

等于预留内存

设置不当的风险与影响:当该参数设置为off时,后台线程内存使用数据会被持续统计,但不对后台线程使用的内存做隔离,在大并发或者复杂查询时,使用内存过多,可能导致后台线程申请不到内存。

max_process_memory

参数说明:设置一个数据库节点可用的最大物理内存。

参数类型:整型

参数单位:kB

取值范围:2097152 ~ 2147483647

默认值:请参见“典型场景设置”。

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值2097152,表示max_process_memory为2097152kB;带单位取值2GB,表示max_process_memory为2GB。取值如果要带单位,必须为kB、MB、GB。

设置建议:该参数目的是尽可能保证系统的可靠性,不会因数据库内存膨胀导致节点OOM。DN上该数值需要根据系统物理内存及单节点部署主DN个数决定,建议计算公式如下:(物理内存大小 – vm.min_free_kbytes)* 0.7 / (n+主DN个数)。这个公式中提到vm.min_free_kbytes,其含义是预留操作系统内存供内核使用,通常用作操作系统内核中通信收发内存分配,至少为5%内存,即max_process_memory = 物理内存 * 0.665 / (n+主DN个数)。其中,当集群规模小于256时,n=1;当集群规模大于256且小于512时,n=2;当集群规模超过512时,n=3;独立部署时,n=0。CN上该数值内存可设置与DN数值一样。

设置不当的风险与影响:若该值设置不合理,比如大于服务器物理内存时,可能导致操作系统OOM问题。

典型场景设置:

以下典型场景设置是针对主推的规格经过专门的测试调优之后,给出的最优出口值配置,具体配置信息如表1、表2、表3、表4所示。

  • 分布式独立部署(单节点1C或1D)
    表1 分布式独立部署设置

    资源配置

    CN推荐值

    DN推荐值

    128C/1024G

    900GB

    900GB

    60C/480G

    360GB

    360GB

    32C/256G

    192GB

    192GB

    16C/128G

    96GB

    96GB

    8C/64G

    40GB

    40GB

    4C/32G

    20GB

    20GB

    4C/16G

    10GB

    10GB

  • 金融版(标准型)(单节点1C2D)
    表2 金融版(标准型)设置

    资源配置

    CN推荐值

    DN推荐值

    192C/1536G

    300GB

    550GB

    128C/1024G

    200GB

    350GB

    104C/1024G

    200GB

    350GB

    96C/1024G

    200GB

    350GB

    96C/768G

    160GB

    260GB

    80C/640G

    130GB

    220GB

    72C/576G

    120GB

    200GB

    64C/512G

    100GB

    180GB

    60C/480G

    100GB

    160GB

    32C/256G

    50GB

    80GB

    16C/128G

    20GB

    40GB

    8C/64G

    10GB

    20GB

  • 企业版(单节点1C3D)
    表3 企业版设置

    资源配置

    CN推荐值

    DN推荐值

    192C/1536G

    200GB

    400GB

    128C/1024G

    150GB

    250GB

    104C/1024G

    150GB

    250GB

    96C/1024G

    150GB

    250GB

    96C/768G

    110GB

    190GB

    80C/640G

    90GB

    160GB

    80C/512G

    75GB

    125GB

    72C/576G

    80GB

    140GB

    64C/512G

    75GB

    125GB

    60C/480G

    70GB

    120GB

    32C/256G

    35GB

    60GB

    16C/128G

    15GB

    25GB

    8C/64G

    9GB

    15GB

  • 金融版(数据计算型)(单节点1C4D)
    表4 金融版(数据计算型)设置

    资源配置

    CN推荐值

    DN推荐值

    192C/1536G

    160GB

    300GB

    128C/1024G

    120GB

    200GB

    96C/768G

    100GB

    150GB

    72C/576G

    60GB

    110GB

    64C/512G

    60GB

    100GB

    32C/256G

    20GB

    40GB

local_syscache_threshold

参数说明:单个session的系统缓存占用内存的最大值,当实际系统缓存大小超过该阈值时,会触发内存淘汰。如果参数enable_global_syscache和enable_thread_pool已打开,则该参数描述的是当前线程和绑定到当前线程上的session缓存的总大小。

参数类型:整型

参数单位:kB

取值范围:1024 ~ 524288

默认值:

  • 独立部署:16MB

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值1024,表示local_syscache_threshold为1024kB;带单位取值1MB,表示local_syscache_threshold为1MB。取值如果要带单位,必须为kB、MB、GB。

设置建议:建议设置为1024的整数倍。底噪内存是2MB,平均每增加一个表或者索引,增加11kB内存。

设置不当的风险与影响:如果设置的值过小,会导致内存频繁淘汰,影响性能。

enable_memory_context_control

参数说明:设置是否启用检查内存上下文是否超过给定限制的功能。仅适用于DEBUG版本。

参数类型:布尔型

参数单位:无

取值范围:

  • on:表示启用最大内存上下文限制检查功能。
  • off:表示关闭最大内存上下文限制检查功能。

默认值:off

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

uncontrolled_memory_context

参数说明:启用检查内存上下文是否超过给定限制的功能时,设置不受此功能约束的内存上下文。仅适用于DEBUG版本。

查询该参数时,会在参数值的最前面添加标题含义字符串“MmgrMemoryController white list:”。

参数类型:字符串

参数单位:无

取值范围:字符串

默认值:""

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

huge_pages

参数说明:数据库共享内存的申请启用静态内存大页设置。

要启用静态内存大页功能,需要提前在操作系统内核中设置足够数量的静态内存大页资源以供申请,相关参数为vm.nr_hugepages和vm.nr_overcommit_hugepages,会被设置在/etc/sysctl.conf文件中。

参数类型:字符串

参数单位:无

取值范围:

  • on:表示启用静态大页内存申请,如果申请不到内存大页资源,则数据库启动失败。
  • off:表示不启用静态大页内存申请,申请普通共享内存。
  • try:尝试申请内存静态大页资源,如果申请失败,就申请普通共享内存。

默认值:try

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

shared_buffers

参数说明:设置GaussDB使用的共享内存大小。增加此参数的值会使GaussDB比系统默认设置需要更多的System V共享内存。

参数类型:整型

参数单位:页(8kB)

取值范围:16 ~ 1073741823

默认值:请参见“典型场景设置”。

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值1024,表示shared_buffers为1024*8kB,即8192kB;带单位取值8MB,表示shared_buffers为8MB。取值如果要带单位,必须为kB、MB、GB,且取值必须为8kB的整数倍。

设置建议:

  • 由于GaussDB大部分查询下推,建议DN中此参数设置比CN大。
  • 建议设置shared_buffers值为max_process_memory的40%以内。
  • 如果设置较大的shared_buffers,需要同时增加checkpoint_segments的值,因为写入大量新增数据、修改数据需要消耗更多的时间周期。
  • 如果调整shared_buffers参数之后,导致进程重启失败,请参见启动失败的报错信息,采用以下解决方案之一:

设置不当的风险与影响:如果设置的内存参数数值过大,超过物理内存上限,将会出现数据库由于无法申请到足够的内存而无法成功启动的情况。

典型场景设置:

以下典型场景设置是针对主推的规格经过专门的测试调优之后,给出的最优出口值配置,具体配置信息如表5、表6、表7、表8所示。

  • 分布式独立部署(单节点1C或1D)
    表5 分布式独立部署设置

    资源配置

    CN推荐值

    DN推荐值

    CN取值范围

    DN取值范围

    128C/1024G

    8GB

    304GB

    256MB ~ 409.6GB

    2GB ~ 409.6GB

    60C/480G

    4GB

    140GB

    256MB ~ 192GB

    2GB ~ 192GB

    32C/256G

    2GB

    76GB

    256MB ~ 102.4GB

    2GB ~ 102.4GB

    16C/128G

    2GB

    40GB

    256MB ~ 51.2GB

    2GB ~ 51.2GB

    8C/64G

    1GB

    16GB

    256MB ~ 25.6GB

    2GB ~ 25.6GB

    4C/32G

    512MB

    8GB

    256MB ~ 12.8GB

    2GB ~ 12.8GB

    4C/16G

    256MB

    4GB

    256MB ~ 6.4GB

    2GB ~ 6.4GB

  • 金融版(标准型)(单节点1C2D)
    表6 金融版(标准型)设置

    资源配置

    CN推荐值

    DN推荐值

    192C/1536G

    2GB

    220GB

    128C/1024G

    2GB

    140GB

    104C/1024G

    2GB

    140GB

    96C/1024G

    2GB

    140GB

    96C/768G

    2GB

    100GB

    80C/640G

    2GB

    80GB

    72C/576G

    2GB

    80GB

    64C/512G

    2GB

    70GB

    60C/480G

    2GB

    60GB

    32C/256G

    1GB

    30GB

    16C/128G

    1GB

    16GB

    8C/64G

    512MB

    8GB

  • 企业版(单节点1C3D)
    表7 企业版设置

    资源配置

    CN推荐值

    DN推荐值

    192C/1536G

    2GB

    160GB

    128C/1024G

    2GB

    100GB

    104C/1024G

    2GB

    100GB

    96C/1024G

    2GB

    100GB

    96C/768G

    2GB

    76GB

    80C/640G

    2GB

    64GB

    80C/512G

    2GB

    50GB

    72C/576G

    2GB

    56GB

    64C/512G

    2GB

    50GB

    60C/480G

    2GB

    48GB

    32C/256G

    1GB

    24GB

    16C/128G

    1GB

    10GB

    8C/64G

    512MB

    6GB

  • 金融版(数据计算型)(单节点1C4D)
    表8 金融版(数据计算型)设置

    资源配置

    CN推荐值

    DN推荐值

    192C/1536G

    2GB

    120GB

    128C/1024G

    2GB

    80GB

    96C/768G

    2GB

    50GB

    72C/576G

    1GB

    40GB

    64C/512G

    1GB

    30GB

    32C/256G

    512MB

    10GB

enable_scale_cache

参数说明:ScaleCache通过提高缓冲区页面pin和unpin的本地性和SIMD加速哈希检索,以及copy on write的无锁索引扫描技术来实现缓冲区管理的优化,进而提升整体缓冲区的性能。该参数仅支持在ARM 8及以上平台环境设置。

参数类型:布尔型

参数单位:无

取值范围:

  • on:表示开启ScaleCache缓冲区管理模式。
  • off:表示关闭ScaleCache缓冲区管理模式。

默认值:off

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

pin_buffer_group_cores

参数说明:ScaleCache功能,在pin和unpin优化时会对CPU核进行分组,该参数表示分组时每组CPU的核数。当enable_scale_cache参数为on时,该参数才允许被设置和修改。该参数仅支持在ARM 8及以上平台环境设置。

参数类型:整型

参数单位:个

取值范围:1 ~ 1073741823

默认值:4

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用2的幂次方,如果CPU核数或者设置的值非2的幂次方,那么该参数就会被设置为1。

设置不当的风险与影响:修改前请确认enable_scale_cache参数已开启。请在充分理解参数含义,并经过测试验证后进行修改。

enable_shared_storage_aio

参数说明:该功能用来控制打开或关闭Dorado共享存储模式并行异步写日志优化功能。

参数类型:布尔型

参数单位:无

取值范围:

  • on:表示开启Dorado共享存储异步写功能。
  • off:表示关闭Dorado共享内存异步写功能。

默认值:off

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

page_version_check

参数说明:基于页面版本信息,进行底层存储故障校验和页面漏置脏校验的功能总开关,page_version_check是一个三级开关。其中,底层存储故障校验功能是检测从底层存储读取的页面是否为正确版本,防止磁盘掉电等故障情况导致的页面版本信息丢失;页面漏置脏校验功能是检测被修改页面是否忘记置脏,它有一个单独开关page_missing_dirty_check进行控制。

参数类型:枚举类型

参数单位:无

取值范围:

  • off:表示完全关闭底层存储故障校验和页面漏置脏校验的功能开关。
  • memory:表示打开纯内存态的页面版本校验功能(即底层存储故障校验和页面漏置脏校验),页面版本信息只缓存在内存当中,重启丢失。
  • persistence:表示打开持久态的页面版本校验功能(即底层存储故障校验和页面漏置脏校验),页面版本信息会持久化到文件中,重启不丢失。

默认值:persistence(192核CPU/1536GB内存,128核CPU/1024GB内存,104核CPU/1024GB内存,96核CPU/1024GB内存,96核CPU/768GB内存,80核CPU/640GB内存,80核CPU/512GB内存,72核CPU/576GB内存,64核CPU/512GB内存,60核CPU/480GB内存,32核CPU/256GB内存,16核CPU/128GB内存);off(8核CPU/64GB内存,4核CPU/16GB内存,4核CPU/32GB内存)

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:根据不同机器规格,建议如下设置:persistence(192核CPU/1536GB内存,128核CPU/1024GB内存,104核CPU/1024GB内存,96核CPU/1024GB内存,96核CPU/768GB内存,80核CPU/640GB内存,80核CPU/512GB内存,72核CPU/576GB内存,64核CPU/512GB内存,60核CPU/480GB内存,32核CPU/256GB内存,16核CPU/128GB内存);off(8核CPU/64GB内存,4核CPU/16GB内存,4核CPU/32GB内存)。

设置不当的风险与影响:开关设置为memory及persistence时,对性能有一定影响,机器规格越小,影响越大(参考:16核CPU/128GB内存,TPCC模型影响7%左右)。在系统需要频繁重启的场景下,建议设置为persistence,能够确保页面版本信息不丢失,但会进一步影响性能。

page_version_full_validation

参数说明:在AntiCache持久态下,页面版本在buffer刷脏时即插入AntiCache,这相比在buffer淘汰时才插入的内存态更为频繁,容易因占满AntiCache内存而导致漏校验。为降低漏校验概率、实现100%校验覆盖,需优化持久态的插入方式与Vlog文件回收机制。page_version_full_validation控制是否开启AntiCache全校验模式。开启此参数后,在插入AntiCache时若内存已满,系统将先对一个已有页面执行原地校验以释放空间,再插入新版本。

参数类型:布尔型

参数单位:无

取值范围:

  • on:表示开启AntiCache全校验模式。
  • off:表示关闭AntiCache全校验模式。

默认值:on

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

page_missing_dirty_check

参数说明:页面漏置脏校验的功能开关,检测被修改页面是否忘记置脏。page_missing_dirty_check受控于page_version_check,如果page_version_check设置为off,则page_missing_dirty_check设置为on时也不生效。

参数类型:布尔型

参数单位:无

取值范围:

  • on:表示进行页面漏置脏校验。
  • off:表示不进行页面漏置脏校验。

默认值:off

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:建议在测试场景中开启此开关,能够最大限度在非生产环境中排查出漏置脏代码BUG;在现网时默认关闭页面漏置脏,避免带来额外开销,进而影响性能。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

page_version_max_num

参数说明:内存中所能缓存的页面版本信息的最大数量,在page_version_check取值不为OFF的情况下生效。每个page_version内存占用36字节,请注意内存使用量。

参数类型:整型

参数单位:个

取值范围:0 ~ 2147483647

  • 0:根据shared_buffers大小自动计算,page_version_max_num=shared_buffers*2。例如,32M shared_buffers对应4096个buffer,所以页面版本信息数量设置为8192个。
  • 非0:将强制使用手动配置的数值。不允许小于page_version_partitions的16倍,如果小于,则会被强制设置为page_version_partitions*16。

默认值:0

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:内存有限的情况下,合理的数量应该是shared_buffers数量的2倍到4倍。对性能有较高要求且内存足够的情况下,建议手动设置为shared_buffers数量的4倍以上,且与page_version_partitions的比值范围为[256, 1024]。

设置不当的风险与影响:如果设置的内存参数数值过大,超过物理内存上限,将会出现数据库由于无法申请到足够的内存而无法成功启动的情况。

page_version_partitions

参数说明:内存中缓存页面版本信息的哈希表分区数量,分区数量直接影响哈希查询效率和哈希冲突概率。只在page_version_check取值不为OFF的情况下生效。

参数类型:整型

参数单位:个

取值范围:0 ~ 2097152

  • 0:根据page_version_max_num自动计算,page_version_partitions=page_version_max_num/512。若自动计算结果小于4,则强制设置为4。
  • 非0:将强制使用手动配置的数值。最小值为4。如果取值小于4,则会被强制设置为4。

默认值:0

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:对性能有较高要求的情况下,建议手动设置为page_version_max_num的256分之一到1024分之一左右。

设置不当的风险与影响:如果设置的分区数量太大,会降低哈希查询效率;设置的分区数量太小,会增加哈希冲突的概率。

page_version_recycler_thread_num

参数说明:控制回收和校验页面版本信息的线程数量,只在page_version_check取值不为OFF的情况下生效。

参数类型:整型

参数单位:个

取值范围:0 ~ 16

  • page_version_check参数值为memory时:
    • 0:根据page_version_partitions自动计算,page_version_recycler_thread_num=page_version_partitions/16384。若自动计算结果大于4,则强制设置为4。
    • 非0:将强制使用手动配置的数值。
    • 不允许大于page_version_partitions,如果大于,则会被强制设置为page_version_partitions的值。
  • page_version_check参数值为persistence时:

    小于2时将设置为2,大于等于2时强制使用手动配置的参数。

默认值:0

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

enable_cached_context

参数说明:控制缓存内存上下文的个数,在为0时内存上下文优化框架不生效。

参数类型:整型

参数单位:个

取值范围:0 ~ 1024

  • 设置为0时内存上下文优化框架不生效。
  • 设置为非0值时,内存上下文优化框架生效,设置的值为缓存内存上下文的个数。

默认值:128

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

verify_log_buffers

参数说明:控制verifyLog buffer大小,只在page_version_check取值为persistence的情况下生效。verifyLog buffer内存按页面管理,每页8kB。

参数类型:整型

参数单位:页(8kB)

取值范围:4 ~ 262144

默认值:1GB(192核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,80核CPU/512G内存,72核CPU/576G内存,64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存);512MB(16核CPU/128G内存);256MB(8核CPU/64G内存);128MB(4核CPU/32G内存);16MB(4核CPU/16G内存)

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。例如,取值131072表示verify_log_buffers为131072 * 8 kB = 1GB;取值131072kB表示verify_log_buffers为131072kB。取值如果带单位,必须为kB、MB、GB,且必须为8kB整数倍。

设置建议:根据系统硬件规格,进行相应的设置。

1GB(192核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,80核CPU/512G内存,72核CPU/576G内存,64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存);512MB(16核CPU/128G内存);256MB(8核CPU/64G内存);128MB(4核CPU/32G内存);16MB(4核CPU/16G内存)。

设置不当的风险与影响:如果设置的内存参数数值过大,超过物理内存上限,将会出现数据库由于无法申请到足够的内存而无法成功启动的情况。

segment_buffers

参数说明:设置GaussDB段页式元数据页的内存大小。

参数类型:整型

参数单位:页(8kB)

取值范围:16 ~ 1073741823

默认值:1024(即8MB)

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值1024,表示segment_buffers为1024*8kB,即8192kB;带单位取值8MB,表示segment_buffers为8MB。取值如果要带单位,必须为kB、MB、GB,且取值必须为8kB的整数倍。

设置建议:segment_buffers用来缓存段页式段头的内容,属于关键元数据信息,为了提高性能建议常用的表的段头都能缓存在buffer中,不被置换出去。建议按照表的个数(包括索引和toast表)* 分区数 * 3 + 128 来设置。乘以3是因为每个表(分区)会有一些额外的元数据段,一般一个表有3个段。最后加上128因为段页式表空间管理需要一定数量的buffer。该参数设置过小会导致首次创建段页式表时耗时较久,因此请按照默认值进行设置,不建议修改,避免设置明显不合理(过大或过小)的segment_buffers值。注意应满足条件:data_replicate_buffer_size + segment_buffers + shared_buffers + wal_buffers + temp_buffers + maintenance_work_mem + work_mem + query_mem + (备机)wal_receiver_buffer_size < max_process_memory < 物理机内存大小。

设置不当的风险与影响:如果设置的内存参数数值过大,超过物理内存上限,将会出现数据库由于无法申请到足够的内存而无法成功启动的情况。

bulk_read_ring_size

参数说明:数据并行导出使用的环形缓冲区的大小。

参数类型:整型

参数单位:kB

取值范围:256 ~ 2147483647

默认值:16384(即16MB)

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值1024,表示bulk_read_ring_size为1024kB;带单位取值1MB,表示bulk_read_ring_size为1MB。取值如果要带单位,必须为kB、MB、GB。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

bulk_write_ring_size

参数说明:数据并行导入使用的环形缓冲区的大小。

参数类型:整型

参数单位:kB

取值范围:16384 ~ 2147483647

默认值:2097152(即2GB)

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值16384,表示bulk_write_ring_size为16384kB;带单位取值16MB,表示bulk_write_ring_size为16MB。取值如果要带单位,必须为kB、MB、GB。

设置建议:建议导入压力大的场景中增加DN中此参数取值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

standby_shared_buffers_fraction

参数说明:备实例所在服务器使用shared_buffers内存缓冲区大小的比例。

参数类型:浮点型

参数单位:无

取值范围:0.1 ~ 1.0

默认值:1

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

temp_buffers

参数说明:设置每个数据库会话使用的LOCAL临时缓冲区的大小。

  • 在每个会话第一次使用临时表之前可以改变temp_buffers的值,之后的设置将是无效的。
  • 一个会话将按照temp_buffers给出的限制,根据需要分配临时缓冲区。如果在一个并不需要大量临时缓冲区的会话里设置一个大的数值,其开销只是一个缓冲区描述符的大小。当缓冲区被使用,就会额外消耗8192字节。

参数类型:整型

参数单位:页(8kB)

取值范围:100 ~ 1073741823

默认值:128(即1MB)

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值100,表示temp_buffers为100*8kB,即800kB;带单位取值16MB,表示temp_buffers为16MB。取值如果要带单位,必须为kB、MB、GB,且取值必须为8kB的整数倍。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

max_prepared_transactions

参数说明:设置可以同时处于“预备”状态的事务的最大数目。增加此参数的值会使GaussDB比系统默认设置需要更多的System V共享内存。

参数类型:整型

参数单位:无

取值范围:0 ~ 262143

默认值:

  • 独立部署:

    2400(128核CPU/1024G内存);1200(60核CPU/480G内存,32核CPU/256G内存);800(16核CPU/128G内存);400(8核CPU/64G内存);300(4核CPU/32G内存);200(4核CPU/16G内存)

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值,当两阶段事务报错槽位不足时,才需要调整。为避免在准备步骤失败,线程池模式下此参数的值应大于thread_pool_attr中工作线程个数,非线程池模式下此参数的值不能小于max_connections。

设置不当的风险与影响:当GaussDB部署为主备双机时,在备机上此参数的设置必须要高于或等于主机上的,否则无法在备机上进行查询操作。

work_mem

参数说明:设置内部排序操作和Hash表在开始写入临时磁盘文件之前使用的内存大小。ORDER BY,DISTINCT和MERGE JOINS都要用到排序操作。Hash表在散列连接、散列为基础的聚集、散列为基础的IN子查询处理中都要用到。

对于复杂的查询,可能会同时并发运行好几个排序或者散列操作,每个都可以使用此参数所声明的内存量,不足时会使用临时文件。同样的,多个正在运行的会话可能会同时进行排序操作。因此使用的总内存可能是work_mem的好几倍。

参数类型:整型

参数单位:kB

取值范围:64 ~ 2147483647

默认值:

  • 独立部署:

    256MB(128核CPU/1024G内存);128MB(60核CPU/480G内存,32核CPU/256G内存,16核CPU/128G内存);64MB(8核CPU/64G内存);32MB(4核CPU/32G内存);16MB(4核CPU/16G内存)

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值1024,表示work_mem为1024kB;带单位取值1MB,表示work_mem为1MB。取值如果要带单位,必须为kB、MB、GB。

设置建议:

依据查询特点和并发来确定,一旦work_mem限定的物理内存不够,算子运算数据将写入临时表空间,带来5-10倍的性能下降,查询响应时间从秒级下降到分钟级。

  • 对于串行无并发的复杂查询场景,平均每个查询有5-10关联操作,建议work_mem=50%内存/10。
  • 对于串行无并发的简单查询场景,平均每个查询有2-5个关联操作,建议work_mem=50%内存/5。
  • 对于并发场景,建议work_mem=串行下的work_mem/物理并发数。
  • 对于BitmapScan的哈希表也会受到work_mem的限制,但不会被严格管控下盘。完全Lossify的情况下,哈希表每占用1MB的内存,对应一次BitmapHeapScan的16GB的页面,达到work_mem上限后,会按此比例随数据访问量线性增长。

设置不当的风险与影响:默认值即推荐值,不建议修改。修改必须详细确认参数的规格限制,并考虑硬件资源是否足够,否则可能导致集群异常。

query_mem

参数说明:设置执行作业所使用的内存。

参数类型:整型

参数单位:kB

取值范围:0 ~ 2147483647

  • 如果设置的query_mem值大于32768(即32MB),在生成执行计划时,优化器会将作业的估算内存调整为该值。
  • 如果设置值小于32768(即32MB),将强制设置为默认值0,此时优化器不会根据该值调整作业的估算内存。

默认值:0

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值32768,表示query_mem为32768kB;带单位取值32MB,表示query_mem为32MB。取值如果要带单位,必须为kB、MB、GB。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

query_max_mem

参数说明:设置执行作业所能够使用的最大内存。

参数类型:整型

参数单位:kB

取值范围:0 ~ 2147483647

  • 如果设置的query_max_mem值大于32768(即32MB),当作业执行时所使用内存超过该值时,将报错退出。
  • 如果设置值小于32768(即32M),将设置为默认值0,此时不会根据该值限制作业的内存使用。

默认值:0

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值32768,表示query_max_mem为32768kB;带单位取值32MB,表示query_max_mem为32MB。取值如果要带单位,必须为kB、MB、GB。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

maintenance_work_mem

参数说明:设置在维护性操作(比如VACUUM、CREATE INDEX等)中可使用的最大的内存。该参数的设置会影响VACUUM、VACUUM FULL、CLUSTER、CREATE INDEX的执行效率。

参数类型:整型

参数单位:kB

取值范围:1024 ~ 2147483647

默认值:

  • 独立部署:

    CN:2GB(128核CPU/1024G内存);1GB(60核CPU/480G内存);512MB(32核CPU/256G内存);256MB(16核CPU/128G内存);128MB(8核CPU/64G内存);64MB(4核CPU/32G内存);32MB(4核CPU/16G内存)

    DN:4GB(128核CPU/1024G内存);2GB(60核CPU/480G内存);1GB(32核CPU/256G内存);512MB(16核CPU/128G内存);256MB(8核CPU/64G内存);128MB(4核CPU/32G内存);64MB(4核CPU/16G内存)

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值1024,表示maintenance_work_mem为1024kB;带单位取值1MB,表示maintenance_work_mem为1MB。取值如果要带单位,必须为kB、MB、GB。

设置建议:

设置不当的风险与影响:默认值即推荐值,不建议修改。修改必须详细确认参数的规格限制,并考虑硬件资源是否足够,否则可能导致集群异常。

max_stack_depth

参数说明:设置GaussDB执行堆栈的最大安全深度。之所以需要这个安全界限,是因为在服务器里,并非所有程序都检查了堆栈深度,而是只在可能递归的过程,比如表达式计算之类的过程中才进行检查。

参数类型:整型

参数单位:kB

取值范围:100 ~ 2147483647

默认值:

  • 系统线程栈大小 - 640kB的值大于等于2MB时,此参数的默认值为2MB。
  • 系统线程栈大小 - 640kB的值小于2MB时,此参数的默认值为系统线程栈大小 - 640kB。
  • 系统线程栈大小可通过“ulimit -s”命令查看。
  • 修改系统线程栈大小后,需重启集群,数据库进程才会采用新的系统线程栈大小。数据库进程在启动时从父进程继承该限制,运行期间不会重新读取。

设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值1024,表示max_stack_depth为1024kB;带单位取值1MB,表示max_stack_depth为1MB。取值如果要带单位,必须为kB、MB、GB。

设置建议:

  • 数据库需要预留640kB堆栈深度,因此,此参数的最佳设置是等于系统线程栈大小 - 640kB。
  • 不支持设置该参数值大于系统线程栈大小 - 640kB,通过gs_guc工具设置该参数值大于系统线程栈大小 - 640kB时,会设置失败。
  • 因为并非所有的操作都能够被检测到,所以建议用户在此设置一个明确的值。
  • 默认值最大为2MB,这个值相对比较小,不容易导致系统崩溃。

设置不当的风险与影响:

  • 系统线程栈大小 - 640kB小于此参数取值范围的最小值时,会导致数据库启动失败。
  • 如果设置此参数的值大于实际的内核限制,则一个正在运行的递归函数可能会导致一个独立的服务器进程崩溃。

enable_early_free

参数说明:控制是否可以进行算子内存的提前释放。

参数类型:布尔型

参数单位:无

取值范围:

  • on:表示支持算子内存提前释放。
  • off:表示不支持算子内存提前释放。

默认值:on

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

memory_trace_level

参数说明:动态内存使用超过最大动态内存的指定百分比阈值(默认是90%,可在memory_log_config参数中更改)后,记录内存申请信息的管控等级。该参数仅在GUC参数use_workload_manager和enable_memory_limit打开时生效。

参数类型:枚举类型

参数单位:无

取值范围:

  • none:表示不记录内存申请信息。
  • level1:动态内存使用超过最大动态内存的指定百分比阈值后,会记录以下信息,并将记录的内存信息保存在$GAUSSLOG/mem_log目录下。
    • 全局内存概况。
    • instance,session,thread三种类型的所有内存上下文中内存占用前20的内存上下文的内存使用情况。
    • 每个内存上下文的totalsize、freesize字段。
  • level2:动态内存使用超过最大动态内存的指定百分比阈值后,会记录以下信息,并将记录的内存信息保存在$GAUSSLOG/mem_log目录下。
    • 全局内存概况。
    • instance,session,thread三种类型的所有内存上下文中内存占用前20的内存上下文的内存使用情况。
    • 每个内存上下文的totalsize,freesize字段。
    • 每个内存上下文上所有内存申请的详细信息,包含申请内存所在的文件,行号和大小。

默认值:level1

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:该参数设置为level2后,会记录每个内存上下文的内存申请详情(file,line,size字段),会对性能影响较大,需慎重设置。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

  • 记录的内存快照信息可以通过系统函数gs_get_history_memory_detail(cstring)查询,函数详情请参见gs_get_history_memory_detail(cstring)。
  • use_workload_manager参数关闭的情况下,如果打开bypass_workload_manager,则该参数也会生效,但是因为bypass_workload_manager是SIGHUP类型,使用reload方式设置后需要重启数据库才会使得当前功能生效。
  • 记录的内存上下文是经过将同一类型所有重名的内存上下文进行汇总之后得到的。

memory_log_config

参数说明:在动态内存使用百分比超过阈值,或动态内存波动百分比超过阈值,或达到统计周期时,记录每个类型的top n个内存上下文内存信息、内存使用top n个SQL语句的内存信息,并生成内存日志。该参数仅在GUC参数use_workload_manager和enable_memory_limit打开、memory_trace_level非none时生效。

参数类型:字符串

参数单位:无

取值范围:

该参数分为5个部分:'memory_log_threshold, memory_rush_percent, memory_log_period, topn_memory_contexts, topn_queries',这5个部分的具体含义如下:

  • memory_log_threshold:动态内存使用量百分比阈值,取值范围为[0,100](含0含100)内的整数,取值为0表示关闭此场景触发功能,单位:%。
  • memory_rush_percent:动态内存波动百分比阈值,取值范围为[0,100]内的整数,取值为0表示关闭此场景触发功能,单位:%。
  • memory_log_period:统计周期,取值范围为[0,INT_MAX)(含0不含INT_MAX;INT_MAX为数据类型INT的最大值2147483647,下同)的整数,取值为0表示关闭此场景触发功能,单位:分钟。
  • topn_memory_contexts:每个类型的内存上下文记录前topn_memory_contexts个内存上下文的信息,取值范围为[0,INT_MAX)(含0不含INT_MAX)的整数,取值为0表示关闭此场景触发功能。
  • topn_queries:记录内存使用前topn_queries个SQL语句的内存信息,取值范围为[0,INT_MAX)的整数,取值为0表示关闭此场景触发功能。

默认值:'90,0,0,20,10',这表示内存使用量百分比阈值为90%,关闭内存波动百分比场景触发功能,关闭达到统计周期场景触发功能,每个类型的内存上下文记录top 20个,SQL语句记录top 10个。

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:根据参数含义合理设置。

设置不当的风险与影响:参数的每个部分需要用英文逗号”,”分隔,因此参数中必须仅有4个英文逗号,将参数分为5个部分,每个部分需要按照上述取值范围中各部分的要求填写,任何不符合要求的情况都会导致此次设置操作失败,所有参数部分均无法生效。请在充分理解参数含义,并经过测试验证后进行修改。

resilience_memory_reject_percent

参数说明:用于控制内存过载逃生功能的动态内存占用百分比。该参数仅在GUC参数use_workload_manager和enable_memory_limit打开时生效。

参数类型:字符串

参数单位:无

取值范围:长度大于0的字符串。

该参数分为recover_memory_percent、overload_memory_percent两部分,这2个部分的具体含义如下:

  • recover_memory_percent:内存从过载状态恢复到正常状态的动态内存使用占最大动态内存的百分比,当动态内存使用小于最大动态内存乘以该值对应的百分比后,停止过载逃生并放开新连接接入,取值为0 ~ 100,设置为多少表示百分之多少。
  • overload_memory_percent:内存过载时动态内存使用占最大动态内存的百分比,当动态内存使用大于最大动态内存乘以该值对应的百分比后,表示当前内存已经过载,触发过载逃生kill会话并禁止新连接接入,取值为0 ~ 100,设置为多少表示百分之多少。

默认值:"0,0",表示关闭内存过载逃生功能。

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

例如,如下命令表示内存使用超过最大内存上限的90%后禁止新连接接入并kill堆积的会话,kill会话过程中内存恢复到最大内存的70%以下时停止kill会话并允许新连接接入。

kill策略为:优先kill空闲会话;按照会话占用的内存从大到小进行排序,依次kill正在执行的会话。

gs_guc reload -Z coordinator -Z datanode -N all -I all -c "resilience_memory_reject_percent='70,90'"

设置建议:建议根据实际业务需要进行调整。

设置不当的风险与影响:如果该参数设置的百分比过小,则会频繁触发内存过载逃生流程,会使正在执行的会话被强制退出,新连接短时间接入失败,需要根据实际内存使用情况慎重设置。

  • 最大动态内存和已使用的动态内存可以通过pv_total_memory_detail视图查询获得,最大动态内存:max_dynamic_memory,已使用的动态内存:dynamic_used_memory。
  • use_workload_manager参数关闭的情况下,如果打开bypass_workload_manager,则该参数也会生效,但是因为bypass_workload_manager是SIGHUP类型,reload方式设置后需要重启数据库才会使得当前功能生效。
  • recover_memory_percent和overload_memory_percent的值可以同时为0,除此之外,recover_memory_percent的值必须要小于overload_memory_percent,否则设置不会生效。
  • 将参数从其它值动态设为"0,0"后,若此时已启动会话查杀,不会终止查杀动作,可等待10s以上再连接数据库防止新连接被查杀。

resilience_escape_user_permissions

参数说明:设置用户权限,以逗号分隔,可以设置多个,设置多个则表示多个特殊权限的用户都支持逃生能力,只设置一个则只针对一个特权用户进行逃生。sysadmin控制sysadmin用户的作业是否会被该逃生功能进行cancel处理;monadmin控制monadmin用户的作业是否会被该逃生功能进行cancel处理;默认为空,表示关闭sysadmin和monadmin用户的逃生能力。当前取值仅支持sysadmin,monadmin或者空字符串。

参数类型:字符串

参数单位:无

取值范围:长度大于0的字符串。

该参数目前只支持三个取值:sysadmin,monadmin或"",这几个值的具体含义如下:
  • sysadmin:控制sysadmin用户的作业是否会被该逃生功能进行cancel处理。
  • monadmin:控制monadmin用户的作业是否会被该逃生功能进行cancel处理。
  • "":关闭sysadmin和monadmin用户的逃生能力。

默认值:"",表示关闭sysadmin和monadmin用户的逃生能力。

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。该参数可以同时设置多个值,以逗号分隔,例如resilience_escape_user_permissions = 'sysadmin,monadmin',也可以只设置一个值,例如resilience_escape_user_permissions = 'monadmin'。

例如,如下命令表示同时开启sysadmin和monadmin用户的逃生功能。

gs_guc reload -Z coordinator -Z datanode -N all -I all -c "resilience_escape_user_permissions='sysadmin,monadmin'"

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

  • 若该参数多次设置,以最新的设置生效。
  • 该参数设置为取值范围中的任意值,普通用户都支持该逃生功能。
  • 当用户同时具有sysadmin和monadmin时,resilience_escape_user_permissions必须设置为"sysadmin,monadmin"才能触发该用户的逃生功能。

start_with_max_mem

参数说明:对于数据量较大的start with查询语句,可能会由于递归深度过大导致占用内存过大,该参数用于控制start with算子占用的最大内存大小。

参数类型:整型

参数单位:kB

取值范围:-1 ~ 2147483647

默认值:-1,表示start with算子占用内存无限制。

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值1024,表示start_with_max_mem为1024kB;带单位取值1MB,表示start_with_max_mem为1MB。取值如果要带单位,必须为kB、MB、GB。

设置建议:依据查询数据量来确定,默认-1,如果查询数据量较大,可能导致出现内存占用过大的问题。可按需调整该参数,避免单个查询占用内存过大,具体可参考work_mem设置。

设置不当的风险与影响:如果start_with_max_mem设置非默认值,或设置的值过小,会导致查询语句执行失败。

相关文档