如果因为一条 SQL 导致 observer crash ,我们可以从 core dump 文件中找到对应的源头 SQL 语句。
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本
操作方法
需要从 OceanBase 技术支持人员处获取 OBServer 的
debuginfo rpm包,在安装或者解压后才可以将 observer 线程的 call stack 信息解析成可读的方法名,或者调试 core 文件。需注意,需要解压与 OBServer 版本相对应的版本。具体操作如下。
rpm2cpio oceanbase-debuginfo-xxx.el7.x86_64.rpm | cpio -div将解压出的
observer.debug文件拷贝进observer目录,默认为/home/admin/oceanbase/bin目录。使用 gdb 调试工具直接打开 core 文件。
gdb /home/admin/oceanbase/bin/observer core-observer-113058-1614065734注意
这里是在调试 core 文件,如果直接调试运行中的 observer, 会影响系统的可用性。
在 gdb 环境下进行输入 bt 获取 core 的具体堆栈。
(gdb)bt查看 core 堆栈是否存在如下数据。
#28 0x000000000290dd1a in oceanbase::observer::ObMPQuery::process (this=0x7e8dcb58b4d0) at src/observer/mysql/obmp_query.cpp:277如存在,使用如下命令进入该栈。
(gdb) frame 28然后执行如下 print 命令查看导致 core 的 SQL。
(gdb) p *this