一个数据库死锁竟然被测试发现了,这你敢信

京东云开发者
• 阅读 224

测试生产监控发现数据库死锁报错:org.springframework.dao.DeadlockLoserDataAccessException:

Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found



测试是通过什么方式发现呢?



一个数据库死锁竟然被测试发现了,这你敢信



还要从前一段时间老刘对我的疑问开始说起。

老刘:理赔系统上线后,不能进行生产验证,作为测试你要怎么避免生产问题呢

我:目前对生产的验证只能联系业务人员进行生产验证

老刘:那我们测试这边调研一下,看一下有什么方法

我:好的,我去看一下有没有适合的集团工具可以对生产异常数据进行统计



就是这样的一个对话,让我发现了EasyBI工具,和这个工具的缘分就开始了

首先,给大家介绍一个这个工具,它可以做什么呢?它可以通过连接生产数据库或者接口开发的形式进行生产数据统计,以聚合表、透视表、柱状图、折线图、雷达图等进行图形化配置,并将整个数据情况都汇总到统一的监控调度中心。



那我又是怎么怎么使用EasyBI工具解决了生产数据监控问题呢

首先,我根据自己系统的业务类型,开发了几个接口,生产数据异常的接口、生产理赔数量统计接口、生产TOP5理赔数据统计接口等

然后,按照EasyBI工具使用文档进行了配置,详细操作请看以下分析

(一)数据接入

把开发的接口在EasyBI工具平台(EasyBI (jd.com))进行配置



一个数据库死锁竟然被测试发现了,这你敢信



(二)应用配置

创建应用,把配置好的接口数据以聚合表、柱状图、等进行图形化配置,以该形式展示监控数据



一个数据库死锁竟然被测试发现了,这你敢信



(三)订阅管理

配置好应用后,对此应用进行邮件订阅,定时任务推送生产数据监控的结果



一个数据库死锁竟然被测试发现了,这你敢信



(四)监控数据分析

非车核心理赔数据统计接口:目前分为三类,分别是是错误信息统计接口、周失败和成功统计接口、日失败和成功统计接口

◦错误信息统计接口

▪1.1 通过对理赔不同的错误信息进行分类,统计出当天、本周、上周和上上周各个错误信息的个数,通过数据对比能够及时发现 当前系统的稳定性、理赔数据正确性、业务逻辑校验合理性

▪1.2 理赔不同的错误信息统计通过easyBI平台明细表分类展示

▪1.3 通过理赔错误类型及时判断是正常业务校验或者是异常问题



一个数据库死锁竟然被测试发现了,这你敢信



•周失败和成功统计,日成功和失败数据接口

▪2.1 针对团险的主流产品、个险的主流产品、理赔系统进行连续一周或者当天的理赔成功数据和错误数据统计,通过对比及时发现主流产品理赔业务的正确性,保证客户理赔的时效性

▪2.2 周数据根据商品计划在easyBI平台以柱状图展示,日数据根据商品计划在easyBI平台以条形图展示





一个数据库死锁竟然被测试发现了,这你敢信







一个数据库死锁竟然被测试发现了,这你敢信



开发过程中也会遇到一些问题,那是怎么解决的呢

问题就是刚开始设计方案时直接通过对理赔数据库数据进行查询返回对应的结果,发现接口会出现超时情况,因为理赔错误数据统计时需要根据理赔时的保单号查询承保详情接口判断出是对应的商品计划存在,这个是第三方的接口不受自己控制

改进方案为通过定时任务把需要的数据先存储到对应的数据库,然后根据存储到数据库的数据进行校验,以此可以解决接口超时问题



我发现的数据库死锁就是通过错误信息统计接口发现的,看到统计出的结果出现

org.springframework.dao.DeadlockLoserDataAccessException:

Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found这个非正常业务异常信息



发现后和老刘同步

老刘:哇哦!监控做的不错

我:会继续加油的





一个数据库死锁竟然被测试发现了,这你敢信

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
tcp_tw_recycle参数引发的数据库连接异常
【问题描述】开发反馈有个应用在后端数据库某次计划性重启后经常会出现数据库连接异常问题,通过监控系统的埋点数据,发现应用连接数据库异常有两类表现:  其一:连接超时  <spanstyle"backgroundcolor:FFFF00"131148.00msTomcatConnectionPool</span  其二:连接耗时过
Wesley13 Wesley13
3年前
4、jstack查看线程栈信息
1、介绍利用jps、top、jstack命令找到进程中耗时最大的线程,以及线程状态等等,同时最后还可以显示出死锁的线程查找:FoundoneJavaleveldeadlock即可1、jps获得进程号!(https://oscimg.oschina.net/oscnet/da00a309fa6
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
PostgreSQL死锁进程及慢查询处理
1、死锁进程查看:SELECTFROMpg_stat_activityWHEREdatname'数据库名称'andwaitingtrue;pid进程id。2、慢查询SQL:selectdatname,pid,usename,application_name,client_addr,client
Wesley13 Wesley13
3年前
Mysql 死锁的详细分析方法
 用数据库的时候,偶尔会出现死锁,针对我们的业务系统,出现死锁的直接结果就是系统卡顿、客户找事儿,所以我们也在想尽全力的消除掉数据库的死锁。_出现死锁的时候,如果只是想解锁,用showfullprocesslist看下kill掉就好了,__如果想查找到详细的问题,一个办法是用showengineinnodbstatus来查看简略
Wesley13 Wesley13
3年前
JDBC 使用 SQL Server 数据库容易发生死锁的原因
通过druid监控发现某些单表update的语句特别慢(1s以上),而且容易发生死锁,始终找不出原因,后来查阅网站:http://emransharif.blogspot.com/2011/07/performanceissueswithjdbcdrivers.html(https://www.oschina.net/action/GoToLin
Stella981 Stella981
3年前
Hibernate纯sql查询结果和该sql在数据库直接查询结果不一致
问题:今天在做一个查询的时候发现一个问题,我先在数据库实现了我需要的sql,然后我在代码中代码:selectdistinctd.id,d.name,COALESCE(c.count_num,0),COALESCE(c.count_fix,0),COALESCE(c
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
3年前
Oracle死锁查询及处理
Oracle死锁查询及处理2011年08月13日11:43:37阅读数:136295一、数据库死锁的现象程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。二、死锁的原理当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做更新操作的语
MySQL的index merge(索引合并)导致数据库死锁分析与解决方案 | 京东云技术团队
背景在DBS集群列表更多连接查询死锁中,看到9月22日有数据库死锁日志,后排查发现是因为mysql的优化indexmerge(索引合并)导致数据库死锁。定义indexmerge(索引合并):该数据库查询优化的一种技术,在mysql5.1之后进行引入,它可以