DM8 分析core 文件

本文介绍了如何通过core文件来诊断达梦数据库的SQL执行问题。当数据库宕机时,可通过设置ulimit-cunlimited生成core文件,然后使用dmrdc工具解析core文件获取SQL语句。在DEBUG版本中,可以使用gdb进行更深入的分析。文章还提供了生成和解析core文件的步骤,并提到了gdb的安装和使用。
摘要由CSDN通过智能技术生成

core文件的作用:
● 有 CORE文件, 通过CORE文件,找出正在执行的SQL。
● 没有CORE文件,通过跟踪日志文件,找出宕机前最后一条执行的SQL 。

01| 主动产生core

副作用:重启时间很长,也可能无法启动成功。

# 设置环境变量ulimit -c unlimited,程序崩溃后就会在当前目录下生成core文件。
  ulimit -c unlimited
  kill -SIGSEGV pid 

在这里插入图片描述

02| 查看core

默认core文件生成位置:$DM_HOME/bin
在这里插入图片描述

03| 解析core文件

1. RELEASE 版服务器

通过 dmrdc 命令行工具分析core文件获取其中的SQL语句,该工具会将分析的SQL保存在结果文件中。

dmdba@whx01 192.168.1.20 16:59:31 [pwd:~/dm8/dm_home/bin]$ dmrdc help
dmrdc V8

version: 03134283890-20220304-158322-10045
格式: ./dmrdc  KEYWORD=value
例程: ./dmrdc  SFILE=/src_file

关键字              说明(默认值)
---------------------------------------------------------------------
SFILE              源文件路径(必选项)
DFILE              目标文件路径(可选项),若未指定该参数,则目标文件名
                   默认为[源文件名_tmp]
HELP               打印帮助信息

举例

执行SQL查询
SQL> SELECT * FROM TEST.bmsql_order_line LIMIT 1000000;


# 生成core文件
root@whx01 192.168.1.20 16:57:37 [pwd:~]# ps -ef | grep dmserver
dmdba     56632      1  0 16:36 pts/1    00:00:04 /home/dmdba/dm8/dm_home/bin/dmserver path=/dm8/data/DW01/dm.ini -noconsole mount
root      56856   2050  0 16:58 pts/1    00:00:00 grep --color=auto dmserver
root@whx01 192.168.1.20 16:58:02 [pwd:~]# kill -SIGSEGV 56632

# 查看core
dmdba@whx01 192.168.1.20 16:59:06 [pwd:~/dm8/dm_home/bin]$ ll | grep core
-rw-------. 1 dmdba dinstall 2911256576 May 29 16:58 core.56632



# 解析core文件
dmdba@whx01 192.168.1.20 16:59:37 [pwd:~/dm8/dm_home/bin]$ ./dmrdc SFILE=core.56632

# 生成的结果文件为core_tmp.56632
dmdba@whx01 192.168.1.20 17:00:16 [pwd:~/dm8/dm_home/bin]$ ll | grep core
-rw-------. 1 dmdba dinstall 2911256576 May 29 16:58 core.56632
-rw-r--r--. 1 dmdba dinstall        127 May 29 17:00 core_tmp.56632

dmdba@whx01 192.168.1.20 17:00:37 [pwd:~/dm8/dm_home/bin]$ vi core_tmp.56632 
!#%&*^$@[-1]:ALTER DATABASE SUSPEND^@^@^@^@^@^@^@^@^@^@^@^@
!#%&*^$@[56755]:SELECT * FROM TEST.bmsql_order_line LIMIT 1000000;^@^@^@^@^@^@^@^@^@^@^@^@

2. debug版本

利用gdb分析core
gdb dmserver core文件

一般第一个线程里面正在执行的sql语句就是故障SQL语句。
Where或者bt命令,打印堆栈
如果堆栈中有函数
1)ntsk_process_exec、ntsk_process_prepare、ntsk_process_prepare_and_exec :

  • f 到该层,通过p sess->sqls 取到SQL语句。

2)vm_run_pln

  • f 到该层,通过p pln->sqlstr 取到SQL语句。

有时SQL语句过长,而这里显示的SQL语句有限,可以先执行set print element 0

dmdba@whx01 192.168.1.20 17:34:39 [pwd:/etc/yum.repos.d]$ yum provides gdb
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.tuna.tsinghua.edu.cn
gdb-7.6.1-120.el7.x86_64 : A GNU source-level debugger for C, C++, Fortran, Go and other languages
Repo        : base



dmdba@whx01 192.168.1.20 17:40:24 [pwd:/etc/yum.repos.d]$ sudo yum install -y gdb-7.6.1-120.el7.x86_64
dmdba@whx01 192.168.1.20 17:40:24 [pwd:/etc/yum.repos.d]$ gdb dmserver core.56632

附:友情链接链接

达梦技术社区:https://eco.dameng.com

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值