原始sql:

update a set a.x=x where a.xid in (select b.xid from b inner join c on b.xxx = c.xxx) and a.xdate='xxxxxxxx'

现象 sql 执行中,b表会偶尔提示锁超时。

处理过程:

  已知 mysql5.7 repeatable read 模式下 update会把关联到的所有表记录全部加锁 b表相关记录 也会加锁。

  已知 a.xdate 有索引,扫描量在5W左右,正常应该几秒内执行完成不会造成锁超时。

  尝试排查后发现 update a set a.x=x where  a.xdate='xxxxxxxx'  索引失效  但是  select * from  a  where  a.xdate='xxxxxxxx'  索引生效。

  结论 由于mysql 索引问题,导致update的sql执行时间远超预计,与其他程序的sql冲突导致锁超时。

处理结论:

  临时:将in 改写为join方式,a.xdate='xxxxxxxx'索引生效,执行时间大大缩短,基本能杜绝锁超时可能。

  正规:拒绝多表关联update,程序内拆分sql。

  作死:降低mysql事务隔离级别应该也能解决。

关于mysql select与update索引使用不一致的问题,同款异常:

https://dba.stackexchange.com/questions/153293/update-does-not-use-index-but-select-does

最新文章

  1. bzoj1057: [ZJOI2007]棋盘制作--最大子矩阵
  2. [原创]LoadRunner 12.02 录制脚本时提示无Internet访问,如何解决?
  3. Wordpress文章图片不居中与开头缩进问题
  4. linux下C++ 插件(plugin)实现技术
  5. ios 同步Get请求的实现
  6. magento数据库备份导入还原
  7. java如何准确的读取多音字
  8. Android 内部启动其他应用,以及打开指定qq聊天界面
  9. Mysql表锁定解决
  10. spring的长处 ioc aop
  11. HDU1874 最短路 SPFA
  12. JQuery和Ajax在ASP.NET MVC中的基本应用
  13. 【转】mysql保存图片技术决定:保存二进制文件还是只保存图片相对路径,图片放在硬盘上面?
  14. 3.2.1 SpringMVC入门
  15. Python3 tkinter基础 Spinbox 可输入 能调整的 从指定范围内选择参数的控件
  16. Redis纠错
  17. 蒙特卡罗定位(Particle Filter Localization)笔记
  18. [Leetcode 62]机器人走路Unique Path 动态规划
  19. unity3d 博客
  20. Javascript 中 true 和 false

热门文章

  1. video.js没有显示已播放时间、总时间?
  2. 你有了解过无服务器架构(Serverless)数据库吗?
  3. 8. fitBounds(用了这个你就不用在设置zoom, minZoom, maxZoom, center)
  4. 在linux 下如何快速创建环境
  5. 新的学习历程-python6 字符串基础使用
  6. 狂神--ElasticSearch
  7. 【面试题】面试突击71:GET 和 POST 有什么区别?
  8. 7.Object
  9. having对聚合函数的结果集进行过滤
  10. 前端记录:树形插件zTree 和 表格扩展 tableX