租户的变量分为 Global 级别和 Session 级别。

Session 级别的变量继承自 Global 级别的变量。同时,Session 建立后可以设定 Session 级别的变量。Session 级别的变量在 Session 中覆盖 Global 级别的变量。

查询变量

下述展示查询 Session/Global 级别变量语句的语法:

  1. SHOW [GLOBAL] VARIABLES [SHOW_VARIABLES_OPTS]
  2. SHOW_VARIABLES_OPTS:
  3. [LIKE 'pattern' | WHERE expr]

示例:

  1. show variables like 'ob_query_timeout'
  2. show global variables where variable_name like 'ob_query_timeout'

sys 租户可以通过内部表 __all_virtual_sys_variable 查询其他所有普通租户的 Global 变量。

如果连接 sys 租户后再切换到普通租户,此时查询的 Session 级别变量仍然是 sys 租户的 Session 级别的变量。查询的 Global 级别的变量是切换后普通租户的 Global 级别变量。

设置变量

设置 Session 级别的变量仅对当前 Session 有效,对其他 Session无效。设置 Global 级别的变量对当前 Session 无效,需要重新登陆建立新的 Session 才会生效。

下述展示设置 Session/Global 级别变量语句的语法:

  1. SET [GLOBAL] VARIABLE_NAME = 'VALUE'

示例:

  1. set ob_query_timeout = 20000000;
  2. set global ob_query_timeout = 20000000;

变量中类型为 INT , 并且在 SHOW VARIABLE 命令中显示 ON/OFF 或者 True/False 的变量,可以通过如下任意方法设置值:

  1. set @@foreign_key_checks = ON
  2. set @@foreign_key_checks = 1
  3. set @@foreign_key

以上三种方式的 Session 级别变量设置是等效的。

变量参考

变量名类型取值范围默认值说明

SCOPE

autoincrement_cache_sizeint[1, 100000000]1000000自增的缓存个数。GLOBAL
auto_increment_incrementint[1, 65535]1自增步长,仅用于MySQL客户端登录。GLOBAL | SESSION
auto_increment_offsetint[1, 65535]1auto_increment_offset确定AUTO_INCREMENT列值的起点。GLOBAL | SESSION
autocommitint1:自动提交
0:不自动提交

ON

是否自动提交。GLOBAL | SESSION
binlog_row_imageint
  • MINIMAL 或 0
  • NOBLOB 或 1
  • FULL 或 2

可以设置为数字 0、1、2;

也可以设置为字符串

MINIMALNOBLOBFULL

FULL

要记录的控制行单元格,有以下取值:
  • FULL:表示记录所有列。
  • MINIMAL:表示只记录 DML 操作中修改的列,提升主从复制吞吐量,减少 binlog 大小、网络资源和服务器内存占用。
  • NOBLOB:目前暂不支持
GLOBAL | SESSION
collation_connectionvarchar
  • utf8mb4_general_ci
  • utf8mb4_bin
  • utf8mb4_unicode_ci
  • gbk_bin
  • gbk_chinese_ci
  • utf16_general_ci
  • utf16_bin
  • utf16_unicode_ci
  • binary
utf8mb4_general_ci连接校验规则。GLOBAL | SESSION
collation_servervarchar
  • utf8mb4_bin
  • gbk_bin
  • utf16_bin
utf8mb4_general_ci该变量在 MySQL 模式下不起作用,只在 Oracle 模式下起作用,表示Oracle 租户的服务器端校验规则。GLOBAL | SESSION 
connect_timeoutint[2, 31536000]10连接超时时间,单位是微秒。GLOBAL | SESSION 
datadirvarchar

有效的磁盘路径

/usr/local/mysql/data/数据存储的本地磁盘路径。GLOBAL | SESSION 
div_precision_incrementint[0, 30]4除法结果精度在被除数精度基础上的增量。MySQL 兼容功能。GLOBAL | SESSION
error_on_overlap_timeint

TRUE:做报错处理;

FALSE:不做报错处理

FALSE动态参数,设置夏令时重叠区时间发生歧义时是否作报错处理。GLOBAL | SESSION 

explicit_defaults_for_timestamp

int
  • 0:不启用
  • 1:启用

1

指定 timestamp 数据类型在处理默认值和空值时是否启用非标准行为。READONLY | GLOBAL
foreign_key_checksint
  • 0:不检查外键约束
  • 1:检查外键约束
