通过 SYS 租户修改业务租户参数
上一课介绍到 OceanBase 集群参数设置,其中有部分参数生效范围是租户(TENANT
)。在 OceanBase 内部租户(sys
)里,可以修改业务实例的部分参数。比如说参数 writing_throttling_trigger_percentage
用于对指定租户进行内存限流(增量内存使用率达到这个阈值就对写入降速)。
MySQL [oceanbase]> show parameters like 'writing_throttling_trigger_percentage%'\G *************************** 1. row *************************** zone: zone1 svr_type: observer svr_ip: 172.20.249.50 svr_port: 2882 name: writing_throttling_trigger_percentage data_type: NULL value: 100 info: the threshold of the size of the mem store when writing_limit will be triggered. Rang:(0, 100]. setting 100 means turn off writing limit section: TRANS scope: TENANT source: DEFAULT edit_level: DYNAMIC_EFFECTIVE 1 row in set (0.002 sec) MySQL [oceanbase]> alter system set writing_throttling_trigger_percentage = 90 tenant='obmysql'; Query OK, 0 rows affected (0.011 sec)
这个修改后的值,只能在对应租户里查看。
[admin@obce00 ~]$ mysql -h 172.20.249.50 -u root@obmysql -P 2881 -p -c -A oceanbase Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 3221538749 Server version: 5.7.25 OceanBase 3.1.0 (r3-b20901e8c84d3ea774beeaca963c67d7802e4b4e) (Built Aug 10 2021 08:10:38) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [oceanbase]> show parameters like 'writing_throttling_trigger_percentage%'\G *************************** 1. row *************************** zone: zone1 svr_type: observer svr_ip: 172.20.249.50 svr_port: 2882 name: writing_throttling_trigger_percentage data_type: NULL value: 90 info: the threshold of the size of the mem store when writing_limit will be triggered. Rang:(0, 100]. setting 100 means turn off writing limit section: TRANS scope: TENANT source: DEFAULT edit_level: DYNAMIC_EFFECTIVE 1 row in set (0.004 sec)
修改业务租户参数
当然,在业务租户里,也可以自己设置参数。比如说还有个参数 writing_throttling_maximum_duration
是控制增量内存剩余内存根据当前写入速度预估还能支撑多久。这个参数仅供参考,准确性不及上面那个参数。
# 业务租户里改参数,后面就不需要指定租户名。 MySQL [oceanbase]> alter system set writing_throttling_maximum_duration = '2h'; Query OK, 0 rows affected (0.006 sec) MySQL [oceanbase]> show parameters like 'writing_throttling_maximum_duration'\G *************************** 1. row *************************** zone: zone1 svr_type: observer svr_ip: 172.20.249.50 svr_port: 2882 name: writing_throttling_maximum_duration data_type: NULL value: 2h info: maximum duration of writing throttling(in minutes), max value is 3 days section: TRANS scope: TENANT source: DEFAULT edit_level: DYNAMIC_EFFECTIVE 1 row in set (0.004 sec)
修改业务租户变量
OceanBase 租户还有一个 叫变量(VARIABLE
)的设计,这个跟 MySQL 实例很像。变量其实就是租户的参数。可以在租户全局层面修改,也可以会话层面修改。很多变量还有对应的 SQL HINT,在语句级别修改。 全局层面的修改影响的是后续的会话,会话层面的修改仅影响当前会话,语句级别的修改只影响当前语句。
OceanBase 租户在刚开始使用的时候,建议调大租户的几个超时参数。
ob_query_timeout
: 语句执行超时时间,单位us
, 默认值是 10000000 (也就是 10 秒)。建议根据业务SQL 平均执行时间水平调整。 OLTP场景调整短一些,OLAP场景调整大一些。初学者建议调大 10 倍。ob_trx_idle_timeout
: 事务空闲超时时间,单位us
, 默认值是 120000000(也就是 120 秒)。建议根据业务事务平均空闲时间水平调整。空闲事务会占用连接、可能持有锁不释放,导致高并发时阻塞和死锁概率增加。不建议调大。ob_trx_timeout
:事务未提交超时时间,单位us
,默认值是 100000000 (也就是 100 秒)。建议根据业务事务平均持续时间水平调整。事务长期不提交,会占用连接、可能持有锁不释放,导致高并发时阻塞和死锁概率增加。不建议调大。如果是后台跑批业务,建议在会话级别调大。ob_trx_lock_timeout
:事务申请加锁等待超时时间,单位us
,默认值是 -1(也就是不控制。超时依然会受ob_query_timeout
限制)。当调大了语句超时时间变量(ob_query_timeout
)后,可以将这个锁等待超时改为 10000000 (即 10s)。减少阻塞和死锁的概率。
变量查看和修改方法语法:
show global | session variables like '%变量名部分字段%' ; set global | session 变量名 = '变量值' ;
示例:
MySQL [oceanbase]> show global variables like '%timeout%'; +---------------------+------------------+ | Variable_name | Value | +---------------------+------------------+ | connect_timeout | 10 | | interactive_timeout | 28800 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | ob_pl_block_timeout | 3216672000000000 | | ob_query_timeout | 10000000 | | ob_trx_idle_timeout | 120000000 | | ob_trx_lock_timeout | -1 | | ob_trx_timeout | 100000000 | | wait_timeout | 28800 | +---------------------+------------------+ 11 rows in set (0.002 sec) MySQL [oceanbase]> set global ob_query_timeout = 100000000; Query OK, 0 rows affected (0.015 sec) MySQL [oceanbase]> set global ob_trx_timeout = 1000000000; Query OK, 0 rows affected (0.014 sec) MySQL [oceanbase]> set global ob_trx_idle_timeout = 1200000000; Query OK, 0 rows affected (0.010 sec) MySQL [oceanbase]> SET GLOBAL ob_trx_lock_timeout=10000000; Query OK, 0 rows affected (0.011 sec)
对于复杂的 SQL 场景,或者 OLAP 场景,租户还需要调整一个变量 ob_sql_work_area_percentage
。这个影响 SQL 里排序统计能利用的内存大小。可以看情况调整。
set global ob_sql_work_area_percentage=50;
通过 SYS 租户修改业务租户变量
但是有部分变量属于租户初始化变量,不能在业务租户里直接修改。需要在 SYS 租户里修改。
示例:
[qing.meiq@xinren-oms.eu95 /home/qing.meiq/mysqldata] $ mysql -h127.1 -uroot@obmysql#obdemo -P2883 -p123456 -c -A oceanbase -Ns MySQL [oceanbase]> set global lower_case_table_names=0; ERROR 1238 (HY000): Variable 'lower_case_table_names' is a read only variable MySQL [oceanbase]> [qing.meiq@xinren-oms.eu95 /home/qing.meiq/mysqldata] $mysql -h127.1 -uroot@sys#obdemo -P2883 -p123456 -c -A oceanbase -Ns MySQL [oceanbase]> alter tenant obmysql set variables lower_case_table_names=0; MySQL [oceanbase]> [qing.meiq@xinren-oms.eu95 /home/qing.meiq/mysqldata] $ mysql -h127.1 -uroot@obmysql#obdemo -P2883 -p123456 -c -A oceanbase -Ns MySQL [oceanbase]> show global variables like 'lower_case_table_names'; lower_case_table_names 0 MySQL [oceanbase]>
有个变量比较特殊,初始化租户的时候在 SYS 租户设置,后期可以在业务租户里修改。如变量 ob_tcp_invited_nodes
,表示租户访问 IP 白名单。
set global ob_tcp_invited_nodes='11.166.0.0/16,127.0.0.1';
如果业务租户设置错误导致无法登录时,还可以通过 SYS 租户再改回正确值。
还有个变量比较特殊,不允许后期更改。如变量 ob_compatibility_mode
表示租户兼容性。这个在租户创建时指定,后期不能修改。
附录:
- 3.1 查看 OceanBase 集群资源的使用情况
- 3.2 如何创建和连接 MySQL 租户
- 3.3 如何连接租户
- 3.4 如何对租户参数(或变量)进行设置
- 3.5 如何使用 MySQL 租户做常见数据库开发
- 3.6 如何使用 OceanBase 分区表进行水平拆分
- 3.7 (高级)如何使用 OceanBase 表分组
- 3.8(高级)如何使用 OceanBase 复制表
- 3.9 常见问题
结束语
加入教程直播群方式一:钉钉群号3255 4020
加入教程直播群方式二:扫码下方二维码加入