首批通过分布式安全可靠测评,为关键业务系统打造
Database 下用户表的聚合
更新时间:2026-06-20 15:21:46
用户表的聚合是指将同一租户下的指定用户表绑定在同一个日志流上。OceanBase 数据库通过将 Database 绑定到一个 Sharding = 'NONE' 的表组上来实现该 Database 下所有用户表的聚合。同时,通过将多个 Database 绑定到同一个表组,也可以实现多个 Database 下用户表的聚合。
使用限制
当前仅 MySQL 模式支持 Database 下用户表的聚合功能,Oracle 模式暂不支持。
开启新建 Database 下用户表的自动聚合
Database 下用户表的自动聚合开关由租户级配置项 enable_database_sharding_none 控制。默认为 False,表示未开启 Database 下用户表的自动聚合。
用户可以根据业务需要,开启 Database 下用户表的自动聚合。开启新建 Database 下用户表的自动聚合的方法如下:
MySQL 模式租户的租户管理员连接数据库。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A查看租户配置项
enable_database_sharding_none的值。obclient(root@mysql001)[(none)]> SHOW PARAMETERS LIKE '%enable_database_sharding_none%';查询结果如下:
+-------+----------+----------------+----------+-------------------------------+-----------+-------+----------------------------------------------------------------------------------------+--------------+--------+---------+-------------------+---------------+-----------+ | zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | default_value | isdefault | +-------+----------+----------------+----------+-------------------------------+-----------+-------+----------------------------------------------------------------------------------------+--------------+--------+---------+-------------------+---------------+-----------+ | zone1 | observer | 172.xx.xxx.xxx | 2882 | enable_database_sharding_none | BOOL | False | Enable automatic creation of sharding none tablegroup for new databases in MySQL mode. | LOAD_BALANCE | TENANT | DEFAULT | DYNAMIC_EFFECTIVE | False | 1 | +-------+----------+----------------+----------+-------------------------------+-----------+-------+----------------------------------------------------------------------------------------+--------------+--------+---------+-------------------+---------------+-----------+ 1 row in set将配置项
enable_database_sharding_none的值修改为True。obclient(root@mysql001)[(none)]> ALTER SYSTEM SET enable_database_sharding_none = True;
开启 Database 下用户表的自动聚合(enable_database_sharding_none 的值为 True)后,后续该租户下创建的所有 Database 默认均会绑定一个 Sharding 属性为 NONE 的表组,且表组名称的格式为:TG_DB_{database_id}。
注意
开启 Database 下用户表的自动聚合后:
- 只对后续创建的 Database 生效,并不会影响之前已经存在的 Database。
- 在创建数据库时,如果默认绑定的表组名与用户自建的表组名冲突,则数据库会创建成功,但不会自动绑定表组,需要用户使用
ALTER DATABASE TABLEGROUP语句自行绑定一个 Sharding 属性为NONE的表组。
例如,假设开启 Database 下用户表的自动聚合后,创建了一个数据库 infotest。
obclient(root@mysql001)[(none)]> CREATE DATABASE infotest;
可以通过视图 DBA_OB_DATABASES(sys 租户下查询视图 CDB_OB_DATABASES),查看该数据库的默认表组。
obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_DATABASES WHERE DATABASE_NAME = 'infotest';
+---------------+---------------+--------------------+-----------+---------+-----------------+
| DATABASE_NAME | IN_RECYCLEBIN | COLLATION | READ_ONLY | COMMENT | TABLEGROUP_NAME |
+---------------+---------------+--------------------+-----------+---------+-----------------+
| infotest | NO | utf8mb4_general_ci | NO | | TG_DB_500004 |
+---------------+---------------+--------------------+-----------+---------+-----------------+
1 row in set
根据查询结果可知,该数据库的默认表组为 TG_DB_500004。其中,500004 为数据库的 ID。
设置多个 Database 下用户表的聚合
用户可以修改多个 Database 的 TABLEGROUP 属性,使其绑定在同一个 Sharding = 'NONE' 的表组下,以实现多个 Database 下用户表的聚合。
操作方法如下:
MySQL 模式租户的租户管理员连接数据库。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A执行以下命令,修改目标 Database 的
TABLEGROUP属性。语句如下:
ALTER DATABASE [database_name] TABLEGROUP [=] tablegroup_name;其中:
database_name:目标 Database 的名称。可选,不显式指定时,表示待修改的 Database 为当前 Database。tablegroup_name:待绑定的 Sharding 属性为NONE的表组名。该语句将会修改目标 Database 下所有表的
TABLEGROUP属性。如果目标 Database 下存在表无法满足表组 Sharding 要求的分布,则语句执行会报错。
示例如下:
obclient(root@mysql001)[infotest]> ALTER DATABASE infotest TABLEGROUP =tg_test;通过视图
DBA_OB_DATABASES(sys租户下查询视图CDB_OB_DATABASES),确认表组是否修改成功。obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_DATABASES WHERE DATABASE_NAME = 'infotest';查询结果如下:
+---------------+---------------+--------------------+-----------+---------+-----------------+ | DATABASE_NAME | IN_RECYCLEBIN | COLLATION | READ_ONLY | COMMENT | TABLEGROUP_NAME | +---------------+---------------+--------------------+-----------+---------+-----------------+ | infotest | NO | utf8mb4_general_ci | NO | | tg_test | +---------------+---------------+--------------------+-----------+---------+-----------------+ 1 row in set重复上述操作,将多个目标 Database 绑定到同一个表组。
后续操作
修改 Database 的 tablegroup 属性后,系统不会立即将所有用户表的分区对齐到同一个日志流。如果用户期望尽快进行用户表的聚合,可以通过调用 DBMS_BALANCE.TRIGGER_PARTITION_BALANCE 子程序,手动触发一次分区均衡。手动触发分区均衡的详细操作,参见 手动触发分区均衡。
或者,用户也可以等待定时分区均衡任务的触发。有关定时分区均衡任务的相关信息,参见 配置定时分区均衡任务。
相关文档
有关用户表聚合的应用案例,参见 表组权重均衡应用案例。