OceanBase 配置项系统变量实现及应用详解(2):系统变量的定义及使用场景
在上一篇博客,配置项的定义及使用方法,详细阐述了配置项的概念及其基本应用方式,这些配置项能够调控集群或租户的行为方式。然而,在实际使用OceanBase的过程中,我们有时仅希望针对当前会话调整某些行为特性,且在关闭会话连接后,这些调整不会影响后续的使用。此时,我们就需要借助“系统变量”来实现这一目标。
系统变量和配置项有一些相似之处,但是生效范围和实现方式却有所差异。本期博客将会介绍“系统变量”的概念和用法,帮助大家理解和使用“系统变量”。
什么是系统变量?
变量(variable)的概念来源于 MySQL,在 OceanBase 中,为了与编程语言中的“变量”概念区分开,将这类控制数据库行为的变量称作“系统变量”。
在与数据库建立会话(session)连接后,可以通过修改一些变量来控制租户的行为和SQL命令的执行方式,这些变量就是“系统变量”。
系统变量示例:
// 是否自动提交事务
autocommit = false
// 查询超时时间,单位:微秒(us)
ob_query_timeout = 10000000
// 是否记录历史sql命令
ob_enable_sql_audit = true
系统变量分为全局(global)级别和会话(session)级别,global级别也可以视作租户级别,仅在当前租户范围内生效;session级别仅在当前会话中生效,session级别变量优先级高于global级别变量。
全局级别的系统变量(global变量),在修改之后不会立即生效,但之后新建的会话都会使用该变量的新值;会话级别的系统变量(session变量),在修改会立即生效,但之后新建的会话都会使用该变量的旧值。可以理解为global变量直接写到磁盘,而session变量只写到缓存且不持久化。
global变量会利用schema机制进行持久化(以内部表的形式存储),而不是像配置项一样直接写到文件;session变量不会持久化,无论是断开连接还是重启observer,都会导致session变量失效。
查询系统变量
系统变量可以通过“show variables”命令查询,也可以通过内部表或视图进行查询。
通过“show variables”命令查询系统变量
- 查询当前租户的 global 变量
show global variables like '%xxx%';
select @@global.xxx;
- 查询当前会话的 session 变量
show variables like '%xxx%';
select @@xxx;
select @@session.xxx;
通过内部表和视图查询系统变量
global变量和session变量存在于不同的表中,通过执行“select * from xxx; ”命令即可查询所有系统变量,增加where参数也可查找指定变量。
- __all_sys_variable
当前租户的global级别变量。
- __all_virtual_sys_variable
所有租户的global级别变量,基于 __all_sys_variable 进行查询。
- __tenant_virtual_global_variable
当前租户的global级别变量,“show global variables”命令查询的虚拟表。
- __tenant_virtual_session_variable
当前租户的session级别变量,“show variables”命令查询的虚拟表。
- CDB_OB_SYS_VARIABLES
所有租户的global级别变量,即 __all_virtual_sys_variable 的视图。
- INFORMATION_SCHEMA.GLOBAL_VARIABLES
当前租户的global级别变量,基于 __tenant_virtual_global_variable 进行查询。
- INFORMATION_SCHEMA.SESSION_VARIABLES
当前租户的session级别变量,查询结果比 __tenant_virtual_session_variable 更加全面。
修改系统变量
系统变量可以通过"set xxx=xx"命令进行修改。注意不要修改相关内部表或视图,因为这样做并不能真正地修改变量的值,还会带来一些潜在的问题。
- 修改当前租户的 global 变量
set global ob_max_read_stale_time = 5000000;
set @@global.ob_max_read_stale_time = 5000000;
- 修改当前会话的 session 变量
set ob_max_read_stale_time = 5000000;
set @@ob_max_read_stale_time = 5000000;
set @@session.ob_max_read_stale_time = 5000000;
配置项对比系统变量
集群配置项和租户配置项的行为是类似的,这里合并在一列中进行说明,global变量和session变量的行为差异较大,所以分开说明。
| 对比项 | 系统配置项 | 系统变量(global级别) | 系统变量(session级别) |
| 生效范围 | 分为集群级和租户级 | 租户 | 当前session |
| 生效方式 | 动态生效:edit_level 为 dynamic_effective 重启生效:edit_level 为 static_effective | 设置 global 级别的变量对当前 session 无效,需要建立新的 session 才会生效。 | 设置 session 级别的变量仅对当前 Session 有效,对其他 session 无效。 |
| 修改方式 | 通过启动参数修改: ./bin/observer -o xxx='xx'; 通过 SQL 语句修改: alter system set xxx='xx'; 通过持久化配置文件修改(不推荐) | 仅支持通过 SQL 语句修改,示例如下: set global xxx = xx; | 仅支持通过 SQL 语句修改,示例如下: set xxx = xx; |
| 持久化 | 持久化到内部表与配置文件,可以在 {install_path}/etc/observer.config.bin 与 {install_path}/etc/observer.config.bin.history 文件中找到配置项。 | 利用schema的机制持久化 | 不会持久化 |
| 生命周期 | 与observer进程生命周期相同 | 与租户生命周期相同 | 与session生命周期相同 |
| 查询方式 | 使用 show parameters 语句查询: show parameters like '%xxx%'; | 使用 show global variables 命令查询: show global variables like 'xxx'; 查询视图: select * from information_schema.global_variables where variable_name = 'xxx'; | 使用 show variables 命令查询: show variables like 'xxx'; 查询视图: select * from information_schema.session_variables where variable_name = 'xxx'; |
小结
本期博客介绍了系统变量的概念和用法,并与配置项进行了对比,至此就可以很容易地区分配置项和系统变量了。系统变量更加灵活,它可以控制当前会话的各种行为,并且不影响其他会话,跟配置项结合使用可以起到 1+1>2 的效果。
看到这里,不知道有没有同学已经跃跃欲试,也想尝试自己定义一个配置项或系统变量呢?在下一期博客中,将会介绍如何在 OceanBase 中新增配置项,包括配置项的代码实现也会有详细讲解,欢迎大家持续关注。
参考文档
- 配置项和系统变量概述
- 系统变量总览
- OB有问必答 | 参数和变量的区别是什么?
- 调整 OceanBase 配置项参数
相关文章:
OceanBase 配置项系统变量实现及应用详解(2):系统变量的定义及使用场景
在上一篇博客,配置项的定义及使用方法,详细阐述了配置项的概念及其基本应用方式,这些配置项能够调控集群或租户的行为方式。然而,在实际使用OceanBase的过程中,我们有时仅希望针对当前会话调整某些行为特性,…...
本地部署,去除动漫图像背景Anime Remove Background
目录 摘要 引言 深度学习在动漫角色中的应用 1.U-Net 2.Mask R-CNN 3.ISNet 模型 4.MODNet 模型 5.InSPyReNet 模型 本地部署 运行效果 测验结果 Tip: 摘要 动漫图像背景去除是一项在图像处理和计算机视觉领域具有重要应用的技术,广泛应用于…...
wireshark与tcpdump使用
wireshark 协议层过滤指令ipip.addr 1.1.1.1ip.src 1.1.1.1ip.dst 1.1.1.1tcptcp.port 80tcp.srcport 80tcp.dstport 80tcp.len > 0tcp.flags.fin 1...
【密码学】密码学中的四种攻击方式和两种攻击手段
在密码学中,攻击方式通常指的是密码分析者试图破解加密信息或绕过安全机制的各种策略。根据密码分析者对明文、密文以及加密算法的知识程度,攻击可以分为以下四种基本类型: 一、四种攻击的定义 (1)唯密文攻击(COA, C…...
网络层的角色与重要性:互联网通信的关键
本章讨论网络层及网络互连问题,也就是讨论多个网络通过路由器互连成为一个互连网络的各种问题。在介绍网络层提供的两种不同服务后,我们开始讲解本章的核心内容——网际协议(IP),这是本书的一项重点内容。只有较深入地…...
Transformer模型:WordEmbedding实现
前言 最近在学Transformer,学了理论的部分之后就开始学代码的实现,这里是跟着b站的up主的视频记的笔记,视频链接:19、Transformer模型Encoder原理精讲及其PyTorch逐行实现_哔哩哔哩_bilibili 正文 首先导入所需要的包:…...
如何压缩pdf文件大小,怎么压缩pdf文件大小
在数字化时代,pdf文件因其稳定的格式和跨平台兼容性,成为了工作与学习中不可或缺的一部分。然而,随着pdf文件内容的丰富,pdf文件的体积也随之增大,给传输和存储带来了不少挑战。本文将深入探讨如何高效压缩pdf文件大小…...
Spring Boot集成Atomix快速入门Demo
1.什么是Atomix? Atomix是一个能用的Java框架,用来构建高可用的分布式系统。它是基于RAFT协议的实现,为用户提供了各种原子数据结构,比如map/set/integer等,这些数据结构都可以在整个集群中共享并保证一致性ÿ…...
Go语言map并发安全,互斥锁和读写锁谁更优?
并发编程是 Go 语言的一大特色,合理地使用锁对于保证数据一致性和提高程序性能至关重要。 在处理并发控制时,sync.Mutex(互斥锁)和 sync.RWMutex(读写锁)是两个常用的工具。理解它们各自的优劣及擅长的场景…...
Java多线程性能调优
Synchronized同步锁优化方法 1.6之前比较重量级,1.6后经过优化性能大大提升 使用Synchronized实现同步锁住要是两种方式:方法、代码块。 1.代码块 Synchronized在修饰同步代码块时,是由 monitorenter和monitorexit指令来实现同步的。进入mo…...
MacOS 通过Docker安装宝塔面板搭建PHP开发环境
1、docker拉取ubuntu系统 docker pull ubuntu2、运行容器 docker run -i -t -d --name bt -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 8888:8888 -p 3306:3306 -p 6379:6379 --privilegedtrue -v /Users/oi/Sites:/www/wwwroot ubuntu-v 后的 /Users/oi/Sites 代表…...
Unity发布webgl之后修改StreamingAssets 内的配置文件读取到的还是之前的配置文件的解决方案
问题描述 unity发布webgl之后,修改在StreamingAssets 中的配置信息,修改之后读取的还是之前的配置信息 读取配置文件的代码IEnumerator IE_WebGL_LoadWebSocketServerCopnfig(){var uri new System.Uri(Path.Combine(Application.streamingAssetsPath…...
离线语音识别芯片在智能生活中的应用
离线语音识别芯片,这一技术正逐渐渗透到我们日常生活的每一个角落,为众多产品带来前所未有的智能体验。它能够应用到多种产品中,包括但不限于: 1、智能音箱:语音识别芯片作为智能音箱的核心,使用户…...
替换:show-overflow-tooltip=“true“ ,使用插槽tooltip,达到内容可复制
原生的show-overflow-tooltip“true” 不能满足条件,使用插槽自定义编辑; 旧code <el-table-column prop"reason" label"原因" align"center" :show-overflow-tooltip"true" /> <el-table-column pro…...
219.贪心算法:柠檬水找零(力扣)
代码解决 class Solution { public:bool lemonadeChange(vector<int>& bills) {int num50, num100; // 初始化5美元和10美元的计数器for(int i0; i < bills.size(); i) // 遍历所有账单{if(bills[i]5) // 如果账单是5美元{num5; // 增加5美元的计数continue; // …...
通过 Azure OpenAI 服务使用 GPT-35-Turbo and GPT-4(win版)
官方文档 Azure OpenAI 是微软提供的一项云服务,旨在将 OpenAI 的先进人工智能模型与 Azure 的基础设施和服务相结合。通过 Azure OpenAI,开发者和企业可以访问 OpenAI 的各种模型,如 GPT-3、Codex 和 DALL-E 等,并将其集成到自己…...
MySQL 面试真题(带答案)
MySQL 场景面试题 目录 场景1:用户注册和登录系统 1.1 数据库设计1.2 用户注册1.3 用户登录 场景2:订单管理系统 2.1 数据库设计2.2 创建订单2.3 查询订单 场景3:博客系统 3.1 数据库设计3.2 发布文章3.3 评论功能 场景1:用户…...
《A++ 敏捷开发》- 10 二八原则
团队成员协作,利用项目数据,分析根本原因,制定纠正措施,并立马尝试,判断是否有效,是改善的“基本功”。10-12章会探索里面的注意事项,13章会看两家公司的实施情况和常见问题。 如果已经获得高层…...
Spring Boot 框架知识汇总
1、什么是SpringBoot? 通过Spring Boot,可以轻松地创建独立的,基于生产级别的Spring的应用程序,您可以“运行"它们。大多数Spring Boot应用程序需要最少的Spring配置,集成了大量常用的第三方库配置,使…...
国产麒麟、uos在线编辑word文件并控制编辑区域(局部编辑)
windows系统也适用,该插件可同时支持windows和国产系统 在实际项目开发中,以下场景可能会用到Word局部编辑功能: 合同审批公文流转策划设计报告汇签单招投标(标书文件)其他,有模板且需要不同人员协作编辑…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
