对租户内资源的扩容和缩容可以通过修改 unit_config 即租户的资源单元配置来实现。
前提条件
在进行租户的扩容和缩容操作前,需要进行以下操作:
由于空闲的资源池会被计算为占用的资源,故在扩容前,如果有租户被删除,建议与租户对应的资源池也一并删除,以便释放资源。
删除资源池的相关操作请参见 删除资源池。
进行租户缩容前,建议进行一轮转储以便释放租户正在使用的内存。
手动触发转储的相关操作请参见 手动触发转储。
查看集群中资源的分配情况,了解集群中资源的使用情况。
查看集群节点的资源总量和分配状态的相关操作请参见 查看集群的资源信息。
通过 SQL 语句修改租户的资源单元配置
在通过调大和调小租户资源单元的配置进行扩容和缩容时,有以下两种场景:
当前租户配置了独立的资源单元配置,可以直接修改租户的资源单元配置。
多个租户使用了相同的资源单元配置,需要切换租户的资源单元配置。
确认租户是否使用了独立的资源单元配置的操作如下:
使用
root用户登录数据库的sys租户。执行以下语句,获取待操作的租户所属的资源配置 ID。
obclient> SELECT a.TENANT_NAME, b.UNIT_CONFIG_ID FROM oceanbase.DBA_OB_TENANTS a,oceanbase.DBA_OB_RESOURCE_POOLS b WHERE b.TENANT_ID=a.TENANT_ID; +-------------+----------------+ | TENANT_NAME | UNIT_CONFIG_ID | +-------------+----------------+ | sys | 1 | | MySQL | 1002 | | Oracle | 1004 | +-------------+----------------+ 3 rows in set
根据查询结果,如果当前租户对应的 UNIT_CONFIG_ID 与其他租户相同,则表示有多个租户使用了相同的资源单元配置;如果当前租户中对应的 UNIT_CONFIG_ID 与其他租户均不相同,则表示该租户使用了独立的资源单元配置。
以下将通过这两种场景提供租户扩容和缩容的操作指导。
注意事项
在调大资源规格时,无论是通过修改资源配置还是切换资源配置,调整后的资源总量都必须满足以下要求:
Sum(min_cpu) <= CPU_CAPACITY;
Sum(max_cpu) <= CPU_CAPACITY * resource_hard_limit;
Sum(memory_size) <= MEM_CAPACITY;
Sum(log_disk_size) <= LOG_DISK_CAPACITY;
否则,系统会报错,提示扩容失败。
其中:
CPU_CAPACITY:表示 CPU 总的容量。MEM_CAPACITY:表示内存总的容量。LOG_DISK_CAPACITY:表示日志盘总的容量。resource_hard_limit:是一个配置项的值。在分配 Unit 时,系统会根据配置项
resource_hard_limit的值来分配 CPU 资源。该配置项的默认值为100,表示不允许超卖,取值范围为 [0, 10000]。更多配置项
resource_hard_limit的说明信息请参见 resource_hard_limit。
背景信息
假设当前集群中共包含 3 个可用区 z1、z2、z3,每个 Zone 内包含 3 台 OBServer。集群中有一个普通租户 tenant1,其资源分配情况如下:
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');
obclient>CREATE TENANT tenant1 resource_pool_list=('pool1');
租户配置了独立的资源单元配置的场景
如果待操作的租户配置了独立的资源单元配置,您可以直接通过修改租户的 unit_config 来完成租户的扩容和缩容。
方法如下:
使用
root用户登录数据库的sys租户。进入
oceanbase数据库。obclient>USE oceanbase;执行以下语句,获取待操作的租户所使用的资源配置 ID。
obclient> SELECT a.TENANT_NAME, b.UNIT_CONFIG_ID FROM oceanbase.DBA_OB_TENANTS a,oceanbase.DBA_OB_RESOURCE_POOLS b WHERE b.TENANT_ID=a.TENANT_ID; +-------------+----------------+ | TENANT_NAME | UNIT_CONFIG_ID | +-------------+----------------+ | sys | 1 | | MySQL | 1001 | | Oracle | 1002 | +-------------+----------------+ 3 rows in set执行以下语句,获取待操作租户的资源配置详细信息。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1001'; +----------------+-------+---------+---------+-------------+---------------+----------+----------+-------------+ | UNIT_CONFIG_ID | NAME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | +----------------+-------+---------+---------+-------------+---------------+----------+----------+-------------+ | 1001 | unit1 | 6 | 6 | 38654705664 | 2147483648 | 1024 | 1024 | 0 | +----------------+-------+---------+---------+-------------+---------------+----------+----------+-------------+ 1 row in set根据获取的资源单元配置信息,修改
unit1的配置。调大 unit1 的配置
obclient> ALTER RESOURCE UNIT unit1 MAX_CPU 8, MIN_CPU 8, MEMORY_SIZE '40G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';调小
unit1的配置obclient> ALTER RESOURCE UNIT unit1 MAX_CPU 5, MIN_CPU 5, MEMORY_SIZE '5G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';
多个租户使用了相同的资源单元配置的场景
如果多个租户共用了同一个资源单元配置模版,则不能通过简单的调大资源单元配置来实现租户的扩容和缩容。因为一旦修改,将导致使用相同资源单元配置模版的所有租户同时进行了扩容或缩容。
此场景下,需要先创建独立的资源单元配置后,再为租户切换资源单元配置。
例如,待扩容或缩容的租户为 tenant1,但由于 tenant1、tenant2 均使用了 unit1 作为资源单元配置,因此需要创建一个新的资源单元。
使用
root用户登录数据库的sys租户。进入
oceanbase数据库。创建一个独立的资源单元配置。
其中,
unit2为新建的资源单元的名称,名称需要保证全局唯一。创建比当前资源单元配置高的
unit2obclient> CREATE RESOURCE UNIT unit2 MAX_CPU 8, MIN_CPU 8, MEMORY_SIZE '20G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';创建比当前资源单元配置低的
unit3obclient> CREATE RESOURCE UNIT unit3 MAX_CPU 5, MIN_CPU 5, MEMORY_SIZE '5G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';
修改租户的资源池,将资源池的资源单元配置替换为刚刚新创建的 Unit。
其中,
unit2和unit3为刚刚新创建的 Unit。obclient> ALTER RESOURCE POOL pool1 unit='unit2'; obclient> ALTER RESOURCE POOL pool1 unit='unit3';
后续处理
操作结束后,您可以通过 oceanbase.DBA_OB_UNIT_CONFIGS 视图,确认当前租户的 unit_config 是否修改成功。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;
更多 DBA_OB_UNIT_CONFIGS 视图的字段及说明信息请参见 DBA_OB_UNIT_CONFIGS。




