如何设置永久ob_query_timeout

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

如何设置永久ob_query_timeout?

1 个赞

set global ob_query_timeout = xxx;

参考:《浅析 OceanBase 中系统变量、用户变量和配置项三者的区别》

3 个赞

永久呢

set seesion/或者为空 xxx 代表会话级别(非永久)
set global xxx 代表全局级别(永久)
详细内容参考一楼的文章

global 就是对当前租户永久生效。

集群重启就不行了,session代表会话,global代表全局。

global 会写系统表的,重启集群也可以

行,有机会试一下,那和别的数据库还不一样

别的数据库我不太了解,OB 里的 global 设置应该是会改 oceanbase.__all_sys_variable 这张系统表,改动会持久化下来,所以重启也没关系。

用 global 改完之后,可以查下系统表简单验证下:

set global ob_query_timeout = 12345678;
Query OK, 0 rows affected (0.34 sec)

select * from  oceanbase.__all_sys_variable where name = 'ob_query_timeout'\G
*************************** 1. row ***************************
  gmt_create: 2024-12-19 18:04:35.266317
gmt_modified: 2025-01-14 11:04:36.710416
   tenant_id: 0
        zone:
        name: ob_query_timeout
   data_type: 5
       value: 12345678
        info: Query timeout in microsecond(us)
       flags: 131
     min_val:
     max_val:
1 row in set (0.01 sec)

查了一下ob修改全局参数确实会利用 schema 机制进行持久化,存在__all_sys_variable中

1 个赞

根据文档库中的信息,ob_query_timeout 可以通过设置为全局(GLOBAL)来实现持久化配置,这样即使集群重启,该参数的设置仍然有效。具体来说,您可以通过以下几种方式设置 ob_query_timeout

  1. SQL 级别设置(仅对当前 SQL 语句生效):
    使用 Hint 来指定单个查询的超时时间。例如:

    SELECT /*+ query_timeout(100000000) */ * FROM t1;
    
  2. 会话级别设置(仅对当前会话生效):
    使用 SET SESSION 命令来设置当前会话的超时时间。例如:

    SET SESSION ob_query_timeout = 100000000;
    
  3. 租户级别设置(全局设置,对所有会话生效,并且持久化):
    使用 SET GLOBAL 命令来设置租户级别的超时时间,这将影响所有会话并且在集群重启后仍然有效。例如:

    SET GLOBAL ob_query_timeout = 100000000;
    

验证设置

您可以使用以下命令来验证 ob_query_timeout 的当前设置:

SHOW VARIABLES LIKE 'ob_query_timeout';

或者查询系统表来获取更详细的信息:

SELECT * FROM oceanbase.DBA_OB_SYS_VARIABLES WHERE NAME='ob_query_timeout';

注意事项

  • 设置 ob_query_timeout 时需要注意单位是微秒(us),因此如果要设置为 100 秒,则应设置为 100000000
  • 全局设置 (GLOBAL) 会影响所有新创建的会话,但不会立即改变现有会话的设置。现有会话需要重新连接或显式设置会话级别的超时时间。

以上信息依据的是文档片段中关于 ob_query_timeout 的描述以及如何设置和验证该参数的方法。希望这些信息能帮助您正确设置并理解 ob_query_timeout 的行为。

更多信息请查看:

  1. 阅读和管理 OceanBase 数据库 SQL 执行计划
  2. ob_query_timeout
  3. oceanbase.DBA_OB_SYS_VARIABLES
  4. 在您开始前
  5. server_permanent_offline_time
  6. 空闲事务
  7. OceanBase 数据库性能的影响因素
  8. 管理历史统计信息
  9. 自动收集统计信息
1 个赞

还真有 oceanbase.DBA_OB_SYS_VARIABLES 这张字典视图,AI 小助手可以的~