ToB企服应用市场:ToB评测及商务社交产业平台

标题: OceanBase v4.2 解读:tenant=all 语义优化,提拔易用性 [打印本页]

作者: 鼠扑    时间: 2024-6-21 13:21
标题: OceanBase v4.2 解读:tenant=all 语义优化,提拔易用性
1 配景

1.1 租户类型及特点

OceanBase中有三种类型的租户:

可见,sys租户和meta租户都具有“角色关键,但不跑业务”的特点,因此,用户在运维中也往往不会刻意关注这些租户,而是将重点放在用户租户上。
1.2 tenant=all 的已知题目

目前,租户级配置项修改下令支持tenant=all语法,即alter system set xxx=yyy tenant=all,语义是对全部租户,包括sys、meta租户,都见效。这种设计存在两个题目。
一是易用性题目,即可能使用户做出不符合自己意愿的误操纵。当用户使用tenant=all时,可能仅仅是想对全部用户租户见效,也没有清楚而深刻地认识到“我这个动作,已经顺带把sys租户和meta租户的配置项一起改了,这可能会有题目,我需要特别把稳这一点”。
二是稳固性题目,即可能会引发observer故障。如果有些配置项对sys租户很紧张,不可轻易修改,那么,一旦这些配置项被tenant=all“顺带”修改了,就可能引发ObServer的故障,并增加题目排查的难度。
以cpu_quota_concurrency为例说明,sys租户默认配置成10,别的租户默认值为4,如果用户执行了alter system set cpu_quota_concurrency=5 tenant=all;,可能导致sys租户出现题目。而用户很可能仅仅是想改跑业务的用户租户的配置项,sys、meta被连带修改,非用户本意。
1.3 解决方案

变更tenant=all的语义,彻底杜绝用户误操纵的风险,同时新增语法兼容旧语义,详见下文变更细节。

2 tenant=all语义变更

2.1 变更细节

起首,修改tenant=all语义,改为“仅包括全部用户租户,排除sys和meta租户”,以彻底杜绝用户误操纵风险,提拔产物稳固性。
除了配置项修改语法,别的使用tenant=all的语法,如归并转储相关语法,也要一起修改,为了保持产物行为同一,制止用户疑惑。
其次,新增语法,tenant=all_user,tenant=all_meta,分别对应全部用户租户和全部meta租户。理由是兼容原有语义,提供更细粒度的控制,在保证操纵安全的条件下尽量方便用户使用。如果用户想使操纵对全部用户租户见效,可以使用tenant=all_user,而不必一一列举租户名称;如果用户确实想要使操纵对全部租户都见效,可以依次使用tenant=all_user,tenant=all_meta,tenant=sys,详见使用说明。
修改后,tenant=all和tenant=all_user的语义完全相同,背面会在适其时机废弃tenant=all。
2.2 影响到的模块和下令

模块下令
配置项修改alter system set xxx=yyy tenant=all
归并转储alter system {major|minor} freeze tenant=allalter system {suspend|resume} merge tenant=allalter system clear merge error tenant=all
2.3 性能影响

无影响。本特性只是缩小了tenant=all的见效范围,同时新增了两个与tenant=all雷同的下令,即(tanant=all_user和tenant=all_meta),且实现上没有新增开销大的操纵,因此不会增加额外的运行负担,对数据库性能无影响。
3 使用说明及特性限定



  1. # 配置项设置示例
  2. # 以下三句实现原有all语义
  3. alter system set ob_compaction_schedule_interval = '10s' tenant = sys; # sys不能大写
  4. alter system set ob_compaction_schedule_interval = '10s' tenant = all_user;
  5. alter system set ob_compaction_schedule_interval = '10s' tenant = all_meta;
  6. # 以下示例不可以,tenant后只能是单个名称,不能是list
  7. obclient> alter system set ob_compaction_schedule_interval = '10s' tenant = mysql,sys;
  8. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'sys' at line 1
  9. obclient> alter system set ob_compaction_schedule_interval = '10s' tenant = all_user,all_meta;
  10. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'all_meta' at line 1
  11. obclient> alter system set ob_compaction_schedule_interval = '10s' tenant = mysql,all_user;
  12. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'all_user' at line 1
  13. obclient> alter system set ob_compaction_schedule_interval = '10s' tenant = mysql,all_meta;
  14. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'all_meta' at line 1
  15. # 合并转储示例
  16. # 以下三句实现原有all语义
  17. alter system major freeze tenant = sys; # sys不能大写
  18. alter system major freeze tenant = all_user;
  19. alter system major freeze tenant = all_meta;
  20. # 以下示例不可以,all_user/all_meta只能单独使用
  21. obclient> alter system major freeze tenant = all_user,all_meta;
  22. ERROR 1235 (0A000): all/all_user/all_meta in combination with other names is not supported
  23. obclient> alter system major freeze tenant = mysql,all_user;
  24. ERROR 1235 (0A000): all/all_user/all_meta in combination with other names is not supported
  25. obclient> alter system major freeze tenant = mysql,all_meta;
  26. ERROR 1235 (0A000): all/all_user/all_meta in combination with other names is not supported
  27. # 以下示例是可以的,all_user/all_meta外的名称可以组合使用
  28. alter system major freeze tenant = tt1,sys;
复制代码
在使用该特性的过程中,存在一些限定。
第一,不能再创建名为all_user或者all_meta(不区分大小写)的租户,因为all_user和all_meta变成保留字了。
第二,低版本升级4.2.1版本前,需要先查抄集群中是否有名为all_user或者all_meta(不区分大小写)的租户,如有,需要先重命名租户再升级。
第三,因为没有现实风险,故以下语法中tenant=all语义暂未变更,且暂无计划在将来版本做变更,会维持原有语义稳定,且不支持tenant=all_user或tenant=all_meta。
  1. # 升级相关命令,不显示指定TENANT,或指定TENANT = ALL,都会对所有租户生效,无风险
  2. ALTER SYSTEM RUN UPGRADE JOB "CMD" [TENANT = ALL|tenant_list];
  3. # 这里TENANT = ALL只包含用户租户,sys租户和meta租户没有对应功能
  4. ALTER SYSTEM ARCHIVELOG|NOARCHIVELOG TENANT = ALL;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4