暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB A 内存资源管理

墨天轮 2019-10-12
892

内存资源管理

背景信息

内存是GaussDB 200运行的一个关键资源,如果能够有效利用,可以提升业务查询性能。系统支持对内存资源的管理类型如表1所示。

表1 内存资源管理类型

内存管理方式

说明

实例级别的内存管理

通过设置系统级别的GUC参数“max_process_memory”,可以对数据库实例的最大可用物理内存进行管理。当作业申请的内存超过了给定限制时,会因为内存申请失败触发异常处理。

说明:

根据实例在执行业务时的不同分工,需要的内存大小也不同。以DN为例,可以参见max_process_memory给出的公式进行计算。

资源池级别的内存管理

通过设置资源池的参数“MEM_PERCENT”,可以对资源池的内存进行管理。

作业级别的内存管理

通过设置session级别的GUC参数“query_mem”,可以对作业可用内存进行管理。

前提条件

逻辑内存管理功能已开启,即enable_memory_limit已设置为“on”;已熟悉gs_guc和ALTER RESOURCE POOL的使用。

操作步骤

实例级别的内存管理

数据库管理员可以通过下列步骤实现数据库实例级的内存管理。

  • 使用gsql连接数据库。
  • 查看逻辑内存管理功能的启动状态。

    1
    SHOW enable_memory_limit;
    

    如果结果为on,则使用\q命令断开数据库执行4;否则断开数据库连接执行3。

  • 启用逻辑内存管理模块。

    gs_guc set -Z coordinator -Z datanode -N all -I all -c "enable_memory_limit=on"

    参数描述如下:

    • -N all:表示集群所有主机。
    • -I all:表示实例主机中所有的实例。
    • enable_memory_limit:为逻辑内存管理模块的开关。
    • coordinator/datanode:表示执行该配置的实例类型为CN/DN实例。

  • 设置数据库DN实例的最大可用内存。max_process_memory为实例的最大可用内存,datanode表示执行该配置的实例类型为DN实例。

    gs_guc set -Z datanode -N all -I all -c "max_process_memory=32GB"

  • 设置数据库CN实例的最大可用内存。根据经验,推荐将CN的最大可用内存设置为与DN一致,coordinator表示执行该配置的实例类型为CN实例。

    gs_guc set -Z coordinator -N all -I all -c "max_process_memory=32GB"

    如果设置的max_process_memory值太小,可能导致逻辑内存管理模块失效。可以在连接数据库后,通过2检查逻辑内存管理模块是否开启,如果enable_memory_limit被关闭,请执行3~5重新设置max_process_memory,然后执行2再次检查逻辑内存管理模块是否开启。

  • 重启集群。

    说明:

    重启集群操作会导致用户执行操作中断,请在操作之前规划好合适的执行窗口。

    gs_om -t stop && gs_om -t start

资源池级别的内存管理

修改资源池“resource_pool_a1”的内存比例为可用内存大小的20%,即设置MEM_PERCEN的取值为20。
1
2
ALTER RESOURCE POOL resource_pool_a1 WITH (MEM_PERCENT=20);
ALTER RESOURCE POOL
  • 多租户场景下:MEM_PERCENT的取值设置为"x"(1<=x<=100),表示设置资源池使用的内存大小为可用内存大小的"x%",查询作业将使用给定的内存来运行。
  • 非多租户场景下:
    • 当MEM_PERCENT参数取值为0时,查询作业的内存不受限。
    • 当MEM_PERCENT参数取值为"x"(1<=x<=100)时,表示设置资源池使用的内存大小为可用内存大小的"x%",查询作业将使用给定的内存来运行。
      说明:

      ACTIVE_STATEMENTS取值范围为 -1 ~ INT_MAX, 默认值为10,建议使用该默认值。当设置为0或者-1时,内存不受限制。

作业级别的内存管理

数据库管理员可以通过下列步骤实现作业级别的内存管理。

  • 设置query_mem为500MB

    1
    set query_mem='500MB';
    

    当结果显示为如下信息,则表示设置成功。

    SET

  • 执行作业。

    如果query_mem超过资源池可用内存的上限或者低于256MB时,query_mem将不起作用,作业依然使用work_mem。

查看内存资源的配置信息

  • 查询实例级别的内存设置
    1
    show max_process_memory;
    
    max_process_memory -------------------- 32GB (1 row)
  • 查看资源池级别的内存设置
    1
    select * from pg_resource_pool;
    
    respool_name | mem_percent | cpu_affinity | control_group | active_statements | max_dop | memory_limit | parentid | io_limits | io_priority ------------------+-------------+--------------+---------------------+-------------------+---------+--------------+----------+-----------+------------- default_pool | 100 | -1 | DefaultClass:Medium | -1 | 1 | 8GB | 0 | 0 | None resource_pool_a1 | 20 | -1 | class_a:workload_a1 | 10 | 1 | 8GB | 0 | 0 | None (2 rows)
  • 查看作业级别的内存设置
    1
    show query_mem;
    
    query_mem ----------- 500MB (1 row)

查看内存资源的使用情况

内存资源的使用情况请参考内存资源监控。


查看更多:华为GaussDB 200 计算资源管理
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论