点击上方“IT实战联盟”,关注“公*众*号”

领导要高高在上

平时多听听他人的意见

然后认真记下来到底是谁对你有意见

背景

很少用的一个业务后台管理端需要导入一批数据(200多条),用户在导入的时候没有成功。业务场景比较复杂,需要将每条数据去数据库匹配、关联、分析后再将结果进行更新。大约涉及5张表、3000多万笔数据。

报错日志分析

从报错日志上来看,主要是由于连接时间过长,导致连接失效。那么那失效的连接去请求数据库就会报上图的异常。

排查步骤

第一步:检查数据库连接池设置的超时时间

首先想到的是项目中配置的数据库连接池超时时间设置小了,具体配置如下:

spring.datasource.max-wait: 120000

那就“豪放”一点加个 0 ,测试发现依然报错。

第二步:分析报错数据

连接池的超时时间没有问题那就分析一下具体的报错数据,是否由于数据原因导致。修改日志级别(由于该功能一直在正常使用,日志级别是debug),将报错数据进行输出。排除因导入文件格式、内容编码格式等因素。

根据打印的数据拼接SQL到数据库进行执行也是正常的,接着连续重试多次上传功能每次引起报错的数据也不是同一个。

第三步:分析业务SQL

首先反应的是代码块有慢SQL导致连接超时,根据日志报错的代码行将SQL单独执行是毫秒级的,并且只有一个用户操作是单线程,这样也不存在并发现象。

排除慢SQL 问题。

第四步:分析底层报错日志

项目业务和SQL层面排查完毕后,没有定位到问题根本原因,只能继续分析报错日志。

从上图看到和查询结果集的数据类型有关,难道匹配的数据存在null、或者类型有问题?再一次执行了报错数据,认真的检查了一遍数据类型和数据信息都正常,没有特别的地方。

到这里卡壳了......

第五步:求助 MySQl Bug 网站

其实已经定位到是mysql 的问题,但是具体原因和解决方案还没有找到,这里只能到MySQL Bug 官网去碰一碰运气。

https://bugs.mysql.com/bug.php?id=41484

找到了和我们一样的问题记录,大致是 mysql 连接池的某个版本的Bug,这里赶紧看一下自己项目中用的是哪个版本:

compile('mysql:mysql-connector-java:5.1.39')

虽然从版本来看是比较低,但是找了一圈也没有看到从哪个版本起修复了这个问题,难道要升级到最新的8.x ?

但是项目是比较老的,升级后需要经过完整的回归测试才行,并且短时间内没办法进行全面的测试。

第六步:临时升级 mysql-connector-java

经团队讨论可以进行临时的升级解决用户的问题,然后再降级优化业务逻辑解决问题,甚至后续可以进行重构。

升级为 6.x......

执行......

问题依然存在!!!

第七步:求助 DBA

半夜打 DBA 电话帮忙看一下数据库层面是否可以给一些建议,DBA 查询数据库设置超时时间:

show global variables like '%timeout%';

等待时间只有 180 秒,其他数据库的超时时间都是 28800(默认8小时)。

修改数据库超时时间为28800,再次执行成功。

总结

最近数据库做过迁移,DBA 回复这个超时时间应该都是统一默认的,不知道在什么时候被修改了。

虽然通过修改数据库设置的方式解决了问题,但是在业务设计层面也存在问题。整个上传服务前同事用的是一个大事务,要么全部成功,要么全部失败。在业务量小的时候是不会遇到这个问题的,但是随着需求的不断迭代,系统的复杂度越来越高就暴露出来了。

无意中发现了 mysql 连接的一个bug,虽然比较老但是也有收获。

欢迎大家关注“IT实战联盟”*公*众*号,后续有更多的踩坑问题分享给大家......

