一、多租户的意义
多租户满足客户混合负载处理需求:提供两层用户机制,分层资源隔离,满足客户对计算和存储资源的自主控制需求。两级用户分别关联不同的资源池和存储空间,实现多租户下资源分组管理。
二、GaussDB(DWS)的多租户
目前GaussDB(DWS)的多租户能够进行隔离的资源包括:CPU资源、内存资源、IO资源、存储资源。
GaussDB的多租户通过绑定资源池来实现,具体原理如下图所示:
借助上图说明多租户的管控方式,见往下三、四、五章节。
三、控制组设置
通过设置控制组可以进行以下几方面的资源隔离:
(1)设置CPU核数和控制组CPU份额,进行CPU资源管理;
(2)设置异常规则来对异常作业进行终止或降级;
1、class控制组
创建名称为“class_a”的子Class控制组,CPU资源配额分别为Class的40%。
gs_cgroup -c -S class_a -s 40
2、workload控制组
创建子Class控制组“class_a”下名称为“workload_a1”的Workload控制组,CPU资源配额分别为“class_a”控制组的20%。
gs_cgroup -c -S class_a -G workload_a1 -g 20
3、异常规则
设置“class_a”下属“workload_a1”的作业阻塞到1200秒或执行2400秒时执行终止动作。
gs_cgroup -S class_a -G workload_a1 -E "blocktime=1200,elapsedtime=2400" -a
支持的控制组异常规则:
异常阈值类型 |
说明 |
取值范围(0表示取消设置) |
支持的异常操作 |
blocktime |
作业的阻塞时间,单位秒。包括全局并发排队以及局部并发排队的总时间。 |
0~UINT_MAX |
abort |
elapsedtime |
作业的已被执行时间,单位秒。从开始执行到当前所消耗的时间。 |
0~UINT_MAX |
abort |
allcputime |
作业在所有DN上执行时所耗费的CPU总时间,单位秒。 |
0~UINT_MAX |
abort,penalty |
cpuskewpercent |
作业在DN上执行时的CPU时间的倾斜率,依赖于qualificationtime的设置。 |
0~100 |
abort,penalty |
qualificationtime |
检查作业执行cpu倾斜率的间隔时间,单位秒,需同cpuskewpercent一起设置。 |
0~UINT_MAX |
none |
spillsize |
作业在DN上下盘的数据量,单位MB。 |
0~UINT_MAX |
abort |
broadcastsize |
作业在DN上算子大表广播数据量,单位MB。 |
0~UINT_MAX |
abort |
四、资源池设置
通过设置资源池属性可以进行以下几方面的资源隔离:
(1)通过设置mem_percent、memory_limit进行内存资源管理;
(2)通过设置io_limits、io_priority进行IO管控;
(3)通过设置active_statements、max_dop进行并发管控;
(4)可以设置指定的控制组,进行CPU和异常规则的管理;
(5)设置资源池异常规则;
1、组资源池
创建名称为“resource_pool_a”的组资源池关联到了“class_a”控制组。
CREATE RESOURCE POOL resource_pool_a WITH (control_group='class_a');
2、业务资源池
(1)创建名称为“resource_pool_a1”的业务资源池关联到了“workload_a1”控制组
CREATE RESOURCE POOL resource_pool_a1 WITH (control_group='class_a:workload_a1');
(2)更新一个资源池,其控制组指定为"DefaultClass"组下属的"High" Timeshare Workload控制组。
ALTER RESOURCE POOL pool1 WITH (CONTROL_GROUP="High");
(3)修改资源池“resource_pool_a1”的内存比例为可用内存大小的20%,即设置MEM_PERCEN的取值为20。
ALTER RESOURCE POOL resource_pool_a1 WITH (MEM_PERCENT=20);
3、可设置的资源池属性
属性 |
属性值 |
说明 |
mem_percent |
0 |
最大占用内存百分比。0代表不限制。 |
control_group |
DefaultClass:Medium |
资源池关联的控制组。 |
active_statements |
-1 |
资源池允许的最大并发数。-1和0代表不限制。 |
max_dop |
-1 |
资源池允许的简单作业最大并发数。-1和0代表不限制 |
memory_limit |
default |
使用该资源池的作业估算内存上限。default表示最大为资源池内存一半,unlimited表示不限制。 |
io_limits |
0 |
每秒触发IO的次数上限。行存单位是万次/s,列存是次/s。0表示不控制。 |
io_priority |
None |
IO利用率高达90%时,重消耗IO作业进行IO资源管控时关联的优先级等级。None表示不控制。 |
4、可设置的资源池异常规则
异常阈值类型 |
说明 |
取值范围(0表示取消设置) |
支持的异常操作 |
mem_limit |
作业在单实例上使用内存上限。 |
32MB~max_dynamic_memory |
abort |
五、用户设置
通过设置用户属性进行存储空间管控:
1、创建组用户关联组资源池
CREATE USER tenant_a RESOURCE POOL 'resource_pool_a' PASSWORD 'Gauss_234';
2、创建业务用户关联业务资源池
CREATE USER tenant_a1 RESOURCE POOL 'resource_pool_a1' USER GROUP 'tenant_a' PASSWORD 'Gauss_234';
3、通过设置用户属性(PERM SPACE、TEMP SPACE、SPILL SPACE)可以进行存储空间管控:
(1)修改用户“tenant_space_test”永久表空间限额不受限制。
ALTER USER tenant_space_test PERM SPACE 'unlimited';
(2)修改用户“tenant_space_test”临时表空间限额为100G。
ALTER USER tenant_space_test TEMP SPACE '100G';
(3)修改用户“tenant_space_test”算子落盘空间限额为200G。
ALTER USER tenant_space_test SPILL SPACE '200G';