【达梦数据库】Coredump文件生成与分析

目录

  • 背景
  • 参考链接
  • 分析Coredump文件获取问题SQL
    • 1、查看Coredump文件生成路径
    • 2、使用gdb工具读取Coredump文件
    • 3、记录崩溃线程堆栈
    • 4、记录当前崩溃线程号
    • 5、使用dmrdc工具分析Coredump文件
    • 6、寻找线程号对应SQL
    • 7、重新执行SQL,复现问题
  • 记录Coredump文件中所有线程的堆栈信息及对应的SQL语句

背景

环境异常,导致core文件产生。

参考链接

参考链接1: 达梦core文件分析(学习笔记)

参考链接2: Coredump文件分析记录

参考链接3: 达梦core文件分析

分析Coredump文件获取问题SQL

1、查看Coredump文件生成路径

cat /proc/sys/kernel/core_pattern#或者:
cat /etc/sysctl.conf
--查看kernel.core_pattern=/dmdata/core.%e_%p_%t,/dmdata即为core目录

在这里插入图片描述

2、使用gdb工具读取Coredump文件

dmdba用户下,切换到Coredump文件路径(如/dmdata)下,使用gdb工具(未安装时通过yum -y install gdb安装)读取Coredump文件:

#简写:
gdb dmserver ${Coredump文件}#全写:
gdb $DM_HOME/bin/dmserver ${Coredump文件}

例:

gdb dmserver corefile-dm_sql_thd.960540

在这里插入图片描述

3、记录崩溃线程堆栈

使用bt或者where命令记录崩溃线程堆栈:

bt
(gdb) bt
#0  0x0000000001c024d4 in assert_fun ()
#1  0x0000000001c025b4 in sigterm_handler ()
#2  <signal handler called>
#3  0x0000000001006d68 in nsym_node_is_rownum ()
#4  0x0000000001165e78 in pha_rel_is_one_row_low ()
#5  0x0000000001165f30 in pha_rel_is_one_row ()
#6  0x00000000011663a8 in pha_select_item_is_distinct ()
#7  0x0000000001166aa0 in pha2_is_distinct_for_nrel_extend ()
#8  0x00000000011407bc in pha_remove_redundant_tables_in_nrel_low ()
#9  0x0000000001140998 in pha_remove_redundant_tables_in_nrel_recursively ()
#10 0x0000000001140c60 in pha_remove_redundant_tables_in_from_lst ()
#11 0x00000000011410d0 in pha_remove_redundant_tables_single_for_left_join ()
#12 0x0000000001154d88 in pha_remove_redundant_tables_single ()
#13 0x0000000001154ed4 in pha_remove_redundant_tables_in_sels_recursively ()
#14 0x0000000001154f48 in pha_remove_redundant_tables_if_necessary ()
#15 0x000000000114f690 in pha_select_low ()
#16 0x00000000011515d0 in pha_from_normal_tv2 ()
#17 0x0000000001151ab4 in pha_from_normal_tv ()
#18 0x0000000001153494 in pha_from_clause_null ()
#19 0x000000000114dd44 in pha_query_exp ()
#20 0x000000000114e288 in pha_subquery_recursively ()
#21 0x000000000114e8bc in pha_subquery_low ()
#22 0x000000000114f36c in pha_select_low ()
#23 0x00000000011554ac in pha_select2 ()
#24 0x0000000001155e68 in pha_single_sql ()
#25 0x00000000011561f4 in pha_main_low ()
#26 0x00000000011565d0 in pha_main ()
#27 0x0000000001c4ae68 in ntsk_pha_main ()
#28 0x0000000001c4c6f8 in ntsk_process_prepare_low2 ()
#29 0x0000000001c4dbcc in ntsk_process_prepare_low ()
#30 0x0000000001c4dd68 in ntsk_process_prepare ()
#31 0x0000000001c780a4 in ntsk_process_cop ()
#32 0x0000000001b1a278 in uthr_db_main_for_sess ()
--Type <RET> for more, q to quit, c to continue without paging--
#33 0x0000fffddfbb87a0 in ?? () from /usr/lib64/libpthread.so.0
#34 0x0000fffddf83bcbc in ?? () from /usr/lib64/libc.so.6

在这里插入图片描述

4、记录当前崩溃线程号

使用info threads记录当前崩溃线程号:

info threads

*号的为当前崩溃线程,LWP后面为线程号,即:960808
在这里插入图片描述

