内存资源管理
背景信息
内存是GaussDB 200运行的一个关键资源,如果能够有效利用,可以提升业务查询性能。系统支持对内存资源的管理类型如表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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论
- 查看资源池级别的内存设置
- 执行作业。