OceanBase 数据库 V4.x 版本可以使用 resource_manager 对用户、SQL 以及后台线程进行资源隔离和限制。本文讲述如何对转储合并的后台线程进行资源隔离的配置。
适用版本
OceanBase 数据库 V4.x 版本。
使用 resource_manager 的原则
【严禁】在创建资源隔离组的时候(DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE),严禁将 group 的 min_iops/max_iops/weight_iops 配置成 0,否则可能会导致 IO 卡死的问题。
【建议】合理配置租户的 min_iops、max_iops,默认为不隔离。建议将租户的 min_iops、max_iops 修改成 __all_virtual_io_benchmark 中查到的 16K read 的 iops 数据,或直接设置为 10000*CPU 个数。
obclient> ALTER RESOURCE UNIT unit_name_xxx MIN_IOPS 50000, MAX_IOPS 50000;
合并配置示例
此配置将约束 compaction 类的后台任务(转储、合并等)。
/*创建plan*/
call DBMS_RESOURCE_MANAGER.CREATE_PLAN('MERGE_PLAN','plan for COMPACTION');
select PLAN from oceanbase.dba_rsrc_plans;
/*创建group*/
call DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'COMPACTION_LOW_GROUP', COMMENT => 'COMPACTION_LOW_GROUP');
call DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'COMPACTION_MID_GROUP', COMMENT => 'COMPACTION_MID_GROUP');
call DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'COMPACTION_HIGH_GROUP', COMMENT => 'COMPACTION_HIGH_GROUP');
/*创建directive*/
call DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'MERGE_PLAN', GROUP_OR_SUBPLAN => 'COMPACTION_LOW_GROUP' , COMMENT => 'COMPACTION_LOW_GROUP', MIN_IOPS => 5, MAX_IOPS => 50, WEIGHT_IOPS => 30);
call DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'MERGE_PLAN', GROUP_OR_SUBPLAN => 'COMPACTION_MID_GROUP' , COMMENT => 'COMPACTION_MID_GROUP', MIN_IOPS => 10, MAX_IOPS => 80, WEIGHT_IOPS => 40);
call DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'MERGE_PLAN', GROUP_OR_SUBPLAN => 'COMPACTION_HIGH_GROUP' , COMMENT => 'COMPACTION_HIGH_GROUP', MIN_IOPS => 20, MAX_IOPS => 100, WEIGHT_IOPS => 60);
/*创建映射关系*/
call DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'COMPACTION_LOW', 'COMPACTION_LOW_GROUP');
call DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'COMPACTION_MID', 'COMPACTION_MID_GROUP');
call DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'COMPACTION_HIGH', 'COMPACTION_HIGH_GROUP');
/*plan生效*/
set global resource_manager_plan = 'MERGE_PLAN';
/*关闭隔离,如果有必要的话*/
set global resource_manager_plan = '';
迁移配置示例
此配置将约束 migrate 类的后台任务。
/*创建plan*/
call DBMS_RESOURCE_MANAGER.CREATE_PLAN('MIGRATE_PLAN','plan for HA');
select PLAN from oceanbase.dba_rsrc_plans;
/*创建group*/
call DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'HA_LOW_GROUP', COMMENT => 'HA_LOW_GROUP');
call DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'HA_MID_GROUP', COMMENT => 'HA_MID_GROUP');
call DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'HA_HIGH_GROUP', COMMENT => 'HA_HIGH_GROUP');
/*创建directive*/
call DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'MIGRATE_PLAN', GROUP_OR_SUBPLAN => 'HA_LOW_GROUP' , COMMENT => 'HA_LOW_GROUP', MIN_IOPS => 5, MAX_IOPS => 60, WEIGHT_IOPS => 40);
call DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'MIGRATE_PLAN', GROUP_OR_SUBPLAN => 'HA_MID_GROUP' , COMMENT => 'HA_MID_GROUP', MIN_IOPS => 5, MAX_IOPS => 60, WEIGHT_IOPS => 40);
call DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'MIGRATE_PLAN', GROUP_OR_SUBPLAN => 'HA_HIGH_GROUP' , COMMENT => 'HA_HIGH_GROUP', MIN_IOPS => 5, MAX_IOPS => 60, WEIGHT_IOPS => 40);
/*创建映射关系*/
call DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'HA_LOW', 'HA_LOW_GROUP');
call DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'HA_MID', 'HA_MID_GROUP');
call DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING('FUNCTION', 'HA_HIGH', 'HA_HIGH_GROUP');
/*plan生效*/
set global resource_manager_plan = 'MIGRATE_PLAN';
/*关闭隔离,如果有必要的话*/
set global resource_manager_plan = '';
查看资源隔离设置
/*查看当前生效的plan*/
select NAME from oceanbase.v$rsrc_plan;
/*查看资源隔离的 IO 配置情况*/
select * from oceanbase.DBA_OB_RSRC_IO_DIRECTIVES;
/*查看实时iops*/
select * from __all_virtual_io_quota;
select * from __all_virtual_io_benchmark;