5、使用dmrdc工具分析Coredump文件

dmrdc sfile=corefile-dm_sql_thd.960540 dfile=result_corefile-dm_sql_thd.960540.txt#参数详情:
sfile=corefile-dm_sql_thd.960540  --Coredump源文件
file=result_corefile-dm_sql_thd.960540.txt --Coredump分析后的结果文件

6、寻找线程号对应SQL

根据崩溃线程号在Coredump分析后的结果文件中找到对应的SQL,例如:960808
在这里插入图片描述
SQL如下:

--获取模式对象
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'SCH';--切换模式
SET SCHEMA FMS;--执行模式
SELECT COUNT(1) from ( ( select r.RTASK_ID,r.RTASK_BEGIN_TIME, r.RTASK_FINISH_TIME, (SELECT approval_status from biz_approval where manager_id = r.RTASK_ID limit 1) as approval_status, (select val from sys_dic_val where dic_val_no = (SELECT approval_status from biz_approval where manager_id = r.RTASK_ID limit 1)and isdeleted = 'N') as RTASK_CHECK_S,r.RTASK_ITEM, (select s.stationname from sys_workstation s where s.stationid = CAST(r.RTASK_ITEM AS INTEGER)) as STATIONAME,r.RTASK_NAME,r.RTASK_ESTATE,r.RTASK_STIME,r.RTASK_ETIME,CONCAT(r.RTASK_RECEIVER,'') as RTASK_RECEIVER,r.RTASK_CHECK, (select username from sys_users where userno = r.RTASK_RECEIVER) as F_RTASK_RECEIVER, (select WM_CONCAT(rolename) from sys_role where FIND_IN_SET(roleno,r.RTASK_USER)) AS ROLENAME,sdv.val AS D_RTASK_STATEfrom rout_task rLEFT JOIN sys_dic_val sdv ON sdv.dic_val_no = r.RTASK_ESTATELEFT JOIN (select bb.* from (SELECT * FROM biz_approval ORDER BY applicant_time DESC ) bb group by bb.manager_id) ba ON ba.manager_id = r.RTASK_ID and (ba.approval_type = '113' or ba.approval_type = '169')where 1 = 1AND r.RTASK_STIME >= ?AND r.RTASK_ETIME <= ?AND r.RTASK_ITEM = concat((79965),'')AND ba.approval_status = ?and r.ISDELETED = 'N' )
union all ( select b.* from ( select r.RTASK_IDfrom rout_task rLEFT JOIN sys_dic_val sdv ON sdv.dic_val_no = r.RTASK_ESTATELEFT JOIN (select bb.* from (SELECT * FROM biz_approval ORDER BY applicant_time DESC ) bb group by bb.manager_id) ba ON ba.manager_id = r.RTASK_ID and (ba.approval_type = '113' or ba.approval_type = '169')where 1 = 1AND r.RTASK_STIME >= ?AND r.RTASK_ETIME <= ?AND r.RTASK_ITEM = concat((79965),'')AND ba.approval_status = ?and r.ISDELETED = 'N' ) a right join ( select r.RTASK_ID,r.RTASK_BEGIN_TIME, r.RTASK_FINISH_TIME, (SELECT approval_status from biz_approval where manager_id = r.RTASK_ID limit 1) as approval_status, (select val from sys_dic_val where dic_val_no = (SELECT approval_status from biz_approval where manager_id = r.RTASK_ID limit 1)and isdeleted = 'N') as RTASK_CHECK_S,r.RTASK_ITEM, (select s.stationname from sys_workstation s where s.stationid = CAST(r.RTASK_ITEM AS INTEGER)) as STATIONAME,r.RTASK_NAME,r.RTASK_ESTATE,r.RTASK_STIME,r.RTASK_ETIME,CONCAT(r.RTASK_RECEIVER,'') as RTASK_RECEIVER,r.RTASK_CHECK, (select username from sys_users where userno = r.RTASK_RECEIVER) as F_RTASK_RECEIVER, (select WM_CONCAT(rolename) from sys_role where FIND_IN_SET(roleno,r.RTASK_USER)) AS ROLENAME,sdv.val AS D_RTASK_STATEfrom rout_task rLEFT JOIN sys_dic_val sdv ON sdv.dic_val_no = r.RTASK_ESTATELEFT JOIN (select bb.* from (SELECT * FROM biz_approval ORDER BY applicant_time DESC ) bb group by bb.manager_id) ba ON ba.manager_id = r.RTASK_ID and (ba.approval_type = '113' or ba.approval_type = '169')where 1 = 1AND r.RTASK_FINISH_TIME >= ?AND r.RTASK_FINISH_TIME <= ?AND r.RTASK_ITEM = concat((79965),'')AND ba.approval_status = ?and r.ISDELETED = 'N' ) b on a.RTASK_ID = b.RTASK_IDwhere a.RTASK_ID is null ) ) r;

