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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 Python 进行文本挖掘?

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

数据结构之计数排序算法【图文详解】

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:LiUEEEEE                        …

力扣每日一题 6/8

3040.相同分数的最大操作数目 II[中等] 题目: 给你一个整数数组 nums ,如果 nums 至少 包含 2 个元素,你可以执行以下操作中的 任意 一个: 选择 nums 中最前面两个元素并且删除它们。选择 nums 中最后两个元素并且删除它们。选…

通过网址下载静态网页的仿站工具

下载地址:通过网址下载静态网页的仿站工具 超级实用的一款工具

学习笔记——路由网络基础——直连路由(direct)

二、直连路由(direct) 直连路由(direct):直接相连,接口配置好ip地址并up后自动生成的路由。默认优先级为0 Destination:表示路由的目的地址。用来标识IP包的目的地址或目的网络。 Mask:表示目的地址的子网掩码长度。 与目的地址…

MyBatisPlus总结二

MybatisPlus总结一在这: MybatisPlus总结1/2-CSDN博客 六、分页查询: 6.1.介绍: MybatisPlus内置了分页插件,所以我们只需要配置一个分页拦截器就可以了,由于不同的数据库的分页的方式不一样,例如mysql和…

轻松连接远程服务器SecureCRT for Mac/Windows

SecureCRT是一款功能强大的终端仿真器和文件传输工具,专为网络管理员、开发人员和系统工程师设计。它支持SSH、Telnet、RDP和串口等多种协议,提供安全、高效的远程访问和管理体验。SecureCRT具有多窗口/多标签管理、自定义终端仿真、颜色方案优化等高级功…

Linux内核下网卡硬件 MAC 和PHY分析笔记

1 简介 通常CPU自带的以太网接口是MAC控制器,为了实现完整的功能,外围硬件还需要增加一个PHY芯片。 PHY芯片在建立网络连接时负责协商确定网速、全双工 或者 半双工等。在正常通讯时负责在MAC控制器的MII信号 与 网线中的信号之间做转换。 本文的内核代…

最快的开源UDP传输工具:Kcptun

Kcptun:极速网络隧道,让数据传输飞起来!- 精选真开源,释放新价值。 概览 kcptun 是一个轻量级、高性能的TCP/UDP网络加速工具,由xtaci开发并托管在GitHub上。它通过使用kcp协议,为网络数据传输提供了一个快…

[linux] makefilegdb理解

目录 Linux项目自动化构建工具-make/Makefile 背景 理解 依赖关系 依赖方法 原理 Linux调试器-gdb使用 背景 开始使用 Linux项目自动化构建工具-make/Makefile 背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工…

STFT (短时傅立叶变换)

短时傅立叶变换 (STFT) 详细介绍 1. 基本概念 傅立叶变换(Fourier Transform)用于将一个信号从时间域转换到频率域,然而它假设信号是平稳的,这意味着信号的频率成分在整个时间上是不变的。对于非平稳信号,傅立叶变换…

抖音bd-ticket-guard-ree-public-key

上次的文章里说到bd-ticket-guard-ree-public-key是根据rsa生成私钥1跟公钥1里的私钥1通过函数加密得到的。 最近我发现那个加密函数的加密原理是通过私钥1再用不同的rsa算法生成一对小的hex后的私钥2跟公钥2,私钥2比公钥2短,然后bd-ticket-guard-ree-p…

推荐一款AI音乐生成工具和一款浏览器

大家好,今天给大家带来2款软件,一款是移动浏览器,一款是AI音乐生成软件。 Alook Alook是一款移动端浏览器,它以其独特的无广告、无推送、无新闻的"三无"特性,为用户提供了一个清爽的上网环境。Alook不仅界…

构建LangChain应用程序的示例代码:25、LangChain中的FakeListLLM类使用指南

LangChain中的FakeListLLM类使用指南 LangChain提供了一个fake LLM类,可以用于测试。这允许您模拟LLM的调用,并模拟如果LLM以某种方式响应会发生什么。 在这个笔记本中,我们将介绍如何使用它。 我们首先在代理中使用FakeLLM。 from langc…

rust的类型转换和一些智能指针用法(四)

基础类型 使用 as 关键字:用于基本数值类型之间的转换,例如将 i32 转换为 u32。 例子:let x: i32 10; let y: u64 x as u64; 使用标准库中的转换方法:如 from() 和 into() 方法,这些方法通常用于无风险的转换&#…

11本AI人工智能相关电子书推荐(带下载地址)

1. 《生命3.0》 电子书链接:百度网盘 请输入提取码 提取码: vxnw 2. 《千脑智能》 电子书链接: 百度网盘 请输入提取码 提取码: we8u 3. 《AI 3.0》 电子书链接: 百度网盘 请输入提取码 提取码: nwu4 4. 《元宇宙与数字经济》 电子书链接…

【算法小记】深度学习——时间序列数据分析 Time series Data Analysis

在本篇博客中将简单介绍常见的几种循环神经网络和一维卷积神经网络,并使用一些简答的数据进行拟合分析。本文相对适合刚入门的同学,同时也作为自己过去一段时间学习的总结和记录,现在神经网络框架已经非常完善的支持了很多常见和有效的深度学…

【优选算法】BFS解决FloodFill算法

一、经验总结 什么是FloodFill算法? FloodFill算法是一种用于填充连通区域的算法,通常用于图像处理和计算机图形学中。它从给定的起始点开始,向周围相邻的像素进行扩散填充,直到遇到边界或者其他指定条件停止。 FloodFill算法还…

TCP/IP 接收发送缓存大小的自动调优 Auto Tuning

内部机制已实现自动调整缓存大小。参考Tuning the network。 1. net.ipv4.tcp_moderate_rcvbuf 是 Linux 内核的一个参数,用于控制 TCP 接收缓冲区大小的自动调整。 当这个参数被激活时,Linux 内核会根据当前网络条件自动调整 TCP 接收缓冲区的大小,以优化网络性能。它会根…

新买的移动硬盘无法识别

文章目录 背景解决方案 背景 同事新买的移动硬盘,插在电脑上识别不出来盘符,检查了一下,硬盘没问题应该,是ssk的硬盘盒M.2的SSD,硬盘驱动也是正常的,插拔了几次,都不识别,换了太电脑…