查看资源单元

通过查询内部表可以获知当前集群中已经存在的资源单元信息。资源单元可以理解为界定服务器资源使用模版。

下述为资源单元的查看语句:

  1. obclient> SELECT * FROM __all_unit_config;

创建资源单元

租户使用的资源被限制在资源单元的范围内,如果当前存在的资源单元配置无法满足新租户的需要,可以新建资源单元。

下述为创建资源单元语句的语法:

  1. CREATE RESOURCE UNIT unitname
  2. MAX_CPU [=] cpunum,
  3. MAX_MEMORY [=] memsize,
  4. MAX_IOPS [=] iopsnum,
  5. MAX_DISK_SIZE [=] disksize,
  6. MAX_SESSION_NUM [=] sessionnum,
  7. [MIN_CPU [=] cpunum,]
  8. [MIN_MEMORY [=] memsize,]
  9. [MIN_IOPS [=] iopsnum] ;

参数说明和取值范围:

  • 语法中提及的参数不能省略,必须指定 CPU、Memory、IOPS、Disk Size 和 Session Num 的大小。

  • 为参数指定值时,可以采用纯数字不带引号的方式,也可以使用带单位加引号的方式(如’1T’、’1G’、’1M’、’1K’)。

    例如: max_memory=’10G’ 等效于 max_memory=10737418240

    说明

    为参数指定值时,不建议使用纯数字带引号的方式。

  • MAX_MEMORY 的取值范围:[1073741824,+∞) 单位为字节,即最小值为 1 G。

  • MAX_IOPS 的取值范围:[128,+∞)。

  • MAX_DISK_SIZE 的取值范围:[536870912,+∞]单位为字节,即最小值为 512 M。

  • MAX_SESSION_NUM 的取值范围:[64,+∞)。

示例:

  1. obclient> CREATE RESOURCE UNIT unit1 max_cpu 1, max_memory '1G', max_iops 128,max_disk_size '10G', max_session_num 64, MIN_CPU=1, MIN_MEMORY='1G', MIN_IOPS=128;
  2. obclient> CREATE RESOURCE UNIT unit1 max_cpu 1, max_memory 1073741824, max_iops 128, max_disk_size 10737418240, max_session_num 64, MIN_CPU=1, MIN_MEMORY=1073741824, MIN_IOPS=128;

创建的资源单元实际上是资源单元的模版。可以被其他多个不同的资源池使用。比如,资源单元 unit1 创建后,可以创建资源池 pool1 和 pool2 并且 pool1 和 pool2 均使用 unit1 资源单元的配置。

修改资源单元

修改资源单元的配置可以动态调整租户的资源单元大小,实现租户的节点内动态扩容/缩容功能。

在增加资源的过程中必须保证 OBServer 有足够的剩余资源可以用于分配。可以通过内部表 _all_virtual_server_stat 查询节点总资源和已经分配的资源,然后通过计算可知是否可以修改资源单元。

下述为修改资源单元语句的语法:

  1. ALTER RESOURCE UNIT unitname
  2. MAX_CPU [=] cpunum,
  3. MAX_MEMORY [=] memsize,
  4. MAX_IOPS [=] iopsnum,
  5. MAX_DISK_SIZE [=] disksize,
  6. MAX_SESSION_NUM [=] sessionnum,
  7. [MIN_CPU [=] cpunum,]
  8. [MIN_MEMORY [=] memsize,]
  9. [MIN_IOPS [=] iopsnum] ;

示例:

  1. obclient> ALTER RESOURCE UNIT unit1 max_cpu 15, max_memory '20G', max_iops 128,max_disk_size '100G', max_session_num 64, MIN_CPU=10, MIN_MEMORY='10G', MIN_IOPS=128;

删除资源单元

下述为删除资源单元的语句:

  1. obclient> DROP RESOURCE UNIT unitname;

资源单元必须满足资源单元没有被使用的情况下才可以进行删除。因此,需要将资源单元从资源池移除。

查看资源池

资源单元规定了 CPU 和内存在资源单元中的限制。资源池则是资源单元的容器。一个资源池仅支持存放一种规格的资源单元。租户运行的资源在资源池内分配。不同的资源池可以使用相同的资源单元配置。

下述为查看资源池的语句:

  1. obclient> SELECT * FROM __all_resource_pool;

参数

说明

gmt_create

资源池的创建时间。

gmt_modified

修改时间。

resource_pool_id

资源池的 ID。

name

资源池的名字。

unit_count

资源池配置中在每个 Zone 的 Unit 数量。

unit_config_id

资源吃配置的 ID, 可以结合 __all_unit_config 表来查看具体的资源配置。

zone_list

资源池分配到的 Zone List。

tenant_id

使用资源池的租户 ID。

replica_type

副本类型 0 代表全能型,5 代表日志型,16 代表只读型。

创建资源池

在创建新租户时,如果当前的资源池均被使用(被其他租户使用),需要创建新的资源池。

下述为创建资源池语句的语法:

  1. CREATE RESOURCE POOL poolname
  2. UNIT [=] unitname,
  3. UNIT_NUM [=] unitnum,
  4. ZONE_LIST [=] (‘zone [, zone …]);
  • 参数 unit_num 表示在集群的一个 Zone 里面包含的资源单元个数。该值小于等于一个 Zone 中的 OBServer 的个数。

  • 参数 zone_list 表示资源池的 Zone 列表,显示该资源池的资源在哪些 Zone 中被使用。

示例:

  1. obclient> CREATE RESOURCE POOL pool1 unit='unit1', unit_num=1, zone_list=('zone1''zone2','zone3');

修改资源池

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

下述为修改资源池语句的语法:

  1. ALTER RESOURCE POOL poolname
  2. UNIT [=] unitname,
  3. UNIT_NUM [=] unitnum,
  4. ZONE_LIST [=] (‘zone [, zone …]);

修改资源池的命令,每次仅支持修改一个参数值。被修改的资源池必须是没有被使用的或者不包含任何资源单元的空的资源池。新建立的资源池不能更改 zone_list

示例 1

展示了修改资源池 pool1 的资源单元。修改后 unit2 替代 unit1 属于资源池 pool1:

  1. obclient> ALTER RESOURCE POOL pool1 unit='unit2'

示例 2

展示了资源池 pool1 被使用中,尝试修改会报错:

  1. obclient> ALTER RESOURCE POOL pool1 zone_list=('HANGZHOU_1');
  2. ERROR 4179 (HY000): alter resource pool zone list with non-empty unit not allowed

示例 3

展示了同时修改资源池的两个参数时,会报错:

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

删除资源池

下述为删除资源池的语句:

  1. obclient> DROP RESOURCE POOL poolname;

查看资源配置

下述为查看资源配置的语句:

  1. obclient> SELECT * FROM oceanbase.gv$unit;

查看具体的资源单元配置

下述为查看具体资源单元配置的语句:

  1. obclient> SELECT * FROM __all_unit_config;