7、重新执行SQL,复现问题

在disql中单独执行SQL语句,查看问题是否可复现

待补充

记录Coredump文件中所有线程的堆栈信息及对应的SQL语句

(gdb)set logging file <文件名>   #设置输出的文件名称
(gdb)set logging on             #开始将调试信息将输出到指定文件
(gdb)thread apply all bt        #打印所有线程栈信息
(gdb)set logging off            #关闭到指定文件的输出
(gdb)quit                       #结束gdb调试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【爬虫一】python爬虫基础合集一

【爬虫一】python爬虫基础合集一 1. 网络请求了解1.1. 请求的类型1.2. 网络请求协议1.3. 网络请求过程简单图解1.4. 网络请求Headers(其中的关键字释义)&#xff1a;请求头、响应头 2. 网络爬虫的基本工作节点2.1. 了解简单网络请求获取响应数据的过程所涉及要点 1. 网络请求了…

基于SCUI的后台管理系统

一、SCUI Admin 官方地址&#xff1a;https://python-abc.xyz/scui-doc/ 高性能中后台前端解决方案&#xff0c;基于 Vue3、elementPlus 持续性的提供独家组件和丰富的业务模板帮助你快速搭建企业级中后台前端任务。 预览地址&#xff1a;https://python-abc.xyz/scui-doc/de…

vscode不同的项目使用不同的环境变量或编译环境

转载请标明出处&#xff1a;小帆的帆的博客 假如电脑中安装的两套C编译环境&#xff0c;想要切换编译环境时可以在操作系统的环境变量中调整顺序&#xff0c;然后排在前面的环境就会被使用。 这样做的弊端&#xff1a; 麻烦容易忘&#xff0c;忘了项目不报错就可能就不会发现…

知网研学 | 知网文献(CAJ+PDF)批量下载

知网文献&#xff08;CAJPDF&#xff09;批量下载 一、知网研学安装二、插件及脚本安装三、CAJ批量下载四、脚本下载及PDF批量下载浏览器取消拦截窗口 一、知网研学安装 批量下载知网文件&#xff0c;格式为es6文件&#xff0c;需使用知网研学软件打开&#xff0c;故需先安装该…

Mybatis-plus-Join--分页查询

数据表四张&#xff1a; user&#xff1a; id,username,create_time,update_time product&#xff1a; id,name,price,number(库存),create_time,update_times order&#xff1a; id,quantity,order_time(下单时间),update_time order_detail:id,product_id,order_id,quant…

Docker 容器中启用 SSH 服务

在 Docker 容器中运行 SSH 服务需要一些调整&#xff0c;因为 Docker 容器通常使用 init 系统而不是完整的 systemd。以下是配置 SSH 服务在 Docker Ubuntu 容器中运行的步骤&#xff1a; 1. 安装 SSH 服务 如果还未安装 OpenSSH&#xff0c;请先安装&#xff1a; apt update…

运输时间超声波流量计基本原理解析

通过从上游传感器向下游传感器发送超声波脉冲并再次返回来测量流体速度。这些信号沿流向和逆流向交替发射。由于信号在其中传播的流体正在流动&#xff0c;因此超声信号沿流向的传播时间比逆流向的传播时间短。测量由此产生的传输时间差 Δt&#xff0c;并允许流量计确定沿超声…

【大模型】大模型项目选择 RAGvs微调?

RAG 输入问题&#xff0c;在知识库匹配知识&#xff0c;构建提示词&#xff1a;基于{知识}回答{问题} 微调 用知识问答对重新训练大模型权重&#xff0c;输入问题到调整后的大模型 如何选择 如果业务要求较高&#xff0c;RAG和微调可以一起使用 1-动态数据 选择RAG 原因&a…

<mutex>注释 11:重新思考与猜测、补充锁的睡眠与唤醒机制,结合 linux0.11 操作系统代码的辅助(上)

