如何实现让UserLoad(夜间任务)和UserSelect(白天任务)在各自时段使用不同的资源池?需要配置哪些计划(plan)?
要实现 UserLoad(夜间任务) 和 UserSelect(白天任务) 在各自时段使用不同的资源池,核心是配置两个资源计划(plan):plan_day(白天计划) 和 plan_night(夜晚计划),并通过激活不同的计划来实现时段切换。
一、需要配置的计划(Plan)
必须创建两个资源计划,作为不同时段资源分配策略的容器:
plan_day:白天生效的资源计划。plan_night:夜晚生效的资源计划。
二、完整配置步骤
以下是实现该目标的完整步骤
步骤1:创建资源消费组并关联用户
将用户按业务类型分组。
CREATE CONSUMER GROUP group_load COMMENT = 'users for load';
CREATE CONSUMER GROUP group_select COMMENT = 'users for select';
ALTER CONSUMER GROUP group_load ADD USER UserLoad;
ALTER CONSUMER GROUP group_select ADD USER UserSelect;步骤2:创建静态和动态资源池
创建基础资源池和两个分别代表高、低优先级的动态池。
-- 1. 创建静态资源池(整体资源边界)
CREATE RESOURCE POOL static_pool0 (
cpu_percent = 100,
max_memory = 10000,
max_temp_diskspace = 10000,
max_disk_space = 10000,
max_disk_writeio = 1000,
max_disk_readio = 1000
) TYPE STATIC;
-- 2. 创建高优先级动态资源池(用于需要快速响应的业务)
CREATE RESOURCE POOL high_pool (
priority = 1,
cpu_percent = 80,
max_memory = 8000,
max_temp_diskspace = 5000,
max_disk_space = 5000,
max_disk_writeio = 600,
max_disk_readio = 600,
max_activetask = 200,
task_max_parallel_degree = 100,
task_waiting_timeout = 100000,
task_running_timeout = 100000
) TYPE DYNAMIC BASE ON static_pool0;
-- 3. 创建低优先级动态资源池(用于可容忍延迟的业务)
CREATE RESOURCE POOL low_pool (
priority = 1,
cpu_percent = 20,
max_memory = 2000,
max_temp_diskspace = 5000,
max_disk_space = 5000,
max_disk_writeio = 400,
max_disk_readio = 400,
max_activetask = 200,
task_max_parallel_degree = 100,
task_waiting_timeout = 100000,
task_running_timeout = 100000
) TYPE DYNAMIC BASE ON static_pool0;
步骤3:创建资源计划
创建两个分别对应白天和夜晚的计划。
CREATE RESOURCE PLAN plan_day COMMENT = 'day plan';
CREATE RESOURCE PLAN plan_night COMMENT = 'night plan';步骤4:创建指令计划(绑定消费组与资源池)
这是实现差异化管控的关键,为每个计划创建指令,明确“谁在什么时候用什么池”。
1. 白天计划 (plan_day) 的指令:
查询用户组 (
group_select) 使用高优先级池 (high_pool)- 加载用户组 (
group_load) 使用低优先级池 (low_pool) - 默认用户组 (
default_consumer_group) 也使用高优先级池
CREATE RESOURCE DIRECTIVE directive1 (
PLAN_NAME = 'plan_day',
POOL_NAME = 'high_pool',
GROUP_NAME = 'group_select',
COMMENT = 'select user resource usage on day'
);
CREATE RESOURCE DIRECTIVE directive2 (
PLAN_NAME = 'plan_day',
POOL_NAME = 'low_pool',
GROUP_NAME = 'group_load',
COMMENT = 'load user resource usage on day'
);
CREATE RESOURCE DIRECTIVE directive3 (
PLAN_NAME = 'plan_day',
POOL_NAME = 'high_pool',
GROUP_NAME = 'default_consumer_group',
COMMENT = 'other user resource usage on day'
);
2. 夜晚计划 (plan_night) 的指令:
加载用户组 (
group_load) 使用高优先级池 (high_pool)查询用户组 (
group_select) 使用低优先级池 (low_pool)- 默认用户组 (
default_consumer_group) 也使用低优先级池
CREATE RESOURCE DIRECTIVE directive4 (
PLAN_NAME = 'plan_night',
POOL_NAME = 'high_pool',
GROUP_NAME = 'group_load',
COMMENT = 'load user resource usage on night'
);
CREATE RESOURCE DIRECTIVE directive5 (
PLAN_NAME = 'plan_night',
POOL_NAME = 'low_pool',
GROUP_NAME = 'group_select',
COMMENT = 'select user resource usage on night'
);
CREATE RESOURCE DIRECTIVE directive6 (
PLAN_NAME = 'plan_night',
POOL_NAME = 'low_pool',
GROUP_NAME = 'default_consumer_group',
COMMENT = 'other user resource usage on night'
);步骤5:激活与切换资源计划
通过命令在指定时间点激活对应的计划,实现自动切换。
-- 早上8:00,激活白天计划
ACTIVE RESOURCE PLAN plan_day ON VC vc1;
-- 晚上20:00,先停用当前计划,再激活夜晚计划
DEACTIVE RESOURCE PLAN ON VC vc1;
ACTIVE RESOURCE PLAN plan_night ON VC vc1;
注意:vc1 是虚拟集群名,请根据实际环境替换。同一VC下同一时段只能有一个激活的计划。
三、配置逻辑总结
| 时间段 | 用户/组 | 绑定资源池 | 设计意图 |
|---|---|---|---|
| 白天 | group_select (UserSelect) |
| 保证查询业务响应及时 |
| 白天 | group_load (UserLoad) | low_pool (低优先级) | 限制白天加载任务,避免影响查询 |
| 白天 |
|
| 其他用户也享有高响应 |
| 夜晚 | group_load (UserLoad) |
| 提升夜间紧急加载任务的速度 |
| 夜晚 | group_select (UserSelect) | low_pool (低优先级) | 夜间查询任务少,降低优先级 |
| 夜晚 |
| low_pool (低优先级) | 其他用户使用低优先级资源 |
四、关键要点与验证
必须项:任何计划中,
default_consumer_group必须关联一个动态资源池,否则计划无法激活。- 切换机制:计划切换需要手动执行命令,或通过外部调度工具(如crontab)定时触发。
- 验证方法:
激活计划后,查询
gbase.resource_config表确认当前激活的计划。用户执行任务时,通过
SHOW RESOURCE POOL USAGE等命令查看资源池使用情况,验证管控是否生效。
通过以上配置,即可实现 UserLoad 和 UserSelect 在不同时段受到不同的资源管控,从而更合理地利用集群资源,满足业务波动的需求。
评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526