执行ALTER SYSTEM SET LOG_ARCHIVE_DEST 超时,如何解决

【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.3.4.1
【问题描述】

如图修改日志归档目的:
ALTER SYSTEM SET LOG_ARCHIVE_DEST

返回timeout超时异常,如何解决问题

@论坛小助手

3 个赞

用户问题总结:在执行 ALTER SYSTEM SET LOG_ARCHIVE_DEST 命令时出现 timeout 超时异常,需要排查原因。

OceanBase 提供了配套诊断工具 obdiag,可以根据问题场景一键采集日志和系统信息,并支持根因分析。根据您的问题描述,这属于与日志归档相关的操作超时问题。

推荐使用 obdiag 工具进行日志采集,并建议您将采集到的日志提供给我们以便进一步分析。

日志采集场景: 日志归档问题
日志采集命令: obdiag gather scene run --scene=observer.log_archive

此外,该问题可能涉及日志归档流程中的超时行为,可以尝试进行根因分析:

根因分析场景: 日志相关问题排查(无主等场景)
根因分析命令: obdiag rca run --scene=log_error

麻烦您提供一些信息以便我们更好地帮助您定位问题:

  1. 执行 ALTER SYSTEM SET LOG_ARCHIVE_DEST 时使用的具体 SQL 和参数配置是什么?
  2. 是否有相关的错误日志或 trace_id 可以提供?
  3. 当前 OceanBase 集群是否处于正常运行状态?是否有正在进行的备份或恢复任务?
  4. 是否最近修改过日志归档路径、磁盘空间或网络配置?
  5. 您使用的 OceanBase 版本号是多少?

请您先运行上述 obdiag 命令进行日志采集,并将生成的日志压缩包提供给我们用于进一步分析。

附上敏捷诊断工具 obdiag 使用帮助链接

4 个赞

@论坛小助手
如何加长超时时间

1 个赞

根据文档库中的信息,您可以通过以下几种方式调整超时时间相关的参数:

  1. 语句超时时间 (ob_query_timeout)

    • 控制语句执行时间的上限,默认为 10s
    • 您可以使用如下 SQL 命令进行设置:
      obclient> SET ob_query_timeout = 10000000; -- 单位为微秒,例如 10 秒等于 10000000 微秒
      Query OK, 0 rows affected
      
      obclient> SET GLOBAL ob_query_timeout = 10000000;
      Query OK, 0 rows affected
      
    • 或者在 JDBC 连接串中设置:
      jdbc:mysql://10.1.0.0:1001/unittests?user=**u**@sys&password=******&sessionVariables=ob_query_timeout=60000000000,ob_trx_timeout=60000000000&xxxx
      
  2. 事务超时时间 (ob_trx_timeout)

    • 控制事务执行时间的上限,默认值可能因版本而异。
    • 您可以使用如下 SQL 命令进行设置:
      obclient> SET ob_trx_timeout =86400000000; -- 设置为一天的超时时间(单位为微秒)
      obclient> SET GLOBAL ob_trx_timeout =86400000000;
      
  3. 事务空闲超时时间 (ob_trx_idle_timeout)

    • 表示 Session 上一个事务处于 IDLE 状态的最长时间。
    • 您可以使用如下 SQL 命令进行设置:
      obclient> SET ob_trx_idle_timeout =86400000000; -- 设置为一天的超时时间(单位为微秒)
      obclient> SET GLOBAL ob_trx_idle_timeout =86400000000;
      
  4. 副本迁移时变更 Paxos 成员组操作的超时时间 (sys_bkgd_migration_change_member_list_timeout)

    • 用于设置副本迁移时变更 Paxos 成员组操作的超时时间。
    • 默认值为 20s,取值范围为 [0s, 24h]
    • 此参数无需重启 OBServer 节点即可生效。

请根据您的具体需求选择合适的参数进行调整。如果您需要进一步的帮助,请告知具体的场景和需求。

具体信息可参考以下文档:

  1. 在您开始前
  2. SET LOG_ARCHIVE_DEST
  3. ob_trx_timeout
  4. 检查 NTP 偏移量
  5. ob_trx_idle_timeout
  6. 事务控制概述
  7. sys_bkgd_migration_change_member_list_timeout
  8. SET LOG_ARCHIVE_DEST_STATE
4 个赞

使用 test_io_device测试下备份介质的连通性可权限是否满足
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016161

3 个赞

先看看目录权限,但是最好的办法就是先瞅一瞅报错日志和性能方面的日志

2 个赞

安装ob_admin的时候,
执行命令
bash build.sh debug --init

报错:
gen_parser.sh: line 297: /data/oceanbase-develop/src/sql/parser/_MD5: No such file or directory
Compile error: , abort.

2 个赞

根据文档库中的信息,您遇到的问题可能与编译环境或依赖项有关。以下是排查和解决此类问题的建议步骤:

