一、简介

DM 实例故障,即数据库进程 dmserver 出现异常,表现为异常中止,进程存在但无响应或者无法登录的状态,出现此类问题都属于比较严重的故障,一般情况下我们需要尽可能的收集到所需要的信息进行故障分析,这里我们将把故障分为两类,来讲下出现类似场景时需要收集哪些有价值内容供后续处理。
先简单说明下我们可能会用到的工具和一些术语:

  1. core 文件:程序异常时操作系统保留的完整进程的内存镜像文件。
  2. gdb:用于调试执行程序或者 core 文件的工具。
  3. 堆栈:程序执行中的运行情况,详细包含了运行时函数调用数据以及数据相关信息。
  4. dmrdc:DM 数据库提供的自带对 core 文件进行简单分析的小工具,以 core 文件作为输入参数,dmrdc 可以从 core 文件中读出所有异常时活动会话上的 SQL 语句信息。

前提

需要提前配置好服务器的Core的生成规则:配置core生成规则

二、宕掉DM生成Core

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

  1. 执行以下sql语句,创建一张测试表,并且插入一些数据,保证有较长的执行时间。
CREATE TABLE TESTCOER(ID INT);
INSERT INTO TESTCOER SELECT LEVEL FROM DUAL CONNECT BY LEVEL <10000500;
  1. 使用以下命令查询数据库进程PID,并且使用kill -11强杀进程
-- 命令查询数据库进程PID,并且使用kill -11强杀进程。core文件就会指定的目录下生成[root@VM-24-17-centos bin]# ps -ef|grep dms
dmdba    2297221       1  8 20:16 pts/0    00:00:04 /opt/dmdbms/bin/dmserver path=/opt/dmdata/DAMENG/dm.ini -noconsole
root     2297413 2289093  0 20:17 pts/0    00:00:00 grep --color=auto dms
[root@VM-24-17-centos bin]# kill -11 2297221//查找生成的core文件
[root@VM-24-17-centos bin]# ll -lht core.*
-rw------- 1 dmdba dinstall 4033536000 4月  18 20:17 core.2297221

三、GDB分析已有Core文件+dmrdc解析

当数据库异常中断宕机产生core文件,通过GDB分析core文件来判断造成数据库宕机的原因。

// 1. 查找生成的core文件
[dmdba@VM-0-17-centos bin]$ ll -lht core.*
-rw------- 1 dmdba dinstall 1.4G 3月  24 15:49 core.12593
// 2. gdb读取core文件
[dmdba@VM-0-17-centos bin]$ gdb ./dmserver core.12593
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

// 3. 定义存储堆栈的文件名
(gdb) set logging file core_12593.txt
(gdb) set logging on
Copying output to core_12593.txt.// 4. 记录当前所有崩溃线程堆栈
(gdb)  thread apply all bt
Thread 67 (Thread 0x7f2e3e816700 (LWP 18366)):// 5. 关闭向文件中写入
(gdb) set logging off
Done logging to core_12593.txt.// 6.记录当前崩溃线程堆栈
(gdb) bt
#0  0x000000000007875e in ?? ()
#1  0x00007f2ea574c9c9 in CRYPTO_THREAD_run_once () from ./libcrypto.so
#2  0x00007f2ea5712401 in RAND_get_rand_method () from ./libcrypto.so
#3  0x00007f2ea571268d in RAND_add () from ./libcrypto.so
#4  0x0000000000879e0d in dm_dh_gen_respective_key ()
#5  0x000000000150dd72 in ntsk_process_startup ()
#6  0x000000000150fcde in ntsk_process_cop ()
#7  0x0000000001415c80 in uthr_db_main_for_sess ()
#8  0x00007f2ea7f9cea5 in start_thread () from /lib64/libpthread.so.0
#9  0x00007f2ea74b7b0d in clone () from /lib64/libc.so.6// 7. 记录当前崩溃线程号
//输入 info threads 记录当前崩溃线程号:
(gdb)  info threads
//备注
//前面有*为当前线程,LWP后面为线程号
Id   Target Id                           Frame
* 1    Thread 0x7f7daae63740 (LWP 2297221) 0x000000000155a117 in assert_fun ()
2    Thread 0x7f7d27b4f700 (LWP 2297225) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
3    Thread 0x7f7d27237700 (LWP 2297228) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
4    Thread 0x7f7d27338700 (LWP 2297227) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
5    Thread 0x7f7c4bfff700 (LWP 2297309) 0x00007f7da9c2ca41 in poll () from /lib64/libc.so.6
6    Thread 0x7f7d27136700 (LWP 2297229) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
7    Thread 0x7f7d25b6c700 (LWP 2297248) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
8    Thread 0x7f7d26429700 (LWP 2297242) 0x00007f7daa8296e8 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
9    Thread 0x7f7c4b7fe700 (LWP 2297310) 0x00007f7da9c2ca41 in poll () from /lib64/libc.so.6
10   Thread 0x7f7d26f34700 (LWP 2297231) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
11   Thread 0x7f7d2596a700 (LWP 2297250) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
12   Thread 0x7f7c601af700 (LWP 2297325) 0x00007f7daa82cfb0 in nanosleep () from /lib64/libpthread.so.0
13   Thread 0x7f7c485f7700 (LWP 2297326) 0x00007f7da9c2f29f in select () from /lib64/libc.so.6
14   Thread 0x7f7d26d32700 (LWP 2297233) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
15   Thread 0x7f7d25edd700 (LWP 2297255) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
16   Thread 0x7f7d2652a700 (LWP 2297241) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
17   Thread 0x7f7c3fff7700 (LWP 2297380) 0x00007f7daa82c8e4 in read () from /lib64/libpthread.so.0
18   Thread 0x7f7d26c31700 (LWP 2297234) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
19   Thread 0x7f7c610b7700 (LWP 2297269) 0x00007f7daa8296e8 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
20   Thread 0x7f7c3e8f5700 (LWP 2297381) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
21   Thread 0x7f7d26b30700 (LWP 2297235) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
22   Thread 0x7f7d26a2f700 (LWP 2297236) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
23   Thread 0x7f7d2692e700 (LWP 2297237) 0x00007f7daa8292fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0(gdb) info threads// 8.使用dmrdc工具生成SQL语句
[root@VM-24-17-centos bin]# ./dmrdc sfile=core.12593
dmrdc V8
Analysing: 0/4033536000
Analysing: 31457268/4033536000
Analysing: 62914536/4033536000
-- 中间部分省略
Analysing: 3995073036/4033536000
Analysing: 4026530304/4033536000
ֻ¸												

