GBase南大通用-GBase 8a资源管理功能试用

环境:centos7.9;GBase 8a V9.5.3.27

  1. 资源管理功能简介

GBase 8a MPP Cluster 资源管理功能可以对 SELECT 和 DML 等受控 SQL 在运 行过程中使用的 CPU、内存、I/O 和磁盘空间等资源进行合理管控,以达到资 源合理利用,系统稳定性运行的要求 。

GBase 8a MPP Cluster 资源管理由 Consumer Group(资源消费组)、Resource Pool (资源池)、Resource Plan(资源计划)、Resource Directive(资源指令)、User (资源消费用户)组成 。

资源消费组用于关联数据库用户,一个用户只能属于一个资源消费组,一个资源消费组可以有多个用户。存在默认消费组(default_consumer_group )的概念,所有未被分配指定消费组的用户都属于默认消费组。

资源池分为静态资源池和动态资源池,负责对资源进行划分。

资源计划则是一组或多组资源池与资源消费组对应关系的集合。

资源池、资源消费组、资源计划通过资源指令结合起来。

  1. 配置资源管理环境

GBase 8a资源管理功能依赖于操作系统的cgroup组件,需要执行

yum install libcgroup*

安装所需依赖,然后对cgroup的配置文件进行修改。

vi /etc/cgconfig.conf

在配置文件中追加以下内容(若集群安装时,运行SetSysEnv.py指定了-cgroup参数,则无需手动配置该文件):


mount {
    cpu = /cgroup/cpu;
    cpuacct = /cgroup/cpuacct;
    blkio = /cgroup/blkio;
}
group gbase {
            perm{
                task{
                    uid = gbase;
                    gid = gbase;
                }
                admin{
                    uid = gbase;
                    gid = gbase;
                 }
             }
        cpu{
        }
        cpuacct{
        }
        blkio{
        }
}

之后创建文件夹并进行挂载

mkdir /cgroup
mkdir /cgroup/cpu /cgroup/cpuacct /cgroup/blkio
mount -t cgroup -o cpu cpu /cgroup/cpu
mount -t cgroup -o cpuacct cpuacct /cgroup/cpuacct
mount -t cgroup -o blkio blkio /cgroup/blkio

生效配置

cgclear
cgconfigparser -l /etc/cgconfig.conf
  1. 创建基本对象

连接数据库,使用如下SQL语句创建基本对象。


#三个group对应三个user
create user user1;
create user user2;
create user user3;
create consumer group group1;
create consumer group group2;
create consumer group group3;
ALTER CONSUMER GROUP group1 ADD USER user1;
ALTER CONSUMER GROUP group2 ADD USER user2;
ALTER CONSUMER GROUP group3 ADD USER user3;

#创建三个plan
create resource plan plan1;
create resource plan plan2;
create resource plan plan3;

#创建三个静态资源池
create resource pool static_pool1(cpu_percent=80,max_memory=1000,max_temp_diskspace=2000,max_disk_space=2000,max_disk_writeio=1000,max_disk_readio=1000) type static;
create resource pool static_pool2(cpu_percent=80,max_memory=1000,max_temp_diskspace=2000,max_disk_space=2000,max_disk_writeio=1000,max_disk_readio=1000) type static;
create resource pool static_pool3(cpu_percent=80,max_memory=1000,max_temp_diskspace=2000,max_disk_space=2000,max_disk_writeio=1000,max_disk_readio=1000) type static;
  1. 测试逻辑

4.1 测试各参数声明逻辑


#为pool1创建动态资源池1,cpu超过了静态资源池,其他均为原来的一半
create resource pool dynamic_pool1_1(priority=1,cpu_percent=100,max_memory=500,max_temp_diskspace=1000,max_disk_space=1000,max_disk_writeio=500,max_disk_readio=500,max_activetask=2,task_max_parallel_degree=100,task_waiting_timeout=100000,task_running_timeout=100000)TYPE dynamic BASE ON static_pool1;
#虽然cpu超过了静态池,但是没有报错(因为动态池的cpu设置为权重设置)

#之后将1_1挂载到plan1上
CREATE RESOURCE DIRECTIVE dir1 ( PLAN_NAME = 'plan1', GROUP_NAME ='group1', POOL_NAME = 'dynamic_pool1_1');

#再创建一个1_2,没有报错,虽然其和1_1的cpu加起来已经110了,但是没有挂载,就无所谓,接下来将其和默认group挂载到plan1上试一下
create resource pool dynamic_pool1_2(priority=1,cpu_percent=10,max_memory=500,max_temp_diskspace=1000,max_disk_space=1000,max_disk_writeio=500,max_disk_readio=500,max_activetask=2,task_max_parallel_degree=100,task_waiting_timeout=100000,task_running_timeout=100000)TYPE dynamic BASE ON static_pool1;
#执行下列语句,报错了,因为1_1和1_2的CPU总权重超过了100%,
CREATE RESOURCE DIRECTIVE dir2 ( PLAN_NAME = 'plan1', GROUP_NAME ='default_consumer_group', POOL_NAME = 'dynamic_pool1_2');
#此时总结规律如下,动态资源池的cpu值,在创建时只要不超过100即可,但是挂载时,总和不能大于100,那要是两个动态资源池属于两个静态资源池呢?

