一个数据库死锁竟然被测试发现了,这你敢信
测试生产监控发现数据库死锁报错:org.springframework.dao.DeadlockLoserDataAccessException:
### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found
测试是通过什么方式发现呢?
![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-10-14-14-01ihHbQdQEOqPUTeA.png)
还要从前一段时间老刘对我的疑问开始说起。
老刘:理赔系统上线后,不能进行生产验证,作为测试你要怎么避免生产问题呢
我:目前对生产的验证只能联系业务人员进行生产验证
老刘:那我们测试这边调研一下,看一下有什么方法
我:好的,我去看一下有没有适合的集团工具可以对生产异常数据进行统计
就是这样的一个对话,让我发现了EasyBI工具,和这个工具的缘分就开始了
首先,给大家介绍一个这个工具,它可以做什么呢?它可以通过连接生产数据库或者接口开发的形式进行生产数据统计,以聚合表、透视表、柱状图、折线图、雷达图等进行图形化配置,并将整个数据情况都汇总到统一的监控调度中心。
那我又是怎么怎么使用EasyBI工具解决了生产数据监控问题呢
首先,我根据自己系统的业务类型,开发了几个接口,生产数据异常的接口、生产理赔数量统计接口、生产TOP5理赔数据统计接口等
然后,按照EasyBI工具使用文档进行了配置,详细操作请看以下分析
(一)数据接入
把开发的接口在EasyBI工具平台(EasyBI (jd.com))进行配置
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-12-25-15-01Ny42sGKkRMOIe1iV.png)
(二)应用配置
创建应用,把配置好的接口数据以聚合表、柱状图、等进行图形化配置,以该形式展示监控数据
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-12-25-15-0212f12GzFRdD36OQuyQ.png)
(三)订阅管理
配置好应用后,对此应用进行邮件订阅,定时任务推送生产数据监控的结果
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-12-25-16-24RgEyZFWPEcG24XfG.png)
(四)监控数据分析
非车核心理赔数据统计接口:目前分为三类,分别是是错误信息统计接口、周失败和成功统计接口、日失败和成功统计接口
◦错误信息统计接口
▪1.1 通过对理赔不同的错误信息进行分类,统计出当天、本周、上周和上上周各个错误信息的个数,通过数据对比能够及时发现 当前系统的稳定性、理赔数据正确性、业务逻辑校验合理性
▪1.2 理赔不同的错误信息统计通过easyBI平台明细表分类展示
▪1.3 通过理赔错误类型及时判断是正常业务校验或者是异常问题
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-12-25-16-29ZvN9CQPP9H9WaBW.png)
•周失败和成功统计,日成功和失败数据接口
▪2.1 针对团险的主流产品、个险的主流产品、理赔系统进行连续一周或者当天的理赔成功数据和错误数据统计,通过对比及时发现主流产品理赔业务的正确性,保证客户理赔的时效性
▪2.2 周数据根据商品计划在easyBI平台以柱状图展示,日数据根据商品计划在easyBI平台以条形图展示
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-12-25-21-21PGGCQcAJEYpnY25a.png)
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-12-25-21-31EstZ296WtOswD9md.png)
开发过程中也会遇到一些问题,那是怎么解决的呢
问题就是刚开始设计方案时直接通过对理赔数据库数据进行查询返回对应的结果,发现接口会出现超时情况,因为理赔错误数据统计时需要根据理赔时的保单号查询承保详情接口判断出是对应的商品计划存在,这个是第三方的接口不受自己控制
改进方案为通过定时任务把需要的数据先存储到对应的数据库,然后根据存储到数据库的数据进行校验,以此可以解决接口超时问题
我发现的数据库死锁就是通过错误信息统计接口发现的,看到统计出的结果出现
org.springframework.dao.DeadlockLoserDataAccessException:
### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found这个非正常业务异常信息
发现后和老刘同步
老刘:哇哦!监控做的不错
我:会继续加油的
![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-10-15-16-33RZBx9IkOO4llNhQ.png)