金仓数据库KingbaseES 参数设置优先级别

Oracle的参数可以设置system和session级别,当设置了session级别的参数时,会覆盖值system级别。
KingbaseES除了该两个级别外,还有database级别、user/role级别、user/role+database组合级别。
下面针对这几个级别的参数优先级问题,进行测试验证,测试以参数 idle_in_transaction_session_timeout 为例子。

查询默认配置
  1. [kingbase@singlekbdb data]$ grep idle_in_transaction_session_timeout kingbase.conf
  2. #idle_in_transaction_session_timeout = 0        # in milliseconds, 0 is disabled
  3. system用户登录数据库查询,可以看到参数值的来源是default,未修改继承默认系统设置。
  4. test1=# select name,setting,context,source from sys_settings where name ='idle_in_transaction_session_timeout';
  5.                 name                 | setting | context | source  
  6. -------------------------------------+---------+---------+---------
  7. idle_in_transaction_session_timeout | 0       | user    | default
测试一:设置user级别参数,测试对比user级别和system级别的优先级。
  1. test1=#  alter user u1 set idle_in_transaction_session_timeout=10;
  2. ALTER ROLE
  3. test1=# \c - u1
  4. 您现在已经连接到数据库 "test1",用户 "u1".
  5. test1=>  select name,setting,context,source from sys_settings where name ='idle_in_transaction_session_timeout';
  6.                 name                 | setting | context | source
  7. -------------------------------------+---------+---------+--------
  8. idle_in_transaction_session_timeout | 10      | user    | user
  9. (1 行记录)
  10. 登录u1用户,看到参数值已变更为10,参数值来源是是user级别,所以user级别的优先于system级别。
测试二、设置database级别参数
  1. test1=# alter database test1 set idle_in_transaction_session_timeout = 20;
  2. ALTER DATABASE
  3. test1=# \c -
  4. 您现在已经连接到数据库 "test1",用户 "system".
  5. test1=#  select name,setting,context,source from sys_settings where name ='idle_in_transaction_session_timeout';
  6.                 name                 | setting | context |  source  
  7. -------------------------------------+---------+---------+----------
  8. idle_in_transaction_session_timeout | 20      | user    | database
  9. test1=# \c - u1
  10. 您现在已经连接到数据库 "test1",用户 "u1".
  11. test1=>  select name,setting,context,source from sys_settings where name ='idle_in_transaction_session_timeout';
  12.                 name                 | setting | context | source
  13. -------------------------------------+---------+---------+--------
  14. idle_in_transaction_session_timeout | 10      | user    | user
  15. (1 行记录)
  16. 修改配置后system会话的值已变更为20,参数来源是database。 u1用户的会话还是保持之前的设置不变。
  17. 所以,database级别优先于system级别,而user级别优先于database级别。
测试三、设置user+database级别参数
  1. test1=> \c - system
  2. 您现在已经连接到数据库 "test1",用户 "system".
  3. test1=# alter user u1 in database test1 set idle_in_transaction_session_timeout=30;
  4. ALTER ROLE
  5. test1=# \c - u1
  6. 您现在已经连接到数据库 "test1",用户 "u1".
  7. test1=>  select name,setting,context,source from sys_settings where name ='idle_in_transaction_session_timeout';
  8.                 name                 | setting | context |    source     
  9. -------------------------------------+---------+---------+---------------
  10. idle_in_transaction_session_timeout | 30      | user    | database user
  11. (1 行记录)
  12. 用户u1登录test1的会话,参数idle_in_transaction_session_timeout使用了user+database组合级别的参数值:30。
  13. 所以,user+database组合级别优先于user级别。
  14. test1=> set idle_in_transaction_session_timeout=40;
  15. SET
  16. test1=>  select name,setting,context,source from sys_settings where name ='idle_in_transaction_session_timeout';
  17.                 name                 | setting | context | source  
  18. -------------------------------------+---------+---------+---------
  19. idle_in_transaction_session_timeout | 40      | user    | session
  20. (1 行记录)
  21. 直接set session级别参数值,覆盖前面的所有级别。
总结
KingbaseES 参数级别的优先顺序为:
1.默认情况下,session会继承system级别参数值;
2.在设置了database级别参数的情况下,database级别的参数值优先于system级别;
3.在设置了user/role级别参数的情况下,user级别的参数值优先于database级别;
4.在设置了user+database级别参数的情况下,该组合级别的参数值优先于user级别;
5.在当前session给会话直接set parameter=value的情况下,该参数值最优先。
  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值