OceanBase數據庫是多租户的數據庫系統,一個集羣內可包含多個相互獨立的租户,每個租户提供獨立的數據庫服務。在OceanBase數據庫中,使用資源配置(Unit Config)、資源單元(Unit)和資源池(Resource Pool)三個概念,對各租户的可用資源進行管理。
視頻講解如下:
https://www.bilibili.com/video/BV1PQ8qzMEiM/?aid=114942300657...
一、 資源配置與資源單元
一個資源單元中可以包含多個資源配置。資源配置是用來描述每個單元中可用的CPU、內存、存儲空間和IOPS等的規格。這裏需要注意,資源配置指定的是對應資源單元能夠提供的服務能力,而不是資源單元的實時負載。下面展示了創建資源單元的完整語法格式:
CREATE RESOURCE UNIT [IF NOT EXISTS] unit_name
MEMORY_SIZE [=] 'size_value',
MAX_CPU [=] cpu_num,
[MAX_IOPS [=] iops_num,]
[MIN_CPU [=] cpu_num,]
[MIN_IOPS [=] iops_num,]
[IOPS_WEIGHT [=]iopsweight,]
[LOG_DISK_SIZE [=] 'size_value'];
下面的語句將創建一個名叫ru1的資源單元,其中將包含若干個資源配置,如:可以的CPU、內存大小、存儲空間等。
ob> create resource unit ru1 max_cpu 1, min_cpu 1, memory_size '2G',
log_disk_size '2G' ;
# 提示:Meta租户沒有獨立的Unit,租户資源管理過程中不管理Meta租户。
# 系統在創建租户時默認為Meta租户預留資源,各項資源從用户租户的資源中扣除。
# 目前Meta租户的各項資源採用默認配置,不支持用户指定。
通過DBA_OB_UNIT_CONFIGS視圖,可以查看所有資源配置和資源單元信息。
ob> select * from oceanbase.dba_ob_unit_configs \G;
# 輸出的信息如下:
*************************** 1. row ***************************
UNIT_CONFIG_ID: 1
NAME: sys_unit_config
CREATE_TIME: 2025-04-09 14:50:05.982963
MODIFY_TIME: 2025-04-09 14:50:05.982963
MAX_CPU: 1
MIN_CPU: 1
MEMORY_SIZE: 2147483648
LOG_DISK_SIZE: 2147483648
DATA_DISK_SIZE: NULL
MAX_IOPS: 9223372036854775807
MIN_IOPS: 9223372036854775807
IOPS_WEIGHT: 1
MAX_NET_BANDWIDTH: 9223372036854775807
NET_BANDWIDTH_WEIGHT: 1
*************************** 2. row ***************************
UNIT_CONFIG_ID: 1001
NAME: ru1
CREATE_TIME: 2025-04-09 14:56:02.348728
MODIFY_TIME: 2025-04-09 14:56:02.348728
MAX_CPU: 1
MIN_CPU: 1
MEMORY_SIZE: 2147483648
LOG_DISK_SIZE: 2147483648
DATA_DISK_SIZE: NULL
MAX_IOPS: 9223372036854775807
MIN_IOPS: 9223372036854775807
IOPS_WEIGHT: 1
MAX_NET_BANDWIDTH: 9223372036854775807
NET_BANDWIDTH_WEIGHT: 1
2 rows in set (0.001 sec)
通過使用alter resource unit語句可以修改資源單元的資源配置,例如:
ob> alter resource unit ru1 memory_size '3G';
二、 資源池
資源池由若干個資源單元組成,通過給資源池指定資源配置,可指定資源池下各資源單元的物理資源。下面展示了創建資源池的完整語法格式:
CREATE RESOURCE POOL pool_name
UNIT [=] unit_name,
UNIT_NUM [=] unit_num,
ZONE_LIST [=] ('zone_name' [, 'zone_name' ...]);
在創建資源池之前首先確定集羣中的可用區:
ob> use oceanbase;
ob> select zone,status,type from oceanbase.dba_ob_zones;
# 輸出的信息如下:
+-------+--------+-----------+
| zone | status | type |
+-------+--------+-----------+
| zone1 | ACTIVE | ReadWrite |
| zone2 | ACTIVE | ReadWrite |
+-------+--------+-----------+
2 rows in set (0.044 sec)
創建資源池的示例語句如下:
ob> create resource pool rp1 unit 'ru1', unit_num 2, zone_list ('zone1', 'zone2');
# 此時將出現下面的錯誤信息:
ERROR 4656 (HY000): resource pool unit num is bigger than zone server count
# 提示:資源池裏一個Zone下的Unit的數目大於這個Zone下Server的數量。
執行下面的語句確定每個Zone下的Server數量:
ob> use oceanbase;
ob> select svr_ip,id, zone from dba_ob_servers;
# 輸出信息如下:
+---------------+------+-------+
| svr_ip | id | zone |
+---------------+------+-------+
| 192.168.79.11 | 1 | zone1 |
| 192.168.79.12 | 3 | zone1 |
| 192.168.79.13 | 2 | zone2 |
+---------------+------+-------+
# 提示:此時zone2中只包含一個OBServer。
修改上面的資源池創建語句如下:
ob> create resource pool rp1 unit 'ru1', unit_num 1, zone_list ('zone1', 'zone2');
通過DBA_OB_RESOURCE_POOLS視圖,可以查看所有資源池信息。
ob> select * from dba_ob_resource_pools \G;
# 輸出的信息如下:
*************************** 1. row ***************************
RESOURCE_POOL_ID: 1
NAME: sys_pool
TENANT_ID: 1
CREATE_TIME: 2025-04-09 14:50:06.003151
MODIFY_TIME: 2025-04-09 14:50:06.060751
UNIT_COUNT: 1
UNIT_CONFIG_ID: 1
ZONE_LIST: zone1;zone2
REPLICA_TYPE: FULL
*************************** 2. row ***************************
RESOURCE_POOL_ID: 1002
NAME: rp1
TENANT_ID: NULL
CREATE_TIME: 2025-04-09 15:12:09.141263
MODIFY_TIME: 2025-04-09 15:12:09.141263
UNIT_COUNT: 1
UNIT_CONFIG_ID: 1002
ZONE_LIST: zone1;zone2
REPLICA_TYPE: FULL
2 rows in set (0.001 sec)
切換資源池的資源配置可以調整資源池下每個資源單元的資源規格,進而調整租户在該資源池上的資源規格和服務能力。例如:
ob> create resource unit ru2 max_cpu 1, min_cpu 1, memory_size '2G',
log_disk_size '2G' ;
ob> alter resource pool rp1 unit 'ru2';
# 提示:這裏將資源池rp1的資源單元配從ru1切換到了ru2上。