租户系统变量:全局变量和 Session 变量,先分清再调参

在 OceanBase 里调整参数,不少人遇到过 “明明改了,怎么不生效” 的情况。多数时候,问题不在参数本身,而是没分清系统变量里两类不同的变量。

租户的系统变量分为两种:全局变量和 Session 变量。

全局变量是 Global 级别的修改,同一个租户内的不同用户共享。它的特点是:修改后不会因为会话退出而失效。但要注意一点 —— 修改全局变量,对当前已经打开的会话不生效,需要重新建立连接(Session)才会应用。

Session 变量是 Session 级别的修改。客户端连接数据库时,系统会自动复制一份全局变量来生成 Session 变量。Session 变量的修改只对当前这个会话有效,其他会话不受影响,会话结束就没了。

两类变量的区别,可以概括成四点。

第一,修改级别不同。全局变量是 Global 级别,Session 变量是 Session 级别。

第二,共享范围不同。全局变量在租户内所有用户之间共享,Session 变量只属于当前会话,互不影响。

第三,会话退出后的结果不同。全局变量的修改会保留下来,Session 变量的修改随会话结束一起失效。

第四,生效时机不同。Session 变量在当前会话立即生效;全局变量则要等重新建立会话之后才生效,已打开的会话里看不到变化。

实际使用中容易忽略的几点:

一是改完全局变量,当前会话里看不到效果是正常的,别急着以为没改上,重连一次再看。二是如果想只影响自己当前的操作,用 Session 级别修改就够了,不用动全局,避免影响同租户其他人。三是排查 “参数不生效” 问题时,先确认改的是哪一类变量,再判断生效时机是否符合预期。

3 个赞

仁以为己任

2 个赞

路漫漫其修远兮

1 个赞

心怀苍生

2 个赞

死亦为鬼雄

穷则独善其身