前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个数据库死锁竟然被测试发现了,这你敢信

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

作者头像
京东技术
发布2024-03-06 10:50:13
1330
发布2024-03-06 10:50:13
举报
文章被收录于专栏:京东技术京东技术

导读 在软件开发的复杂世界中,数据库死锁往往是隐藏在数据操作深处的隐患,它们可能在任何时候无声无息地破坏系统的稳定性。在最新的测试中,测试工程师竟然意外发现了一个潜伏已久的数据库死锁问题。这个发现不仅展示了细致测试的重要性,也提醒我们即使是看似不起眼的系统异常,也可能是潜在大问题的冰山一角。在本文中,我们将深入探讨这个死锁是如何被发现的,以及我们可以从中学到的宝贵经验。

01背景

在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!

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

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

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

还要从前一段时间开始说起。

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

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

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

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

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

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

02EasyBI工具详细操作

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

首先,我根据自己系统的业务类型,开发了几个接口,生产数据异常的接口、生产理赔数量统计接口、生产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这个非正常业务异常信息

发现后和领导同步

A:哇哦!监控做的不错

B:会继续加油的

03思考与总结

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目

基于检测到的数据库死锁问题,我发现不能实时的接收到异常数据的统计和监控,那么要怎么实时地处理呢?

一场和同事的交流就开始了

B:我现在检测到的异常数据是通过EasyBI工具定时发送的,我怎么可以实时发现异常数据

C:可以设定一个阈值,当异常数据超过这个阈值时,我们就判定为异常情况

B:那是不是可以把这个异常情况通过京me告警发给相关人员呢

C:这是个好方法

有了思路以后,说干就干

开发一个接口,通过异常数据的统计值与阈值进行比较,如果大于阈值,就发送告警通知,收到的告警通知如下

因为有了这个告警,发现了生产异常情况;

上游系统传输了不支持的赔付信息,及时地通知到前端系统和相关业务

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 京东技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01 、背景
  • 02 、EasyBI工具详细操作
  • 03 、思考与总结
  • 基于检测到的数据库死锁问题,我发现不能实时的接收到异常数据的统计和监控,那么要怎么实时地处理呢?
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档