当前位置: 首页 > news >正文

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 中新增配置项,包括配置项的代码实现也会有详细讲解,欢迎大家持续关注。

参考文档

  1. 配置项和系统变量概述
  2. 系统变量总览
  3. OB有问必答 | 参数和变量的区别是什么?
  4. 调整 OceanBase 配置项参数


 

相关文章:

OceanBase 配置项系统变量实现及应用详解(2):系统变量的定义及使用场景

在上一篇博客,配置项的定义及使用方法,详细阐述了配置项的概念及其基本应用方式,这些配置项能够调控集群或租户的行为方式。然而,在实际使用OceanBase的过程中,我们有时仅希望针对当前会话调整某些行为特性&#xff0c…...

本地部署,去除动漫图像背景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等,这些数据结构都可以在整个集群中共享并保证一致性&#xff…...

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” 不能满足条件&#xff0c;使用插槽自定义编辑&#xff1b; 旧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 是微软提供的一项云服务&#xff0c;旨在将 OpenAI 的先进人工智能模型与 Azure 的基础设施和服务相结合。通过 Azure OpenAI&#xff0c;开发者和企业可以访问 OpenAI 的各种模型&#xff0c;如 GPT-3、Codex 和 DALL-E 等&#xff0c;并将其集成到自己…...

MySQL 面试真题(带答案)

MySQL 场景面试题 目录 场景1&#xff1a;用户注册和登录系统 1.1 数据库设计1.2 用户注册1.3 用户登录 场景2&#xff1a;订单管理系统 2.1 数据库设计2.2 创建订单2.3 查询订单 场景3&#xff1a;博客系统 3.1 数据库设计3.2 发布文章3.3 评论功能 场景1&#xff1a;用户…...

《A++ 敏捷开发》- 10 二八原则

团队成员协作&#xff0c;利用项目数据&#xff0c;分析根本原因&#xff0c;制定纠正措施&#xff0c;并立马尝试&#xff0c;判断是否有效&#xff0c;是改善的“基本功”。10-12章会探索里面的注意事项&#xff0c;13章会看两家公司的实施情况和常见问题。 如果已经获得高层…...

Spring Boot 框架知识汇总

1、什么是SpringBoot&#xff1f; 通过Spring Boot&#xff0c;可以轻松地创建独立的&#xff0c;基于生产级别的Spring的应用程序&#xff0c;您可以“运行"它们。大多数Spring Boot应用程序需要最少的Spring配置&#xff0c;集成了大量常用的第三方库配置&#xff0c;使…...

国产麒麟、uos在线编辑word文件并控制编辑区域(局部编辑)

windows系统也适用&#xff0c;该插件可同时支持windows和国产系统 在实际项目开发中&#xff0c;以下场景可能会用到Word局部编辑功能&#xff1a; 合同审批公文流转策划设计报告汇签单招投标&#xff08;标书文件&#xff09;其他&#xff0c;有模板且需要不同人员协作编辑…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...