0是否检查外建约束。GLOBAL | SESSION
group_concat_max_lenint64[4,

1048576]

1024允许的GROUP_CONCAT() 函数结果的最大长度。单位是字节GLOBAL | SESSION 
identityint64[0, 18446744073709551615]0和变量 last_insert_id 是同义词。可以通过select @@identity 查询。SESSION
init_connectvarchar-

服务器为每个连接的客户端执行的字符串,该字符串由一条或多条 SQL 语句组成,用分号分隔。GLOBAL | SESSION
interactive_timeoutint[1, 31536000]28800服务器关闭交互式连接前等待活动的秒数。
交互式客户端定义为在mysql_real_connect()中使用 CLIENT_INTERACTIVE 选项的客户端。
GLOBAL | SESSION
is_result_accurateint
  • 0:不正确
  • 1:正确
1当查询带有 topk 提示时,is_result_accurate 表示结果是否正确。SESSION
last_insert_idnit[0, 18446744073709551615]0返回本 Session 最后一次插入的自增字段值。SESSION
licensevarchar-license 的类型。GLOBAL | SESSION
lower_case_table_namesint
  • 2:存储采用建表/建库名的大小写,比较时采用小写转化比较,不敏感。
  • 1:大小写不敏感
  • 0:大小写敏感

2

是否大小写敏感。仅在MySQL 模式下对database 和 table 对象名生效。GLOBAL | SESSION | READONLY
max_allowed_packetint[1024, 1073741824]

4194304

最大网络包大小,单位是 Byte。GLOBAL | SESSION | SESSION_READONLY
max_sp_recursion_depthint[0, 255]0可以递归调用任何给定存储过程的次数。GLOBAL | SESSION
max_user_connectionsint64[0, 4294967295]0指定允许同时连接的最大用户数,设置为 0 时表示不限制。GLOBAL | SESSION
net_buffer_lengthint[1024, 1048576]16384TCP/IP 和 socket 通信的缓存区长度。GLOBAL | SESSION | SESSION_READONLY
net_read_timeoutint[1, 31536000]30中断读之前等待连接的其它数据的秒数。当服务器从客户端读数时,net_read_timeout 指控制何时中断的超时值;当服务器向客户端写时,net_write_timeout 指控制何时中断的超时值。GLOBAL | SESSION
net_write_timeoutint[1, 31536000]60中断写之前等待块写入连接的秒数。当服务器从客户端读数时,net_read_timeout 指控制何时中断的超时值;当服务器向客户端写时,net_write_timeout指控制何时中断的超时值。GLOBAL | SESSION
ob_compatibility_modeenum
  • MYSQL
  • ORACLE
MYSQL表示该租户的兼容模式,MYSQL 表示兼容MYSQL,ORACLE 表示兼容 Oracle。该系统变量仅支持在创建租户时指定,租户创建后则无法修改。TENANT | READONLY
ob_create_table_strict_mode

int

  • ON  
  • OFF

ON

动态变量,默认为 ON。如果设置为 ON,会严格按照 Locality 建立副本,任何副本建立失败,则 create table 失败;否则,全类型副本至少 1 个,Paxos 成员组副本达到多数,即可成功。GLOBAL | SESSION
ob_default_replica_numint[1, )1每个集群中表的默认副本数。GLOBAL | SESSION
ob_early_lock_releaseint
  • 0:不开启
  • 1:开启
0事务是否开启 ELR 优化。GLOBAL
ob_enable_aggregation_pushdown

int

  • 0:不允许
  • 1:允许
1是否允许聚合操作下压。GLOBAL | SESSION
ob_enable_blk_nestedloop_joinint
  • 0:不允许
  • 1:允许
0是否允许打开 block nested loop join。GLOBAL | SESSION
ob_enable_hash_group_byint
  • 0:不允许
  • 1:允许
1是否打开 Hash Group by 的路径。GLOBAL | SESSION
ob_enable_index_direct_select

int

  • 0:不允许
  • 1:允许
0是否允许用户直接查询索引表。GLOBAL | SESSION 
ob_enable_jitint
  • OFF:当前 Session 不开启表达式编译执行
  • AUTO:当前 Session 表达式编译执行只有在 SQL 执行平均 RT 大于 1s 时才开启
  • FORCE:当前 Session 强制开启表达式编译执行功能
