原始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

MYSQL5.7索引异常引发的锁超时处理记录的更多相关文章

  1. mysql大数据表删除操作锁表,导致其他线程等待锁超时(Lock wait timeout exceeded; try restarting transaction;)

    背景: 1.有一个定时任务,每10分钟入一批统计数据: 2.另一个定时任务,每天定时清理7天前数据,此定时任务每天01:18:00执行: 现象: 每天01:20:00的统计数据入库失败,异常信息如下, ...

  2. 手把手教你定位线上MySQL锁超时问题,包教包会

    昨晚我正在床上睡得着着的,突然来了一条短信. 什么?线上的订单无法取消! 我赶紧登录线上系统,查看业务日志. 发现有MySQL锁超时的错误日志. 不用想,肯定有另一个事务正在修改这条订单,持有这条订单 ...

  3. java dump 内存分析 elasticsearch Bulk异常引发的Elasticsearch内存泄漏

    Bulk异常引发的Elasticsearch内存泄漏 2018年8月24日更新: 今天放出的6.4版修复了这个问题. 前天公司度假部门一个线上ElasticSearch集群发出报警,有Data Nod ...

  4. mysql 事务锁超时时间 innodb_lock_wait_timeout

    mysql 事务锁超时时间 innodb_lock_wait_timeout: # 查询全局等待事务锁超时时间 SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait ...

  5. INDEX--创建索引和删除索引时的SCH_M锁

    最近有一个困惑,生产服务器上有一表索引建得乱七八糟,经过整理后需要新建几个索引,再删除几个索引,建立索引时使用联机(ONLINE=ON)创建,查看下服务器负载(磁盘和CPU压力均比较低的情况)后就选择 ...

  6. 记一次kubernetes集群异常: kubelet连接apiserver超时

    Background kubernetes是master-slave结构,master node是集群的大脑, 当master node发生故障时整个集群都"out of control&q ...

  7. mysql 锁超时

    对一个别人正在读写的表执行DDL操作,经常需要先锁表,但是这个表正在被人执行读写操作,那么就会报:Lock wait timeout 类的错误. 通过MDB实例详情页面的进程管理可以看到类似如下的情况 ...

  8. springmvc单Redis实例实现分布式锁(解决锁超时问题)

    一.前言 关于redis分布式锁, 查了很多资料, 发现很多只是实现了最基础的功能, 但是, 并没有解决当锁已超时而业务逻辑还未执行完的问题, 这样会导致: A线程超时时间设为10s(为了解决死锁问题 ...

  9. WebSphere中数据源连接池太小导致的连接超时错误记录

    WebSphere中数据源连接池太小导致的连接超时错误记录. 应用连接超时错误信息: [// ::: CST] webapp E com.ibm.ws.webcontainer.webapp.WebA ...

  10. GC Ergonomics间接引发的锁等待超时问题排查分析

    1. 问题背景 上周线上某模块出现锁等待超时,如下图所示: 我虽然不是该模块负责人,但出于好奇,也一起帮忙排查定位问题. 这里的业务背景就是在执行到某个地方时,需要去表中插入一批数据,这批数据需要根据 ...

随机推荐

  1. 10.MyBatis-Plus的使用

    整合MyBatis-Plus 导入依赖 在解决逆向工程生成的代码报错时候已经给bianen-common导入了依赖 导入数据库的驱动 导入驱动和MySql的版本有关,我安装的MySql版本是5.7.3 ...

  2. containerd.service containerd-1.6.8-linux-amd64.tar.gz cni-plugins-linux-amd64-v1.1.1.tgz 标准文件下载

    配置K8S时 可能会用到#systemcd来管理containerd,这https://raw.githubusercontent.com/containerd/containerd/main/con ...

  3. Pytorch和torchvision版本号对应表

    torch与torchvision版本对应表 torch及torchvision版本号查询 import torch print(torch.__version__) import torchvisi ...

  4. 打卡ts day02--使用typescript 写评论demo

    demo.ts // DataHelpler 类 用于操作localStorage class DataHelpler { dataKey: string; //localstorage key pr ...

  5. WPF 实现文件、图标拖放功能(支持UAC的那种)

    WPF实现文件拖放功能,正常情况并没有什么问题,但是如果你的程序使用管理员身份启动,你就会发现文件拖放功能就会失效. 这是因为WPF 在不同UAC等级下,是不允许拖放的. 原理很简单,与桌面相关联的进 ...

  6. 档案系统区块链集成 leveldb.net集成

    leveldb.net工作原理:leveldb为键值对数据库,具有增加,删除,查询功能,利用加密链式结构存储和查询数据. 区块(block):在区块链技术中,数据以电子记录的形式被永久储存下来,存放这 ...

  7. Oracle 的merge into 语法转postgre

    Oracle的merge into 语法 MERGE INTO t1 USING (SELECT id,name FROM t2) t2 ON ( t1.id=t2.id)   //主键 WHEN M ...

  8. 十二、21.提交本地代码到Git仓库并推送到码云

    查看分支 运行git add . 把所有修改过后文件添加到暂存区 git commit 把当前所有的代码提交到rights分支 加-m加一个消息 到此所有的功能模块都已经提交到了rights这个分支里 ...

  9. RabbitMQ Linux安装与启动服务

    本文转载自 https://blog.csdn.net/chengmin123456789/article/details/124710277 1.先下载 erlang-23.2.3-1.el7.x8 ...

  10. Cinder 对接本地LVM存储

    系统安装lvm2 yum install lvm2 1.创建 loop 设备 dd if=/dev/zero of=volume_test bs=51200 count=1M 2.挂载loop设备 l ...