OceanBase学习之路39|什么是修改资源池?

修改资源池是实现租户扩容或缩容的另一种方式。例如,在每个 Zone 中增加或减少节点数量,可以通过修改参数  UNIT_NUM 来实现。

通过 SQL 语句修改资源池

修改资源池语句的语法如下:

ALTER RESOURCE POOL pool_name 
UNIT [=] unit_name, 
UNIT_NUM [=] unit_num [DELETE UNIT = (unit_id_list)], 
ZONE_LIST [=] ('zone'[, 'zone' ...]);

语句使用说明:

  • 该语句仅支持由  sys 租户的管理员执行。

  • 修改资源池的命令每次仅支持修改一个参数。

  • UNIT_NUM 表示指定修改每个 Zone 下的资源单元个数,取值需要小于等于对应 Zone 中的 OBServer 的个数。

    减小  UNIT_NUM 时,使用  DELETE UNIT 可以明确指定本次缩容即将删除的 Unit。如果不指定  DELETE UNIT,则系统将自动选择 Unit 进行删除。

    注意

    使用  DELETE UNIT 明确指定待删除的  unit_id 时,还需要满足以下条件:

    • 待删除的  unit_id 列表中,每个 Zone 内删除的 Unit 的数量必须相等,目前认为删除列表中各 Zone 的 Unit 数量不相同的缩容操作属于非法操作。

    • 待删除的  unit_id 列表中,每个 Zone 内删除的 Unit 的数量和  UNIT_NUM 的数量需要匹配。

      指定待删除的  unit_id 时,  unit_id 可通过查询视图  GV$OB_UNITS 获取。

  • ZONE_LIST 表示指定资源池的使用范围。

假设当前环境中存在如下所示的资源单元和资源池。

obclient> CREATE RESOURCE UNIT unit1 MAX_CPU 6,MIN_CPU 6, MEMORY_SIZE '36G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';
obclient> CREATE RESOURCE POOL pool1 UNIT 'unit1', UNIT_NUM 2, ZONE_LIST ('z1','z2','z3');

则修改资源池的示例如下:

  • 修改资源池  pool1 的资源单元,修改后, unit2 替代  unit1 属于资源池 pool1

    obclient> CREATE RESOURCE UNIT unit2 MAX_CPU 8, MIN_CPU=8, MEMORY_SIZE '40G';
    obclient> ALTER RESOURCE POOL pool1 unit='unit2';
  • 不指定  unit_id,将资源池  pool1 中每个 Zone 下的资源单元个数修改为 1 个。

    obclient>ALTER RESOURCE POOL pool1 UNIT_NUM = 1;
  • 指定删除资源池  pool1 中  unit_id 为  1001 、 10031005 的资源单元,使每个 Zone 下的资源单元个数为 1 个。

    obclient> ALTER RESOURCE POOL pool1 UNIT_NUM 1 DELETE UNIT = (1001, 1003,1005);
  • 修改资源池  pool1, 使资源池  pool1 中  ZONE_LIST 的范围扩大到  'z1','z2','z3','z4'

    obclient> ALTER RESOURCE POOL pool1 ZONE_LIST=('z1','z2','z3','z4');
  • 每次只能修改资源池的一个参数,同时修改资源池的两个参数时,会报错。

    obclient> ALTER RESOURCE POOL pool1 unit='unit1', zone_list=('HANGZHOU_1');
    ERROR 1235 (0A000): alter unit_num, resource_unit, zone_list in one cmd not supported


请使用浏览器的分享功能分享到微信等