OFF

JIT 执行引擎模式。

可以设置的值如下:

  • OFF 或 0
  • AUTO 或 1
  • FORCE 或 2


GLOBAL | SESSION
ob_enable_plan_cacheint
  • 0:关闭
  • 1:打开
1是否打开 Plan Cache。GLOBAL | SESSION
ob_enable_sql_auditint
  • ture:开启
  • false:关闭
TRUE控制当前租户是否开启 SQL  Audit 功能。GLOBAL
ob_enable_trace_logint
  • 0:不使用
  • 1:使用
0是否使用 trace 日志。                                                                                  GLOBAL | SESSION 
ob_enable_transformation

int

  • 0:不允许
  • 1:允许
1是否允许 SQL 重写。GLOBAL | SESSION 
ob_enable_transmission_checksumint
  • 0:不进行校验和
  • 1:进行校验和
1Proxy 和 Server 之间是否进行数据包校验和,实时生效. GLOBAL | SESSION
ob_enable_truncate_flashbackint
  • 0:不启用
  • 1:启用
1是否启用表截断的闪回。GLOBAL | SESSION
ob_last_schema_versionint[0, 9223372036854775807]0该 Session 中最新使用的 Schema 版本号,当 Proxy 的同一个连接对应到多个 Server 中时,需要使用该系统变量进行 Schema 同步,因此该变量只在 Session 级别生效。SESSION
ob_org_cluster_idint[0, 4294967295]0通常情况下不需要设置该变量,OceanBase 数据库生成日志(clog)时会使用缺省值(即每个 OceanBase 集群的CLUSTER_ID)。DRC 在复制数据写入目标集群时,需要在 Session 中设置这个变量为日志中所带的 CLUSTER_ID,以避免数据被循环复制。SESSION
ob_plan_cache_evict_high_percentageint[0, 100]90触发计划缓存逐出的计划缓存限制的内存使用百分比。GLOBAL 
ob_plan_cache_evict_low_percentageint[0, 100]50停止计划缓存逐出的计划缓存限制的内存使用百分比。GLOBAL
ob_plan_cache_percentageint[0, 100]5计划缓存可以使用的租户内存资源的百分比。GLOBAL
ob_query_timeoutint[0, 9223372036854775807]10000000查询超时时间,单位是微秒。GLOBAL | SESSION 
ob_read_consistencyint
  • 0:NONE
  • 1:FROZEN
  • 2:WEAK
  • 3:STRONG
3读一致性级别。GLOBAL | SESSION 
ob_route_policyint
  • 1:READONLY_ZONE_FIRST
  • 2:ONLY_READONLY_ZONE
  • 3:UNMERGE_ZONE_FIRST
  • 4:UNMERGE_FOLLOWER_FIRST
1Obproxy/Java 客户端与 OBServer 内部重试的路由策略。GLOBAL | SESSION
ob_sql_audit_percentageint[0, 100]

3

SQL Audit 内存上限占当前租户内存的百分比。GLOBAL
ob_sql_work_area_percentageint[0, 100]5用于 SQL 执行的租户内存百分比限制。GLOBAL
ob_stmt_parallel_degreeint[1, 10240]1查询的并行度,表示可以并行运行的任务数。GLOBAL | SESSION
ob_tcp_invited_nodesvarchar-127.0.0.1租户的 IP 白名单,支持 %、 和 IP(用逗号分隔),支持 IP 列表匹配、掩码匹配或模糊匹配。GLOBAL
ob_timestamp_serviceint
  • 0:使用本地时间戳
  • 1:使用全局时间戳
1指定使用何种时间戳服务。GLOBAL
ob_trx_idle_timeoutint[1, 9223372036854775807]120000000事务空闲超时时间,即事务中两条语句之间的执行间隔超过该值时超时,单位是微秒。GLOBAL | SESSION 
ob_trx_timeoutint[1, 9223372036854775807]100000000事务超时时间,单位是微秒。GLOBAL | SESSION
optimizer_capture_sql_plan_baselinesint
  • 0:关闭
  • 1:开启

OFF

是否使能自动捕获 SQL 计划基线。GLOBAL | SESSION
optimizer_use_sql_plan_baselinesint
  • 0:关闭
  • 1:开启

0

