OceanBase v4.2 解读:tenant=all 语义优化,提升易用性

2024-06-07 09:04

本文主要是介绍OceanBase v4.2 解读:tenant=all 语义优化,提升易用性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 背景

1.1 租户类型及特点

OceanBase中有三种类型的租户:

  • sys租户:集群默认创建,生命周期与集群相一致,管理集群和其他租户,具有较高的地位。
  • 用户租户:用户创建的业务租户或普通租户,用于运行用户业务并提供完整的数据库功能。
  • meta租户:与用户租户对应的内部租户,用于存储和管理用户租户的集群私有数据。

可见,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_usertenant=all_meta,分别对应所有用户租户和所有meta租户。理由是兼容原有语义,提供更细粒度的控制,在保证操作安全的前提下尽量方便用户使用。如果用户想使操作对所有用户租户生效,可以使用tenant=all_user,而不必一一列举租户名称;如果用户确实想要使操作对所有租户都生效,可以依次使用tenant=all_usertenant=all_metatenant=sys,详见使用说明。

修改后,tenant=alltenant=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_usertenant=all_meta),且实现上没有新增开销大的操作,因此不会增加额外的运行负担,对数据库性能无影响。

3 使用说明及特性限制

  • 仅支持在sys租户下使用tenant=systenant=all_usertenant=all_meta
  • 对配置项修改语法和合并转储语法,均建议再使用tenant=all
  • 如果只想对sys租户生效,使用tenant=sys;如果只想对所有的用户租户生效,使用tenant=all_user;如果只想对所有的meta租户生效,使用tenant=all_meta
  • 如果确实想对所有的租户生效,则需依次使用tenant=systenant=all_usertenant=all_meta
  • 对于配置项设置语法,tenant后不支持list形式;对于合并转储语法,all_user和all_meta只能单独使用,其它名称可以组合成list形式使用。
  • sys不能大写,因为sys是租户名,是区分大小写的。而all_user和all_meta是关键字,不区分大小写。

# 配置项设置示例
# 以下三句实现原有all语义
alter system set ob_compaction_schedule_interval = '10s' tenant = sys; # sys不能大写
alter system set ob_compaction_schedule_interval = '10s' tenant = all_user;
alter system set ob_compaction_schedule_interval = '10s' tenant = all_meta;# 以下示例不可以,tenant后只能是单个名称,不能是list
obclient> alter system set ob_compaction_schedule_interval = '10s' tenant = mysql,sys;
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 1obclient> alter system set ob_compaction_schedule_interval = '10s' tenant = all_user,all_meta;
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 1obclient> alter system set ob_compaction_schedule_interval = '10s' tenant = mysql,all_user;
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 1obclient> alter system set ob_compaction_schedule_interval = '10s' tenant = mysql,all_meta;
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# 合并转储示例
# 以下三句实现原有all语义
alter system major freeze tenant = sys; # sys不能大写
alter system major freeze tenant = all_user;
alter system major freeze tenant = all_meta;# 以下示例不可以,all_user/all_meta只能单独使用
obclient> alter system major freeze tenant = all_user,all_meta;
ERROR 1235 (0A000): all/all_user/all_meta in combination with other names is not supportedobclient> alter system major freeze tenant = mysql,all_user;
ERROR 1235 (0A000): all/all_user/all_meta in combination with other names is not supportedobclient> alter system major freeze tenant = mysql,all_meta;
ERROR 1235 (0A000): all/all_user/all_meta in combination with other names is not supported# 以下示例是可以的,all_user/all_meta外的名称可以组合使用
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_usertenant=all_meta

# 升级相关命令,不显示指定TENANT,或指定TENANT = ALL,都会对所有租户生效,无风险
ALTER SYSTEM RUN UPGRADE JOB "CMD" [TENANT = ALL|tenant_list];
# 这里TENANT = ALL只包含用户租户,sys租户和meta租户没有对应功能
ALTER SYSTEM ARCHIVELOG|NOARCHIVELOG TENANT = ALL;

这篇关于OceanBase v4.2 解读:tenant=all 语义优化,提升易用性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038737

相关文章

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决