opengauss6.0数据库宕机与LLVM崩溃问题分析求助

您好,我这边有一套单机部署的 openGauss 6.0.0 数据库,在运行过程中发生了异常宕机(进程挂掉),并生成了 core 文件。通过 gdb 分析调用栈,发现崩溃点位于 LLVM 编译器内部,特此求助。

环境信息:

  • 数据库版本:(openGauss 6.0.0 build aee4abd5) compiled at 2024-09-29 19:14:27 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 10.3.0, 64-bit

  • 操作系统:openEuler 24.03 (LTS-SP4)

  • 部署模式:单机版

  • 参数情况:执行 SHOW enable_codegen; 返回 off;尝试查询 SHOW enable_codegen_mot; 提示 unrecognized configuration parameter。

故障现象与日志线索:

  1. 宕机前:postgresql 日志中反复出现 pg_statistic 系统表的唯一约束冲突(duplicate key value violates unique constraint "pg_statistic_relid_kind_att_inh_index"),集中在 anpm.monitor_process 表的 autovacuum 过程中。

  2. 宕机时:产生 core 文件,使用官方 6.0.0 符号表结合 gdb 分析,发现多个线程的调用栈中出现 llvm::runIPSCCP(...),例如:

    text

    Thread 5 (LWP 1739368):
    #8  0x0000000002fe3c40 in llvm::runIPSCCP(llvm::Module&, llvm::DataLayout const&, std::function<llvm::TargetLibraryInfo const& (llvm::Function&)>, llvm::function_ref<llvm::AnalysisResultsForFn (llvm::Function&)>) ()
    

我的疑问与求助:

  1. 根据公开资料,enable_codegen 已经关闭,但为什么进程依然走进了 LLVM 的编译路径(runIPSCCP)?是否是因为 MOT 相关的内部逻辑触发了 LLVM,但当前版本的 enable_codegen_mot 参数缺失,导致无法通过参数关闭?

  2. 请问在 openGauss 6.0.0 版本中,针对 LLVM runIPSCCP 这种由于畸形 IR 导致的底层崩溃,是否已经有了明确的修复补丁?

  3. 如果升级到 openGauss 6.0.3 或更新的补丁版本,是否已经包含了针对该问题的修复,或者修复了 enable_codegen_mot 等 MOT 开关参数缺失的问题?

  4. 除了修复 pg_statistic 和禁用相关参数外,在当前版本下,是否有其他手段可以彻底规避该 LLVM 缺陷引发的宕机风险?

SHOW enable_codegen_mot显示unrecognized configuration parameter是因为发行版不编译mot

看到有类似修复:https://gitcode.com/opengauss/openGauss-server/pull/8701

可升级到6.0.6或7.0.0试试。