租户的变量分为 Global 级别和 Session 级别。
Session 级别的变量继承自 Global 级别的变量。同时,Session 建立后可以设定 Session 级别的变量。Session 级别的变量在 Session 中覆盖 Global 级别的变量。
查询变量
下述展示查询 Session/Global 级别变量语句的语法:
SHOW [GLOBAL] VARIABLES [SHOW_VARIABLES_OPTS]
SHOW_VARIABLES_OPTS:
[LIKE 'pattern' | WHERE expr]
示例:
show variables like 'ob_query_timeout'
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 级别变量语句的语法:
SET [GLOBAL] VARIABLE_NAME = 'VALUE'
示例:
set ob_query_timeout = 20000000;
set global ob_query_timeout = 20000000;
变量中类型为 INT
, 并且在 SHOW VARIABLE
命令中显示 ON/OFF
或者 True/False
的变量,可以通过如下任意方法设置值:
set @@foreign_key_checks = ON
set @@foreign_key_checks = 1
set @@foreign_key
以上三种方式的 Session 级别变量设置是等效的。
变量参考
变量名 | 类型 | 取值范围 | 默认值 | 说明 | SCOPE |
autoincrement_cache_size | int | [1, 100000000] | 1000000 | 自增的缓存个数。 | GLOBAL |
auto_increment_increment | int | [1, 65535] | 1 | 自增步长,仅用于MySQL客户端登录。 | GLOBAL | SESSION |
auto_increment_offset | int | [1, 65535] | 1 | auto_increment_offset确定AUTO_INCREMENT列值的起点。 | GLOBAL | SESSION |
autocommit | int | 1:自动提交 0:不自动提交 | ON | 是否自动提交。 | GLOBAL | SESSION |
binlog_row_image | int |
可以设置为数字 0、1、2; 也可以设置为字符串 MINIMAL、NOBLOB、FULL | FULL | 要记录的控制行单元格,有以下取值:
| GLOBAL | SESSION |
collation_connection | varchar |
| utf8mb4_general_ci | 连接校验规则。 | GLOBAL | SESSION |
collation_server | varchar |
| utf8mb4_general_ci | 该变量在 MySQL 模式下不起作用,只在 Oracle 模式下起作用,表示Oracle 租户的服务器端校验规则。 | GLOBAL | SESSION |
connect_timeout | int | [2, 31536000] | 10 | 连接超时时间,单位是微秒。 | GLOBAL | SESSION |
datadir | varchar | 有效的磁盘路径 | /usr/local/mysql/data/ | 数据存储的本地磁盘路径。 | GLOBAL | SESSION |
div_precision_increment | int | [0, 30] | 4 | 除法结果精度在被除数精度基础上的增量。MySQL 兼容功能。 | GLOBAL | SESSION |
error_on_overlap_time | int | TRUE:做报错处理; FALSE:不做报错处理 | FALSE | 动态参数,设置夏令时重叠区时间发生歧义时是否作报错处理。 | GLOBAL | SESSION |
explicit_defaults_for_timestamp | int |
| 1 | 指定 timestamp 数据类型在处理默认值和空值时是否启用非标准行为。 | READONLY | GLOBAL |
foreign_key_checks | int |
| 0 | 是否检查外建约束。 | GLOBAL | SESSION |
group_concat_max_len | int64 | [4, 1048576] | 1024 | 允许的GROUP_CONCAT() 函数结果的最大长度。单位是字节 | GLOBAL | SESSION |
identity | int64 | [0, 18446744073709551615] | 0 | 和变量 last_insert_id 是同义词。可以通过select @@identity 查询。 | SESSION |
init_connect | varchar | - | 空 | 服务器为每个连接的客户端执行的字符串,该字符串由一条或多条 SQL 语句组成,用分号分隔。 | GLOBAL | SESSION |
interactive_timeout | int | [1, 31536000] | 28800 | 服务器关闭交互式连接前等待活动的秒数。 交互式客户端定义为在 mysql_real_connect() 中使用 CLIENT_INTERACTIVE 选项的客户端。 | GLOBAL | SESSION |
is_result_accurate | int |
| 1 | 当查询带有 topk 提示时,is_result_accurate 表示结果是否正确。 | SESSION |
last_insert_id | nit | [0, 18446744073709551615] | 0 | 返回本 Session 最后一次插入的自增字段值。 | SESSION |
license | varchar | - | 空 | license 的类型。 | GLOBAL | SESSION |
lower_case_table_names | int |
| 2 | 是否大小写敏感。仅在MySQL 模式下对database 和 table 对象名生效。 | GLOBAL | SESSION | READONLY |
max_allowed_packet | int | [1024, 1073741824] | 4194304 | 最大网络包大小,单位是 Byte。 | GLOBAL | SESSION | SESSION_READONLY |
max_sp_recursion_depth | int | [0, 255] | 0 | 可以递归调用任何给定存储过程的次数。 | GLOBAL | SESSION |
max_user_connections | int64 | [0, 4294967295] | 0 | 指定允许同时连接的最大用户数,设置为 0 时表示不限制。 | GLOBAL | SESSION |
net_buffer_length | int | [1024, 1048576] | 16384 | TCP/IP 和 socket 通信的缓存区长度。 | GLOBAL | SESSION | SESSION_READONLY |
net_read_timeout | int | [1, 31536000] | 30 | 中断读之前等待连接的其它数据的秒数。当服务器从客户端读数时,net_read_timeout 指控制何时中断的超时值;当服务器向客户端写时,net_write_timeout 指控制何时中断的超时值。 | GLOBAL | SESSION |
net_write_timeout | int | [1, 31536000] | 60 | 中断写之前等待块写入连接的秒数。当服务器从客户端读数时,net_read_timeout 指控制何时中断的超时值;当服务器向客户端写时,net_write_timeout指控制何时中断的超时值。 | GLOBAL | SESSION |
ob_compatibility_mode | enum |
| MYSQL | 表示该租户的兼容模式,MYSQL 表示兼容MYSQL,ORACLE 表示兼容 Oracle。该系统变量仅支持在创建租户时指定,租户创建后则无法修改。 | TENANT | READONLY |
ob_create_table_strict_mode | int |
| ON | 动态变量,默认为 ON。如果设置为 ON,会严格按照 Locality 建立副本,任何副本建立失败,则 create table 失败;否则,全类型副本至少 1 个,Paxos 成员组副本达到多数,即可成功。 | GLOBAL | SESSION |
ob_default_replica_num | int | [1, ) | 1 | 每个集群中表的默认副本数。 | GLOBAL | SESSION |
ob_early_lock_release | int |
| 0 | 事务是否开启 ELR 优化。 | GLOBAL |
ob_enable_aggregation_pushdown | int |
| 1 | 是否允许聚合操作下压。 | GLOBAL | SESSION |
ob_enable_blk_nestedloop_join | int |
| 0 | 是否允许打开 block nested loop join。 | GLOBAL | SESSION |
ob_enable_hash_group_by | int |
| 1 | 是否打开 Hash Group by 的路径。 | GLOBAL | SESSION |
ob_enable_index_direct_select | int |
| 0 | 是否允许用户直接查询索引表。 | GLOBAL | SESSION |
ob_enable_jit | int |
| OFF | JIT 执行引擎模式。 可以设置的值如下:
| GLOBAL | SESSION |
ob_enable_plan_cache | int |
| 1 | 是否打开 Plan Cache。 | GLOBAL | SESSION |
ob_enable_sql_audit | int |
| TRUE | 控制当前租户是否开启 SQL Audit 功能。 | GLOBAL |
ob_enable_trace_log | int |
| 0 | 是否使用 trace 日志。 | GLOBAL | SESSION |
ob_enable_transformation | int |
| 1 | 是否允许 SQL 重写。 | GLOBAL | SESSION |
ob_enable_transmission_checksum | int |
| 1 | Proxy 和 Server 之间是否进行数据包校验和,实时生效. | GLOBAL | SESSION |
ob_enable_truncate_flashback | int |
| 1 | 是否启用表截断的闪回。 | GLOBAL | SESSION |
ob_last_schema_version | int | [0, 9223372036854775807] | 0 | 该 Session 中最新使用的 Schema 版本号,当 Proxy 的同一个连接对应到多个 Server 中时,需要使用该系统变量进行 Schema 同步,因此该变量只在 Session 级别生效。 | SESSION |
ob_org_cluster_id | int | [0, 4294967295] | 0 | 通常情况下不需要设置该变量,OceanBase 数据库生成日志(clog)时会使用缺省值(即每个 OceanBase 集群的CLUSTER_ID)。DRC 在复制数据写入目标集群时,需要在 Session 中设置这个变量为日志中所带的 CLUSTER_ID,以避免数据被循环复制。 | SESSION |
ob_plan_cache_evict_high_percentage | int | [0, 100] | 90 | 触发计划缓存逐出的计划缓存限制的内存使用百分比。 | GLOBAL |
ob_plan_cache_evict_low_percentage | int | [0, 100] | 50 | 停止计划缓存逐出的计划缓存限制的内存使用百分比。 | GLOBAL |
ob_plan_cache_percentage | int | [0, 100] | 5 | 计划缓存可以使用的租户内存资源的百分比。 | GLOBAL |
ob_query_timeout | int | [0, 9223372036854775807] | 10000000 | 查询超时时间,单位是微秒。 | GLOBAL | SESSION |
ob_read_consistency | int |
| 3 | 读一致性级别。 | GLOBAL | SESSION |
ob_route_policy | int |
| 1 | Obproxy/Java 客户端与 OBServer 内部重试的路由策略。 | GLOBAL | SESSION |
ob_sql_audit_percentage | int | [0, 100] | 3 | SQL Audit 内存上限占当前租户内存的百分比。 | GLOBAL |
ob_sql_work_area_percentage | int | [0, 100] | 5 | 用于 SQL 执行的租户内存百分比限制。 | GLOBAL |
ob_stmt_parallel_degree | int | [1, 10240] | 1 | 查询的并行度,表示可以并行运行的任务数。 | GLOBAL | SESSION |
ob_tcp_invited_nodes | varchar | - | 127.0.0.1 | 租户的 IP 白名单,支持 %、 和 IP(用逗号分隔),支持 IP 列表匹配、掩码匹配或模糊匹配。 | GLOBAL |
ob_timestamp_service | int |
| 1 | 指定使用何种时间戳服务。 | GLOBAL |
ob_trx_idle_timeout | int | [1, 9223372036854775807] | 120000000 | 事务空闲超时时间,即事务中两条语句之间的执行间隔超过该值时超时,单位是微秒。 | GLOBAL | SESSION |
ob_trx_timeout | int | [1, 9223372036854775807] | 100000000 | 事务超时时间,单位是微秒。 | GLOBAL | SESSION |
optimizer_capture_sql_plan_baselines | int |
| OFF | 是否使能自动捕获 SQL 计划基线。 | GLOBAL | SESSION |
optimizer_use_sql_plan_baselines | int |
| 0 | 是否使能使用 SQL 计划基线。 | GLOBAL | SESSION |
parallel_max_servers | int | [0, 1800] | 租户 CPU 数 每个 CPU 启动的线程数 0.3 | 设置每个 Server 上 PX(Parallel eXecution,并行执行)线程池的大小。 | GLOBAL |
parallel_servers_target | int | [0, 3600] | 租户 CPU 数 每个 CPU 启动的线程数 0.3 | 设置每个 Server 上的大查询排队条件。当 PX(Parallel eXecution,并行执行)线程池中有指定的空闲线程数时才调度新查询。 | GLOBAL |
plugin_dir | varchar | - | ./plugin_dir/ | 存放插件 DLL 的路径。 | GLOBAL | SESSION |
query_cache_size | int64 | [0, 18446744073709551615] | 1048576 | 分配给存储旧查询结果的内存(尚未使用的),单位是 Byte。 | GLOBAL | SESSION |
query_cache_type | int |
| OFF | 查询缓存类型。 | GLOBAL | SESSION |
read_only | int |
| 0 | 租户是否为只读模式。影响该租户下的所有普通用户,不影响 root 权限用户。 | GLOBAL |
recyclebin | int |
| 1 | 是否开启回收站功能。启用回收站后,删除的表及其依赖对象将放置在回收站中;当禁用回收站时,删除的表及其依赖对象不会放置在回收站中,会直接删除。 | GLOBAL | SESSION |
sql_mode | varchar |
| STRICT_ALL_TABLES | 不同 SQL 模式对于插入等行为有很大影响,具体的可以参考 MySQL 的说明。 | GLOBAL | SESSION |
sql_quote_show_create | int |
| ON | 是否启动为 SHOW CREATE TABLE 和 SHOW CREATE DATABASE 语句引用标识符。 | GLOBAL | SESSION |
sql_select_limit | int | [0, 9223372036854775807] | 9223372036854775807 | 一个 select 查询允许返回的最大行数,如果一个 select 中包含了 limit 语句,那么 limit 的值比 sql_select_limit 的优先级高,默认是不限制 select 返回的行数 | GLOBAL | SESSION |
sql_throttle_rt | int | [-1, +∞) | -1 | 指定rt值,单位是微秒,如果查询的 rt 值不小于该值,则不允许执行该查询。 | GLOBAL |
sql_warnings | int |
| OFF | 出现告警时单行 INSERT 语句是否生成信息字符串。 | GLOBAL | SESSION |
system_time_zone | varchar | - | CST | 服务器机器系统时区。 | GLOBAL | READONLY |
time_zone | varchar | - | +8:00 | 当前租户会话使用的时区,支持‘+08:00’ 的 offset 形式,和Asia/Shanghai 的地域形式取值。 | GLOBAL | SESSION |
timestamp | numeric | [0, 253402272000) | 0 | 时间戳,单位是秒,该变量影响 select now(6) 的结果。 | GLOBAL | SESSION |
tx_isolation | varchar |
| READ-COMMITTED | 事务隔离级别。 OceanBase 数据库未兼容 MySQL 的 repeatable read 和 serializable 功能,当用户设置这两个隔离级别时,语法不报错,其行为等同于 Oracle 模式下的 serializable 隔离级别。 | GLOBAL | SESSION |
tx_read_only | int |
| 0 | 事务是否为只读模式。影响该用户,不影响其他用户。 | GLOBAL | SESSION |
undo_retention | int | [0, 2^32-1] | 0 | 指定多版本数据保留时间,单位是秒。 | GLOBAL |
version | varchar | - | 5.6.25 | 服务器的版本号。 | GLOBAL | SESSION |
version_comment | varchar | - | OceanBase 1.0.0 | OBServer 的版本信息。 | READONLY | GLOBAL |
wait_timeout | int | [1, 31536000] | 28800 | 服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局 wait_timeout 值或全局 interactive_timeout 的值初始化会话 wait_timeout 值,该值取决于客户端类型(由mysql_real_connect() 的连接选项CLIENT_INTERACTIVE 定义))。 | GLOBAL | SESSION |