代码改变世界

【磐维数据库】某客户-PanWeiDB_V2.0-S3.1.0_B01-业务update和delete操作报错分析处理

2025-03-28 11:57  狂澜与玉昆0950  阅读(262)  评论(0)    收藏  举报

中国移动磐维数据是基于openGauss定制开发的中国移动自用版OLTP数据库。自去2023年年12月发布以来,受到广泛关注,目前已成功上线百余套。 在产品落地的过程中,我们积累了大量的迁移、适配,以及问题分析诊断的经验。 北京海量数据技术股份有限公司,作为移动磐维集中式数据库外协厂商,对集中式磐维数据库的运维、管理、开发等均有深入了解。在江西移动现场运维整理汇总经验。

影响版本

属性 
产品 磐维数据库
模块 对象管理
影响版本 PanWeiDB_V2.0-S3.1.0_B01 + B模式
影响平台 x86_64 + Hygon + BCLinux 8.2

修复版本

确认修复版本重新发包解决:PanWeiDB_V2.0-S3.1.0_B01-install-bclinux_8.2-x86_64_hygon-no_mot.tar.gz

Bug描述

主要是有两个问题:

  1. gs_initdb 错误检测机制失效。原因是 single 模式的 exit_on_error 功能行为异常,sql 执行异常时不退出并返回异常错误码。
  2. mysql_object.so 库加载失败。原因是之前在打包容器编译打包有问题,研发已复现。

问题现象

数据库初始化时,元数据定义的SQL脚本全部没有跑。导致数据库基础DML操作报错:ERROR: schema"information schema" does not exist

image.png

触发条件

使用第一版安装包,该环境下理论上必现:x86_64 + Hygon + BCLinux8.2 + V2.0-S3.1.0_B01 + B模式

复现用例

delete from test0303 where id =1;

定位分析

错误现象

基础dml操作delete异常报错

image.png

gs_dump、gs_dumpall异常终止

image.png

分析思路

检查schema

select * from pg_namespace;

出现BUG的集群上没有该schema

image.png

其他操作系统上集群存在该schema

image.png

查找源码

information_schema 有一个单独的 sql 文件

image.png

image.png

image.png

image.png

重新初始化实例

怀疑是安装错误导致的问题,重新初始化后,改端口再查看schema

image.png

image.png

image.png

依旧不存在information_schema的schema

image.png

image.png

架构信息

image.png

image.png

单独安装内核测试

#!/bin/bash
export GAUSSHOME=/home/cuixiaoyuan/workspace/panweidb/app
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$GAUSSHOME/jre/lib/amd64:$GAUSSHOME/jre/lib/amd64/server:$LD_LIBRARY_PATH
export PATH=$GAUSSHOME/bin:$PATH

image.png

正常集群的shcema

image.png

出现BUG集群的schema

image.png

在错误的数据库里查询,发现不止一个初始化SQL文件没执行,后面的mysql_object 也没有执行,影响较广泛。

select * from pg_proc where proname = 'get_all_locks'; select * from pg_extension;

image.png

符号表定位问题

p mysql_object_file
p info_schema_file
p bki_file
p lines
p cmd
p *line
ctl+d
create schema information_schema;\


image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

研发结论

在内部测试的环境,发现了报错的语句,在对比其他 os 平台和模式情况。

确认是这个语句报错了,但是,initdb 的错误检测机制,在这个平台的情况下没有生效导致的,具体原因还没有找到。

image.png

image.png

之前发布适配的包是 hygon 的,但是因为 initdb 错误检测机制失效,当时测试没有发现这个问题,而且只有 B 模式有问题。

这个 mysql_object.so 本身编译方式是有点问题的,跟 oracle_object.so 不一样,所以只有 B 模式有问题,ldd -r 可以看到报错。

这两个问题都解决后,重新编译,hygon 的适配包才能正常使用。

image.png

image.png

简易检测确认方式

如果呈现出来是这种,就会有问题,symbol 缺失或者乱码了。

nm -D mysql_object.so > test.log

image.png

正常情况如下

image.png

根因

无法规避,报错路径大概是这样的:

update\delete --> information_schema --> mysql_object.sql --> mysql_object.so --> 动态链接库问题

因此,如果手动创建 information_schema ,最后还是会走到后面 mysql_object.so 那块错误。

详细:

  1. update\delete 失败,表现为依赖 information_schema 的内容缺失
  2. information_schema 的内容缺失是在 initdb 时, 创建时这个 schema 报错,需要使用 mysql_object.sql 中定义的操作符 ^,这个操作符没有
  3. 第2点操作符没有是因为,在initdb时,创建 mysql_object.sql 中的元数据对象,需要依赖 mysql_object.so 中的 C 函数,但是 mysql_object.so 这个动态链接库有问题,无法使用。

第2点和第3点,initdb 过程报错,由于错误检测失效,未报错退出,表现为初始化成功,实际缺失元数据。

是当时打包选择的镜像有问题,是非hygon的镜像,虽然编译出来的,但是实际使用会有这个问题,更换镜像之后可以了。

其他问题(dump):是 mysql_object.so 里面的函数,这个动态库加载不了,直接更换新的动态库即可。

Workaround

规避方案

替换新的 mysql_object.so

通过 single 模式启动补 mysql_object.sql + information_schema.sql 的元数据对象,补充跑一下。

但是这个每个数据实例需要单独跑一下(集群只需要主节点跑)

具体操作说明:磐维海光元数据丢失补充方式

最终解决方案

新的安装包

PanWeiDB_V2.0-S3.1.0_B01-install-bclinux_8.2-x86_64_hygon-no_mot.tar.gz

image.png

image.png

image.png

验证通过,更新删除没问题。

参考文档

【ID1055502】【某客户】海光cpu+BClinux8.2系统安装panwei310 B模式后缺少information_schema,导致无法正常执行update和delete操作**