做平面设计都关注哪些网站,wordpress自定义评论样式,wordpress 一键置顶,施工企业负责人带班检查计划在上一篇博客#xff0c;配置项的定义及使用方法#xff0c;详细阐述了配置项的概念及其基本应用方式#xff0c;这些配置项能够调控集群或租户的行为方式。然而#xff0c;在实际使用OceanBase的过程中#xff0c;我们有时仅希望针对当前会话调整某些行为特性#xff0c…在上一篇博客配置项的定义及使用方法详细阐述了配置项的概念及其基本应用方式这些配置项能够调控集群或租户的行为方式。然而在实际使用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 xxxxx命令进行修改。注意不要修改相关内部表或视图因为这样做并不能真正地修改变量的值还会带来一些潜在的问题。
修改当前租户的 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 xxxxx; 通过 SQL 语句修改 alter system set xxxxx; 通过持久化配置文件修改不推荐仅支持通过 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;
小结
本期博客介绍了系统变量的概念和用法并与配置项进行了对比至此就可以很容易地区分配置项和系统变量了。系统变量更加灵活它可以控制当前会话的各种行为并且不影响其他会话跟配置项结合使用可以起到 112 的效果。
看到这里不知道有没有同学已经跃跃欲试也想尝试自己定义一个配置项或系统变量呢在下一期博客中将会介绍如何在 OceanBase 中新增配置项包括配置项的代码实现也会有详细讲解欢迎大家持续关注。
参考文档
配置项和系统变量概述系统变量总览OB有问必答 | 参数和变量的区别是什么调整 OceanBase 配置项参数