今天分析了另外一个关于数据库延迟跳动的问题,也算是比较典型,这个过程中也有一些分析问题的方法和技巧工参考。

首先在高可用检测中,有一套环境的检测时断时续,经过排查发现是数据库产生了延迟,在登录到从库show slave status查看,会发现Seconds_behind_master的值是不断跳动的,即从0~39~0~39这样的频率不断跳动,让人很搓火。

查看数据库的相关日志发现竟然没有任何可以参考的日志记录,怎么分析这个问题呢,我们先来复现,于是我按照节奏抓取了3次问题出现的日志,即通过show slave status连续监测,抓取show slave status输出的结果保存下来,这样我们就得到了一个问题发生过程中的偏移量变化,而这个变化则是在SQLThread在回放过程中产生的问题。

比如下面的一段输出,我截取的是Slave端的relay log进行分析,相应的字段为Relay_Log_Pos

Slave_IO_State: Waiting for master to send event         Master_Host: xxxx         Master_User: dba_repl         Master_Port: 4306        Connect_Retry: 60       Master_Log_File: mysqlbin.000044     Read_Master_Log_Pos: 386125369        Relay_Log_File: slave-relay-bin.000066        Relay_Log_Pos: 386125580    Relay_Master_Log_File: mysqlbin.000044

接着我使用mysqlbinlog开始分析这些日志过程中的明细,根据如下的命令可以很快得到转储的日志中相关的表有3张。

# grep INSERT relaylog_xxxx.dump |awk '{print $3 " " $4}'|sed 's/INTO//g'|sort|uniq act_action_exec_info act_join_desc dic_subsidy_marketing_querylog_202008
# mysqlbinlog slave-relay-bin.000066 | grep "GTID$(printf '\t')last_committed" -B 1 \>                   | grep -E '^# at' | awk '{print $3}' \>                   | awk 'NR==1 {tmp=$1} NR>1 {print ($1-tmp);tmp=$1}' \>                   | sort -n -r | head -n 100mysqlbinlog: [Warning] unknown variable 'loose-default-character-set=utf8'527852685268526852535253525352535253

进一步分析发现,整个业务使用了显示事务的方式:SET autocommit=0,整个事务中包含了几个大SQL,里面存储了很多操作日志明细,而且在事务操作过程中还基于Mybatis框架调用了多次select count(1) from xxx的操作。

经过和业务沟通也基本明确了以上问题。

更多相关文章

  1. Linux下MYSQL 5.7 找回root密码的问题(亲测可用)
  2. Android(安卓)10 定位问题,获取NMEA(支持5.0~10.0)
  3. mybatisplus的坑 insert标签insert into select无参数问题的解决
  4. python起点网月票榜字体反爬案例
  5. 《Android开发从零开始》——25.数据存储(4)
  6. Android系统配置数据库注释(settings.db)
  7. Android中不同应用间实现SharedPreferences数据共享
  8. 关于Android(安卓)Studio3.2新建项目Android(安卓)resource link
  9. Android软键盘适配问题

随机推荐

  1. MyBatis 的 四 个妙用
  2. 数据库迁移搞炸了!没用这款开源神器的锅?
  3. Mall电商实战项目专属学习路线,主流技术一
  4. Serverless 如何应对 K8s 在离线场景下的
  5. 如何快速往cloud shell中传送文件
  6. PMP考试心得
  7. Spring Cloud第二篇:服务消费者RestTempla
  8. SpringBoot第二十五篇:2小时学会springboo
  9. 今日报错系列:void * 类型的函数形参,该如
  10. Spring Cloud第三篇:服务消费者Feign