踩坑日记(一):半夜打DBA电话解决数据库连接超时自动回滚问题相关推荐

  1. 全志哪吒D1-H Tina Linux Ubuntu 22.04入门踩坑日记

    哪吒D1-H Tina Linux入门踩坑日记 系统环境 源码编译 mklibs-readelf的C++标准问题 m4的SIGSTKSZ问题 libfakeroot的_STAT_VER问题 read_ ...

  2. Win11 + Ubuntu18.04 双系统踩坑日记

    Win11 + Ubuntu18.04 双系统踩坑日记 前言 准备工作 硬件配置 镜像下载 Win11镜像下载 Ubuntu镜像下载 启动盘准备 Win11启动盘 Ubuntu启动盘 Win11安装 ...

  3. 【Flutter混合开发踩坑日记之‘applicationVariants‘ for extension ‘android‘】

    Flutter混合开发踩坑日记之'applicationVariants' for extension 'android' 正文 坑一:Could not get unknown property ' ...

  4. Swarm-BZZ踩坑日记之 如何让METMASK小狐狸显示gbzz

    刚入门bzz的新手还不知道小狐狸是什么的请移步上一章节:Swarm-BZZ踩坑日记之 如何在METMASK小狐狸导入节点地址 在浏览器安装好小狐狸,并添加自己的钱包地址后 会发现只显示ETH,并不显示 ...

  5. ReactNative 在丁香医生项目中引入的踩坑日记

    ReactNative 在丁香医生项目中引入的踩坑日记 this没绑定到函数导致空指针 参考 React-Native 踩坑第二弹-undefined is not a function(evalua ...

  6. springboot踩坑日记—nacos: Error watching Nacos Service change

    springboot踩坑日记-nacos: Error watching Nacos Service change Spring Boot :: (v2.1.5.RELEASE) 错误代码: 07-3 ...

  7. 微信小程序踩坑日记-微信小程序首次加载样式错乱问题

    微信小程序踩坑日记-微信小程序首次加载样式错乱问题 在实际开发项目中,遇到了个棘手的问题,就是在某些因素下,进入小程序发现有些样式发生偏移.错乱等问题 问题原因:-未知(估计是组件的问题) ↓ 解决办 ...

  8. c++字符串操作之std::ostringstream踩坑日记

    c++字符串操作之std::ostringstream踩坑日记 在开发过程中经常会遇到字符串操作,而std::string又没有format操作,这就很难受了. 于是我找到了std::ostrings ...

  9. Antd Pro V4 protable详解(ps:踩坑日记)

    Antd Pro V4 protable详解(ps:踩坑日记) 写在前面: 在这篇文章中,你会了解到: protable 中的cloumns属性详解 protable数据加载和处理(两种方法,直接使用 ...

  10. midjourney指令笔记+踩坑日记+gpt论文润色指令

    跟人拼团入手了midjourney,长期记录更新. midjourney指令笔记+踩坑日记 指令笔记 踩坑日记 GPT论文润色指令 指令一 指令二 指令三 指令四 指令五 指令笔记 关键词参考网址:p ...

最新文章

  1. 互联网人的平均时长,居然这么短...
  2. 如何用python绘图、柱形图、线形图等_python使用Plotly绘图工具绘制散点图、线形图...
  3. “他们”最想要的圣诞礼物是你的...
  4. Linux学习:shell命令(文件权限、用户、用户组)
  5. OpenCASCADE绘制测试线束:几何命令之预测
  6. c#字符串操作方法实例
  7. push模式的水晶报表,参数的设置要放在数据源设置之后
  8. 单片机中通用的类型别名
  9. 电脑海尔电脑,海尔台式电脑好吗,海尔主机
  10. maven的setting文件简单配置
  11. 2017北京国庆刷题Day2 afternoon
  12. 最透彻的关于“随机数种子”和“伪随机数”的产生原理
  13. vue-router模块划分
  14. VS2019打包教程
  15. 常用の工具(update 22.11.11)
  16. java 调用本地播放器_Java调用本地播放器播放视频文件
  17. xshell双击无反应
  18. matlab实用小程序段 —— 串口发送和读取
  19. 【LeeCode】赛题02:Python解答大衍数列题目
  20. 使用Fiddler实现网络限速,模拟低速网络

热门文章

  1. 编译LTIB遇到的问题解决办法
  2. /proc/meminfo之谜
  3. 1110 Complete Binary Tree (25 分)(搜索)
  4. pcie16x能插1x的卡嘛?_关于电脑能正常进系统但是进bios黑屏的解决办法(DP线连接)...
  5. HashMap简单小结
  6. 哈夫曼树的生成详解(C++)
  7. qtp java_QTP Java swing 一些控件的遍历
  8. html----js控制下拉框(详解
  9. python如何执行代码_在Python中重新运行代码块
  10. linux安装后root密码错误,linux新安装后root密码设置