【与达梦同行】数据库coredump的几种常用生成方式+dmrdc使用相关推荐

  1. 【与达梦同行】数据库升级实战教程

    1 背景 众所周知,IT行业发展日新月异.IT技术革新也是以迅猛著称. 达梦作为最优秀数据库厂商之一在数据库的研发上也是不遗余力,根据市场,客户,前沿技术稳定的对达梦数据库进行迭代. 达梦的数据库新版 ...

  2. 【与达梦同行】达梦数据库SQL去掉sort

    SQL优化是一个比较复杂的事情,想要做好优化一要靠扎实的技术功底,二要靠丰富的实践经验,这里来谈一下SQL优化中的sort优化问题. 在之前的优化经验中,错误的任务只要结果集不大,含有order by ...

  3. 【与达梦同行】DM8适配JetBrains_Exposed框架

    一.背景 近期,用户使用 Kotlin语言的 ORM 框架JetBrains/Exposed框架进行开发需要适配达梦数据库,查看Exposed官网发现原生支持的数据库不包含达梦数据库,随后进行适配操作 ...

  4. 【与达梦同行】达梦驱动图谱

    达梦驱动图谱 摘要 达梦提供了大部分主流开发语言的驱动接口,在我用使用过的国产数据库中对客户端驱动的支持应该算是非常不错的.本文主要介绍达梦的驱动开发,通过实际操作,从环境搭建到实践验证,介绍了达梦各 ...

  5. oracle数据库dblink创建语句_3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...

    1. 循序渐进-达梦DM8数据库安装部署初体验-07/16 简介: 本讲座主要介绍达梦DM8数据库软件安装与数据库创建. 2019年5月,DM8发布. 基于新技术发展的思考和市场的需求,坚持实用性.通 ...

  6. 3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...

    1. 循序渐进-达梦DM8数据库安装部署初体验-07/16 简介: 本讲座主要介绍达梦DM8数据库软件安装与数据库创建. 2019年5月,DM8发布. 基于新技术发展的思考和市场的需求,坚持实用性.通 ...

  7. 三场直播丨达梦DM8数据库体系结构、从零快速搭建一整套监控体系、Oracle Database Server经典体系结构...

    1.  达梦DM8数据库的体系结构介绍 2. 触类旁通– Oracle Database Server经典体系结构 3. 如何从零快速搭建一整套监控体系(日志采集+主机+数据库)

  8. 达梦dm8可视化工具_DM8(达梦8)数据库安装和使用

    达梦8(DM8)数据库入门及使用 to 达梦大学 刘秀君原创,抄袭必究 目录 1     介绍 武汉达梦数据库有限公司成立于2000年,为中国电子信息产业集团(CEC)旗下基础软件企业,专业从事数据库 ...

  9. 达梦DM数据库—线上培训学习简记

    达梦DM数据库-线上培训学习简记 (20200812) 有幸参加国内领先的达梦数据库(自主研发)的线上学习,达梦的老师都非常的NICE, 遇到问题会非常耐心的线上解答.现将这次的学习中的一些知识点做了 ...

最新文章

  1. python培训班价格-北京Python班
  2. 爬虫实战:链接爬虫实战
  3. OpenCV背景扣除Background subtraction的实例(附完整代码)
  4. 国内机床发展水平和现状
  5. 让jQuery Tools Scrollable控件在Mobile Web里面支持resize功能
  6. python计算现场得分_浅谈用 Python 计算文本 BLEU 分数
  7. 面试题:如何设计一个高并发的系统?
  8. java定义int函数_Java自定义函数的四种类型
  9. 计算机安全日志,如何回复被删除的电脑安全日志
  10. GridLayout将布局管理器设置为三行一列
  11. python是什么专业-python有什么用(会计专业)
  12. 小巧票据打印软件免费下载
  13. python编码无法使用turtle库_使用Turtle库教Python
  14. 【UE4】特效之 Particle System 详解(二)—— 特效池
  15. Ubuntu 命令大全 Ubuntu技巧
  16. 多媒体图像切换与中值区分法
  17. 2023年商标注册流程
  18. 灵境(元宇宙)金融投资及监管的探讨
  19. 计算机主板diy,DIY电脑配件立即选——主板篇
  20. 王者荣耀助手动态服务器维护中,王者荣耀助手动态怎么发不了 | 手游网游页游攻略大全...

热门文章

  1. 希望大家多点祝福给家人
  2. Google发布J2ObjC 1.0:将Java转换为Objective-C
  3. 线上直播课程软件下载安装
  4. 计算机信息管理(企业管理方向),湖南工程职业技术学院计算机信息管理(企业信息化方向)专业介绍...
  5. RocketMQSpringTask
  6. 【WinForm】设置TextBox只能输入整数或数字
  7. yield的使用和在scrapy框架中的使用
  8. redis 主从配置参数详解
  9. Linux-日志管理
  10. request_irq函数介绍