gdb 优化mysql_故障分析 | 崩溃恢复巨慢原因分析

作者:xuty

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

一、现象

有个 MySQL 5.7 开发库异常挂掉后,奔溃恢复一直处于如下位置,且持续了 2 小时左右才起来。非常疑惑这段时间 MySQL 到底做了什么事情?居然需要这么长时间。虽说这里虚拟机的 IOPS 并不是很高,但也绝对不需要这么久吧?而且从日志输出来看,这块应该也不是在做真正的数据恢复,那么也可以排除是大事务回滚导致的耗时长,那么原因到底是啥呢?

值得注意的是,这台开发库上面有将近 1500 个库和上万张表,难道MySQL 崩溃恢复时长和表的数量也存在一定关系嘛?

476197aedad1a84db6109402d76bcaff.png

二、分析栈帧

在 MySQL 崩溃恢复时,用pstack打了栈帧,再用pt-pmp工具分析栈帧后显示如下:

pread64(libpthread.so.0),os_file_io(os0file.cc:5435),os_file_pread(os0file.cc:5612),os_file_read_page(os0file.cc:5612),os_file_read_no_error_handling_func(os0file.cc:6069),pfs_os_file_read_no_error_handling_func(os0file.ic:341),Datafile::read_first_page(os0file.ic:341),Datafile::validate_first_page(fsp0file.cc:551),Datafile::validate_to_dd(fsp0file.cc:404),fil_ibd_open(fil0fil.cc:3969),dict_check_sys_tables(dict0load.cc:1465),dict_check_tablespaces_and_store_max_id(dict0load.cc:1525),innobase_start_or_create_for_mysql(srv0start.cc:2329),innobase_init(ha_innodb.cc:4048),ha_initialize_handlerton(handler.cc:838),plugin_initialize(sql_plugin.cc:1197),plugin_init(sql_plugin.cc:1538),init_server_components(mysqld.cc:4033),mysqld_main(mysqld.cc:4673),__libc_start_main(libc.so.6),_start根据函数名字,感觉像是在遍历校验每个表空间文件的有效性?,难道 MySQL 崩溃恢复时会额外进行校验操作?貌似和表数量扯上点关系了。

三、GDB 调试Server version: 5.7.26-log MySQL Commu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL(或其它任何程序)由于某种原因崩溃时,可能会生成一个核心转储文件(也称为 coredump)。 这个文件包含了程序崩溃时的内存映像和调用栈信息,可以通过 GDB(GNU 调试器)分析来了解崩溃原因。 下面是使用 GDB 分析 MySQL 核心转储文件的步骤: 1. 安装 GDB 如果您的系统上还没有 GDB,请使用适合您系统的包管理器进行安装。例如,在 Ubuntu 上,可以使用以下命令安装 GDB: ``` $ sudo apt-get install gdb ``` 2. 启动 GDB 使用以下命令启动 GDB,并将 MySQL 核心文件作为参数传递给它: ``` $ gdb /usr/sbin/mysqld /path/to/core ``` 其中,`/usr/sbin/mysqld` 是 MySQL 二进制文件的路径,`/path/to/core` 是核心文件的路径。 3. 设置符号文件 使用以下命令设置符号文件路径: ``` (gdb) symbol-file /usr/sbin/mysqld ``` 这将告诉 GDB分析核心文件时使用正确的符号信息。 4. 查看调用栈 使用以下命令查看调用栈: ``` (gdb) bt ``` 这将显示崩溃时的调用栈信息。 5. 分析代码 通过查看调用栈信息和源代码,可以确定崩溃原因。例如,如果调用栈信息显示崩溃发生在某个 MySQL 函数中,可以查看该函数的源代码以了解问题所在。 以上是使用 GDB 分析 MySQL 核心转储文件的基本步骤。请注意,这需要一些对 GDBMySQL 的了解。如果您不确定如何分析核心文件,请考虑寻求专业帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值