有天项目中某个业务出现了异常,查询相关日志显示如下:

### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

吓了大跳,居然还有锁时间过长导致后面的业务等待时间较长断开连接抛异常,看了下数据库控制台基本全黄,都是些执行时间较长正在执行的进程。

里面详细的SQL,继续点进去看看执行计划

从执行计划上看,扫码行数其实并不多的,所以还要从具体的业务场景去分析问题。

找到执行这条SQL的业务代码,了解当时的业务场景:

t_affairsevent事件表

简单描述下,这个事件表是用来做分布式事务,利用分布式调度来轮询,然后处理相关业务,具体可以看前面写过 我的物联网项目(八) 简单分布式调度,前面有讲到过利用setNX()来实现分布式锁,每次通过setNX()同一个标识,比如id来抢占锁,前面的业务场景没有问题,但是在这个业务场景里面问题来了,因为同时3个调度来分别执行id为1,2,3的3条记录都可以抢的到,然后都去执行如下SQL:

update t_partner_bymonth set .... where partnerId=10001 ,这样的话会导致多个SQL线程同时在执行同一记录,而且本身update就带锁行,所以导致执行速度巨慢甚至阻塞。

高并发update时,最先获得锁的会优先执行,其它几条处于行锁等待状态,等第一个执行完毕,行锁释放,由下一条语句获取锁进行更新,当其它会话等待的时间达到innodb_lock_wait_timeout(默认是50秒),这些update就会断开,不再执行。

像这种业务场景,将锁标识换成partnerId就可以避免刚才那种情况。

我的物联网项目(二十七) 分布式锁粗心导致大量阻塞相关推荐

  1. 我的物联网项目(二十三) 统计数据优化

    平台无论是城市合伙人,还是商家,都有大量的统计数据的需求,比如统计商家一个月的总金额收入,投币消费总金额,微信扫码消费总金额等.这块的优化也一直在做,大概分为这么几个阶段. 1.实时count统计订单 ...

  2. 【甄选靶场】Vulnhub百个项目渗透——项目二十七:Pinkys-Palace-2(LFI,端口敲震,ssh爆破,64位缓冲区溢出)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目二十七:Pinkys-Palace-2(LFI,端口敲震,ssh爆破,64位缓冲区溢出) 靶场地址

  3. 物联网项目(二)初建团队

    今年三月初也是机缘巧合下接触这个项目,说实话也是非常看好这个项目,以前做过企业级项目,互联网项目,但是物联网项目也是第一次接触,相关资料了解了下何为物联网,原来是物物相连的互联网,与传统行业相结合的互 ...

  4. spring项目使用redis分布式锁解决重复提交问题

    场景演示 假设有一个录入学生信息的功能,为了便于演示,要求不能有重名的学生,并且数据库对应字段没有做唯一限制. @GetMapping("/student/{name}")publ ...

  5. 多级缓存分析篇(二) 常用分布式锁分析

    上篇主要讲了日常经常使用的哪些redis包及其配置的差异,这篇对基于redis的分布式锁,主要分享下自定义锁和redisson锁的使用和分析. 1.(自定义)Redis分布式锁 对于redis来说,非 ...

  6. 项目演化系列--分布式锁

    前言 项目初期的时候,一般会发布到一台主机上,当达到负载极限时,要想提升其性能,要么提升硬件,要么多台主机,然而成本上的花销,后者比前者便宜太多了,虽然便宜,但是却更加复杂. 大多数编程语言提供的各种 ...

  7. 我的物联网项目(二十一) 摇摇车三种消费模式和城市合伙人

    我们的摇摇车支持三种消费模式: 1.投币 和传统摇摇车一样,通过一元的硬币来启动摇摇车,公司其实在做这个平台当时的初衷是不做投币的,只做app扫码,一来方便用户,毕竟这几年来流行各种扫码.二来做线上运 ...

  8. 我的物联网项目(二十九) 线上前期运营

    说实话,线上运营不是我们的强项,公司的大部分人对线上的运营想法都有一箩筐,谈起线上运营的内容,都是神采奕奕,滔滔不绝,感觉钱就在眼前,触手可及.我自己也一度认为,平台有了用户,有了流量,做线上的任何内 ...

  9. 我的物联网项目(二十) 合伙人羊毛党

    城市合伙人平台上线后,对于系统监控最关心的两个事情就是用户和订单,其中以订单最为重心.原因很简单,因为外面很多城市合伙人陆续加入进来,摇摇车的流量入口越来越大,新注册的app用户和启动摇摇车产生的订单 ...

最新文章

  1. rocketmq 组监听_最全的RocketMQ学习指南,程序员必备的中间件技能
  2. 设置应用图标badge(徽章)
  3. 【Netty】主从反应器 ( Reactor ) 多线程模型
  4. cocoJS配置文件:project.json
  5. Eclipse不给提示no default proposals
  6. MySQL 之group_concat_max_length Mac 版
  7. 结合使用slf4j和Logback教程
  8. php beast linux安装,windows centos php-beast 安装
  9. Arduino学习笔记-按钮控制LED实验
  10. java主类调用数组_用java编写在主函数中调用数组
  11. D3 Geographies
  12. vscode配置c 环境_SAST Weekly教你在macOS上用VS Code配置C/C++编程环境
  13. 虚拟机下面装XP系统、安装ensp的步骤及使用ensp过程中所遇问题的解决
  14. 智能电网数据资产的风险管理
  15. PCB设计经典资料学习汇总
  16. 惠普服务器优盘安装系统蓝屏,惠普u盘装系统出现蓝屏现象怎么解决
  17. canvas动画:黑客帝国_使用Canvas API进行动画处理-第3部分:重力和动态渲染
  18. 【2022-05-31】JS逆向之易企秀
  19. Oracle DB 备份和恢复的概念
  20. python短信验证码登录_玩转python之获取短信验证码

热门文章

  1. 凉宫春日的忧郁第一章
  2. PCIe扫盲系列博文连载目录
  3. mysql计算机二级电子教程_MySQL数据库程序设计(2019年版全国计算机等级考试二级教程)...
  4. [图文]symbian与uiq开发教程(转)
  5. 程序员的奋斗史(四十五)——大学断代史(九)——独自南下的岁月
  6. 星星下落_与星星共舞
  7. 裸辞接单第一个月的收入
  8. 爬虫及数据分析--当当网
  9. Codeforces Round #750 (Div. 2)E. Pchelyonok and Segments (数学+DP)
  10. Burp Scanner Report