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