是否使能使用 SQL 计划基线。GLOBAL | SESSION
parallel_max_serversint[0, 1800]租户 CPU 数 每个 CPU 启动的线程数 0.3设置每个 Server 上 PX(Parallel eXecution,并行执行)线程池的大小。GLOBAL
parallel_servers_targetint[0, 3600]租户 CPU 数 每个 CPU 启动的线程数 0.3设置每个 Server 上的大查询排队条件。当 PX(Parallel eXecution,并行执行)线程池中有指定的空闲线程数时才调度新查询。GLOBAL
plugin_dirvarchar-./plugin_dir/存放插件 DLL 的路径。GLOBAL | SESSION
query_cache_sizeint64[0, 18446744073709551615]1048576分配给存储旧查询结果的内存(尚未使用的),单位是 Byte。GLOBAL | SESSION
query_cache_typeint
  • OFF:不缓存或检索结果
  • ON:缓存除了SELECT SQL_NO_CACHE …查询的其他所有结果
  • DEMAND:只缓存SELECT SQL_CACHE …查询的结果
OFF查询缓存类型。GLOBAL | SESSION
read_onlyint
  • 1:租户为只读模式
  • 0:租户为读写模式
0租户是否为只读模式。影响该租户下的所有普通用户,不影响 root 权限用户。GLOBAL
recyclebinint
  • 0:不开启
  • 1:开启
1是否开启回收站功能。启用回收站后,删除的表及其依赖对象将放置在回收站中;当禁用回收站时,删除的表及其依赖对象不会放置在回收站中,会直接删除。GLOBAL | SESSION
sql_modevarchar
  • STRICT_ALL_TABLES
  • STRICT_TRANS_TABLES
  • ONLY_FULL_GROUP_BY
  • PAD_CHAR_TO_FULL_LENGTH
STRICT_ALL_TABLES不同 SQL 模式对于插入等行为有很大影响,具体的可以参考 MySQL 的说明。GLOBAL | SESSION
sql_quote_show_createint
  • ON:启用
  • OFF:不启用
ON是否启动为 SHOW CREATE TABLESHOW CREATE DATABASE 语句引用标识符。GLOBAL | SESSION
sql_select_limitint[0, 9223372036854775807]9223372036854775807一个 select 查询允许返回的最大行数,如果一个 select 中包含了 limit 语句,那么 limit 的值比 sql_select_limit 的优先级高,默认是不限制 select 返回的行数GLOBAL | SESSION
sql_throttle_rtint[-1, +∞)-1指定rt值,单位是微秒,如果查询的 rt 值不小于该值,则不允许执行该查询。GLOBAL
sql_warnings

int

  • ON:生成信息字符串
  • OFF:不生成信息字符串
OFF出现告警时单行 INSERT 语句是否生成信息字符串。GLOBAL | SESSION
system_time_zonevarchar-CST服务器机器系统时区。GLOBAL | READONLY
time_zonevarchar-+8:00当前租户会话使用的时区,支持‘+08:00’的 offset 形式,和Asia/Shanghai 的地域形式取值。GLOBAL | SESSION
timestampnumeric[0, 253402272000)0时间戳,单位是秒,该变量影响 select now(6)的结果。GLOBAL | SESSION
tx_isolationvarchar
  • READ-UNCOMMITTED
  • READ-COMMITTED
  • REPEATABLE-READ
  • SERIALIZABLE
READ-COMMITTED

事务隔离级别。

OceanBase 数据库未兼容 MySQL 的 repeatable read 和 serializable 功能,当用户设置这两个隔离级别时,语法不报错,其行为等同于 Oracle 模式下的 serializable 隔离级别。

GLOBAL | SESSION 
tx_read_onlyint
  • 1:事务为只读模式
  • 0:事务不是只读模式
0事务是否为只读模式。影响该用户,不影响其他用户。GLOBAL | SESSION
undo_retentionint[0, 2^32-1]0指定多版本数据保留时间,单位是秒。GLOBAL
versionvarchar-5.6.25服务器的版本号。GLOBAL | SESSION
version_commentvarchar-OceanBase 1.0.0OBServer 的版本信息。READONLY | GLOBAL
wait_timeoutint[1, 31536000]28800服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局 wait_timeout 值或全局 interactive_timeout 的值初始化会话 wait_timeout 值,该值取决于客户端类型(mysql_real_connect() 的连接选项CLIENT_INTERACTIVE 定义)。GLOBAL | SESSION