#此时,pool1为80,再创建一个pool4为2,并为其创建一个pool4_1为100,看看挂载到plan1上会不会报错。
create resource pool static_pool4(cpu_percent=2,max_memory=1000,max_temp_diskspace=2000,max_disk_space=2000,max_disk_writeio=1000,max_disk_readio=1000) type static;
create resource pool dynamic_pool4_1(priority=1,cpu_percent=100,max_memory=500,max_temp_diskspace=1000,max_disk_space=1000,max_disk_writeio=500,max_disk_readio=500,max_activetask=2,task_max_parallel_degree=100,task_waiting_timeout=100000,task_running_timeout=100000)TYPE dynamic BASE ON static_pool4;
CREATE RESOURCE DIRECTIVE dir2 ( PLAN_NAME = 'plan1', GROUP_NAME ='default_consumer_group', POOL_NAME = 'dynamic_pool4_1');
#没有报错,即挂载的动态资源池的占比*对应静态资源池,不超过100即可。

#cpu的逻辑已经理清了,此时在测试一下内存和磁盘的逻辑:可以看到此时pool4的内存为1000,pool4_1的内存为500,那么再创建一个pool4_2的内存为600,会不会报错呢,应该不会,因为此时并没有触发挂载。
create resource pool dynamic_pool4_2(priority=1,cpu_percent=100,max_memory=600,max_temp_diskspace=1000,max_disk_space=1000,max_disk_writeio=500,max_disk_readio=500,max_activetask=2,task_max_parallel_degree=100,task_waiting_timeout=100000,task_running_timeout=100000)TYPE dynamic BASE ON static_pool4;
#没有报错,要是创建一个pool4_3内存为1500呢?
create resource pool dynamic_pool4_3(priority=1,cpu_percent=100,max_memory=1500,max_temp_diskspace=1000,max_disk_space=1000,max_disk_writeio=500,max_disk_readio=500,max_activetask=2,task_max_parallel_degree=100,task_waiting_timeout=100000,task_running_timeout=100000)TYPE dynamic BASE ON static_pool4;
#报错了,因为其值已经超过了静态池的该值。

#此时再尝试将内存为600的pool4_2挂载到plan1上,应该会报错,因为内存总和大于了1000
CREATE RESOURCE DIRECTIVE dir3 ( PLAN_NAME = 'plan1', GROUP_NAME ='group2', POOL_NAME = 'dynamic_pool4_2');
#报错了,符合预期

#按照验证内存的逻辑,再简单验证一下磁盘是不是同理。经验证,同理。即,另外五个必选参数,在创建时,不能超过原静态池,在挂载时,总和不能超过原静态池的值。

#此外还测试到如下逻辑:
#激活一个计划时,当前所有的用户必须被全部分配
#存在激活计划时,创建删除资源指令均不可以。

create resource pool dynamic_pool4_5(priority=1,cpu_percent=100,max_memory=500,max_temp_diskspace=1000,max_disk_space=1000,max_disk_writeio=500,max_disk_readio=500)TYPE dynamic BASE ON static_pool4;
CREATE RESOURCE DIRECTIVE dir5 ( PLAN_NAME = 'plan2', GROUP_NAME ='group3', POOL_NAME = 'dynamic_pool4_3');
DROP RESOURCE DIRECTIVE dir5;
create resource pool dynamic_pool4_7(priority=1,cpu_percent=80,max_memory=500,max_temp_diskspace=1000,max_disk_space=1000,max_disk_writeio=500,max_disk_readio=500,max_activetask=9999999999989999999999)TYPE dynamic BASE ON static_pool4;
ALTER resource pool dynamic_pool4_3 SET(priority=1,cpu_percent=100,max_memory=500,max_temp_diskspace=1000,max_disk_space=1000,max_disk_writeio=500,max_disk_readio=500)TYPE dynamic BASE ON static_pool4;
#非必选参数经测试,确实可以任意设置

4.2 测试内存检测功能

  • 创建资源管理相关对象

如上图,先创建一个最大内存为1M的静态资源池,再在其基础上创建一个同样最大内存为1M的动态资源池


CREATE RESOURCE DIRECTIVE dir1 (  PLAN_NAME = 'plan1', GROUP_NAME='default_consumer_group', POOL_NAME = 'dpool1');

之后将这个动态资源池与默认资源组挂载到plan1

  • 激活资源计划

  • 创建测试用表并插入数据

创建测试表t1和t2,插入部分数据

  • 进行测试

执行一个复杂SQL

可以看到报错如下:

ERROR 1708 (HY000): [192.168.161.128:5050](GBA-02AD-0005)Failed to query in gnode:
DETAIL: (GBA-01EX-700) Gbase general error: Exceed max Large Buffer Usage
SQL: SELECT /*192.168.161.128_34_36_2023-02-10_10:52:54*/ /*+ TID('242') */ `vcname000001.test.t1`.`a` AS `a`, `_tmp_2158078144_34_t1_1_1675996745_s`.`c1` AS `c1` FROM `gctmpdb`._tmp_2158078144_34_t1_1_1675996745_s INNER JOIN `test`.`t1_n1` `vcname000001.test.t1` ON (`vcname000001.test.t1`.`a` = `_tmp_2158078144_34_t1_1_1675996745_s`.`c1`)

  • 关闭计划

  • 再次执行对应SQL

再次执行同样SQL,没有报错,可见资源管理功能内存管理有效。

在使用GBase南大通用产品过程中,若有任何问题,欢迎前往GBase南大通用官网提问~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值