0
点赞
收藏
分享

微信扫一扫

Greenplum资源管理——Resource Group进阶篇(面向DBA)

腊梅5朵 2022-03-12 阅读 166

Greenplum是一款广泛应用的开源MPP数据库的产品,兼容PostgreSQL生态,被广泛应用与大数据的存储与分析。

Resource Group是Greenplum的一种资源管理方式。Resource Group由GP5开始被支持,相比于早期的Resource Queue的资源管理方式,具有支持更细粒度的资源管理、 支持组内资源共享等优点。在前一篇文章《Greenplum资源管理——Resource Group使用和实现分析》中笔者结合源码介绍了Resource Group的基础机制,这篇文章主要是面向DBA,介绍Resource Group的常见用法、Resource Group相关的参数含义、作用原理和配置建议,以及Greenplum重点客户使用过程中疑问比较多的常见问题。

Resource Group基本用法

Resource Group是Greenplum默认的资源管理方式,其基本原理和使用场景在前一篇文章《Greenplum资源管理——Resource Group使用和实现分析》中已经有所介绍,这里简要介绍Resource Group的常用SQL以帮大家回忆其基本内容,如果想对Resource Group有更深了解,可以阅读下前篇文章。

创建resource group:

CREATE RESOURCE GROUP rgroup1 WITH (CPU_RATE_LIMIT=20, MEMORY_LIMIT=25, MEMORY_SPILL_RATIO=20);

修改resource group配置:

ALTER RESOURCE GROUP rgroup1 SET CONCURRENCY 10;

查看当前系统的resource group配置:

SELECT * FROM gp_toolkit.gp_resgroup_config;

查看当前各个resource group负载情况:

SELECT * FROM gp_toolkit.gp_resgroup_status;

按segment查询resource group负载状态:

SELECT * FROM gp_toolkit.gp_resgroup_status_per_host;

查看用户对应的resource group:

select rolresgroup,* from pg_roles;

修改用户关联的resource group:

ALTER ROLE m1 RESOURCE GROUP rgroup1;

Resource Group参数配置及原理

参数名

取值

含义

作用原理

gp_resource_manager

group/queue

数据库当前的资源管理方式:

group:resource group;

queue:resource queue;

queue为默认值,若想切换为resource group需要进行一次重启。

gp_resgroup_memory_policy

auto, eager_free

单个查询的子运算之间的内存分配方式

eager_free为默认值。

我们除了通过resource group设定单个查询使用的最大内存之外,还可以设定如何在子算子之间(例如一个select查询通常包含一个scan子算子和gather motion自单子)如何分配内存。

eager_free代表优化器采用贪婪的内存分配算法。因为查询的所有运算符不会同时执行,所以在分配上,优化器选择急切地释放在该阶段执行结束时分配给前一阶段的内存, 然后将急切释放的内存分配给新阶段。

auto代表一种均分的逻辑。他会把要执行的operator分成耗费内存型和固定内存型,然后为每个固定内存型算子分配100KB内存,而其他耗费内存型operator平分所分配的resource group内存。

以上内存份额的分配是在执行器逻辑开始执行之前(standard_ExecutorStart)进行的。

gp_resource_group_memory_limit

浮点型

标识要分配给每个segment节点上的资源组的系统内存资源的最大百分比。

这个参数主要关系resource group能够使用的物理内存上限。

每个机器实际可用的内存

rg_perseg_mem = ((RAM * (vm.overcommit_ratio / 100) + SWAP) * gp_resource_group_memory_limit) / num_active_primary_segments_per_host

其中,RAM代表物理内存值,vm.overcommit_ratio是内核参数,num_active_primary_segments_per_host代表机器当前active额primary节点个数。

gp_resource_group_cpu_limit

浮点型

标识要分配给每个segment节点上的资源组的系统CPU资源的最大百分比。

与内存占比值类似。

gp_resource_group_bypass

on/off

设置为true以绕过资源组并发事务限制

为某个session设置参数为on,可以使这个session的查询绕过资源组限制,使用全局的共享内存来分配。

Resource Group常见问题

Resource Group是Greenplum重要的资源管理方式,其稳定性和有效性也在大型金融、运营商客户的离在线业务中得到了充分验证。本节选择Greenplum客户在使用过程中提出频率最高的一些问题以进一步介绍Greenplum Resource Group的原理和使用。

1)resource group如何开启,我是否能使用resource group?

resource group目前只在DBStack形态下输出,公有云和企业版暂时不能使用resource group进行资源管理。resource group可以在控制台进行开启,也可以提交工单由值班人员操作开启。

2)resource group基于cgroup实现,如果某台机器cgroup突然失效甚至硬件坏掉导致本质cgroup配置丢失,重启之后cgroup还能正常使用吗?

可以的。Greenplum除了将需要的cgroup配置写入本地之外,还在catalog中存储相关信息,并在每次开启时进行检查和初始化,所以cgroup意外丢失或者底层机器迁移之后cgroup会自动适配,不会影响resource group功能使用。

3)resource group对于底层OS有要求吗?

需要支持cgroup,且cgroup下面的cpu和cpuset路径分开挂载。

4)resource group功能可以在k8s部署形态下使用吗?

可以的,虽然k8s基于cgroup做资源隔离,单resource group可以级联挂在cgroup,resource group功能可以正常使用。

5)resource group能否设置一个用户对应多个队列,或者多个用户对应一个队列?

resource group中用户与group是多对一的关系。一个group可以管理多个用户,但是同一个用户只能属于一个资源group。

6)resource group是database级别,还是集群级别?

resource group是集群级别,整个集群共享配置以及相关系统表;连接在某一个数据库上设置和修改的resource group配置,在连接到其他数据库上看到的是一致的。

举报

相关推荐

0 条评论