&#xff08;46&#xff09;问题的起源&#xff1a; 因为上面的内核代码&#xff0c;我们编写多线程代码时&#xff0c;对手里的家伙事不那么自信。但我们知道&#xff0c;多线程在竞争锁时&#xff0c;若得不到锁&#xff0c;会进入睡眠&#xff0c;并会在被唤醒后重新尝试得…

flask_socketio 以继承 Namespace方式实现一个网页聊天应用

点击进入上一篇&#xff0c;可作为参考 实验环境 python 用的是3.11.11 其他环境可以通过这种方式一键安装&#xff1a; pip install flask3.1.0 Flask-SocketIO5.4.1 gevent-websocket0.10.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pip list 详情如下&am…

LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度

本代码的主要功能是建模 LOS&#xff08;视距&#xff09;和 NLOS&#xff08;非视距&#xff09;环境下的定位系统&#xff0c;估计目标的动态位置&#xff0c;三维空间 文章目录 运行结果源代码代码介绍 总结 运行结果 10个点的轨迹定位&#xff1a; 50个点的轨迹定位&#…

Centos创建共享文件夹拉取文件

1.打开VMware程序&#xff0c;鼠标右检你的虚拟机&#xff0c;打开设置 2.点击选项——共享文件夹——总是启用 点击添加&#xff0c;设置你想要共享的文件夹在pc上的路径&#xff08;我这里已经添加过了就不加了&#xff09; 注意不要中文&#xff0c;建议用share&#xff0c…

【一文了解】C#重点-委托1

本篇文章来学习一下C#的委托&#xff0c;委托是C#中的一个重要概念&#xff0c;它允许将方法作为参数传递给其他方法。C#中的委托类似于C或C中的函数指针&#xff0c;并且类型安全。 委托 1.委托的定义 委托&#xff08;delegate&#xff09;是方法的代理/代表&#xff0c;委托…

C++算法第十一天

本篇文章我们继续学习动态规划 目录 第一题 题目链接 题目解析 代码原理 代码编写 第二题 题目链接 题目解析 代码原理 代码编写 第三题 题目链接 题目解析 代码原理 代码编写 第四题 题目链接 题目解析 代码原理 代码编写 第五题 题目链接 题目解析 代…

【Linux】结构化命令:until命令

until命令与while命令相反&#xff0c;它要求指定一个返回非0退出状态码的测试命令。只要测试命令的退出状态码不为0&#xff0c;bash shell就会执行循环中列出的命令&#xff1b;一旦测试命令返回了退出状态码0&#xff0c;循环结束。 可以放入多个test command测试命令&…

[x86 ubuntu22.04]投影模式选择“只使用外部”,外部edp屏幕无背光

1 问题描述 CPU&#xff1a;G6900E OS&#xff1a;ubuntu22.04 Kernel&#xff1a;6.8.0-49-generic 系统下有两个一样的 edp 屏幕&#xff0c;投影模式选择“只使用外部”&#xff0c;内部 edp 屏幕灭&#xff0c;外部 edp 屏幕无背光。DP-1 是外部 edp 屏幕&#xff0c;eDP-1…

WPF 完美解决改变指示灯的颜色

WPF 完美解决改变指示灯的颜色 原有&#xff1a;自己再做WPF页面设计后发现直接去查找页面多个控件嵌套情况下找不到指示灯&#xff08;Button实现的&#xff0c;详细可以看这篇文章 这里&#xff09;&#xff0c;具体看看来如何实现 加粗样式思路&#xff1a;无论多级嵌套&a…

【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?

要在 Windows 上编译 etcd 及 etcdctl 工具&#xff0c;并使用 bat 脚本启动 etcd 集群&#xff0c;首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤&#xff1a; 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…

34. Three.js案例-创建球体与模糊阴影

34. Three.js案例-创建球体与模糊阴影 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染 3D 场景的核心类。它负责将场景中的对象绘制到画布上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersObject可选参数对象&#xff0c;包…

从源码分析swift GCD_DispatchGroup

前言&#xff1a; 最近在写需求的时候用到了DispatchGroup&#xff0c;一直没有深入去学习&#xff0c;既然遇到了那么就总结下吧。。。。 基本介绍&#xff1a; 任务组&#xff08;DispatchGroup&#xff09; DispatchGroup 可以将多个任务组合在一起并且监听它们的完成状态。…