1. 检查源码完整性

确保您克隆的 OceanBase 源码完整且未损坏。您可以尝试重新克隆源码:

git clone https://github.com/oceanbase/oceanbase.git

2. 初始化子模块

某些情况下,OceanBase 的源码依赖于 Git 子模块。请确保所有子模块都已正确初始化:

cd oceanbase
git submodule update --init --recursive

3. 清理并重新构建

如果之前已经执行过 build.sh,可能存在残留文件导致冲突。可以尝试清理之前的构建结果后重新编译:

make clean
bash build.sh debug --init

4. 检查文件路径权限

报错信息提示 /data/oceanbase-develop/src/sql/parser/_MD5 文件不存在,可能是由于路径权限问题或路径不一致导致。请确认以下几点:

  • 当前工作目录是否正确。
  • 是否有权限访问相关目录。

5. 手动创建缺失文件

如果 _MD5 文件确实缺失,可以尝试手动创建该文件以继续编译:

touch /data/oceanbase-develop/src/sql/parser/_MD5

然后再次运行编译命令:

bash build.sh debug --init

6. 使用 ob_utils 安装包

如果您仅需要 ob_admin 工具,可以通过安装 OceanBase Utils 包来获取:

rpm -ivh oceanbase-ce-utils-<version>

或者提取 ob_admin 单独使用:

rpm2cpio oceanbase-ce-utils-<version> | cpio -idmv ./usr/bin/ob_admin
cp usr/bin/ob_admin /usr/local/bin

7. 参考文档

以上解决方案参考了以下文档内容:

  • [ob_admin 简介 → ob_admin 安装 → 通过源码编译](片段标题: ob_admin 简介 → ob_admin 安装 → 通过源码编译)
  • [ob_admin 简介 → ob_admin 安装 → 通过 ob_utils 安装包](片段标题: ob_admin 简介 → ob_admin 安装 → 通过 ob_utils 安装包)

如果问题仍未解决,请提供更多信息以便进一步分析。

更多信息请查看:

  1. ob_admin 简介
  2. 体验 Operational OLAP
  3. ob_error
  4. 使用 obd.sh 执行 mysqltest
  5. 部署 OceanBase 集群
  6. 启动和停止 obshell

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

3 个赞
  1. 这个调整大一点!
  2. 目录对用户是否有对应的权限
3 个赞

正常情况下在部署OB时应该已经安装了ob_admin了,你找下看看,如果没有安装
你安装对应版本的oceanbase-ce-utils-就可以

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013706

2 个赞

ob_query_timeout参数

2 个赞

没用。 我都调到 2小时了。

ob_admin.log (165.7 KB)

使用testio工具执行的结果日志。

麻烦帮忙分析下是啥原因。

存储目的端是自己部署的minIO object store服务

1 个赞

将域名改成ip就可以了!!!

应该是observer所在的机器解析不了这个域名

[2025-06-24 16:07:29.992177] WDIAG Log (ob_storage_s3_base.cpp:117) [3428328][][T500][Y0-0000000000000000-0-0] [lt=3][errcode=-9105] [S3] module=CurlHttpClient, msg=Curl returned error code 28 - Error
[2025-06-24 16:07:29.992247] WDIAG Log (ob_storage_s3_base.cpp:117) [3428328][][T500][Y0-0000000000000000-0-0] [lt=26][errcode=-9105] [S3] module=AWSXmlClient, msg=HTTP response code: -1
Resolved remote host IP address: 
Request ID: 
Exception name: 
Error message: curlCode: 28, Error
0 response headers:
[2025-06-24 16:07:29.992283] WDIAG Log (ob_storage_s3_base.cpp:117) [3428328][][T500][Y0-0000000000000000-0-0] [lt=6][errcode=-9105] [S3] module=AWSClient, msg=If the signature check failed. This could be because of a time skew. Attempting to adjust the signer.
[2025-06-24 16:07:29.992312] WDIAG log_error (ob_storage_s3_base.h:317) [3428328][][T500][Y0-0000000000000000-0-0] [lt=4][errcode=0] S3 log error(start_time_us_=1750752439980969, timeout_us_=20000000, attempted_retries=0, request_id="", code=-1, exception="", err_msg="curlCode: 28, Error")

2 个赞

observer的机器ping 这个域名是没问题的。

1 个赞

我再确认下是否这个版本还不支持域名,另外4.3.4.1版本不建议使用了,建议使用4.3.5最新BP

1 个赞

没有dns就用IP

还有,如果sql执行时间长的话
ob_query_timeout参数调大几个0

4.3.x版本中4.3.5开始支持
4.2.5.x版本中4.2.5BP1开始支持
4.2.1.x版本中4.2.1BP9开始支持

可以去对应的 版本发布记录中查询

1 个赞