原始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. for循环当中的 var let区别

    首先要了解这里代码执行顺序: for循环同步:setTimeout异步: js在执行代码的过程中,碰到同步代码会依次执行,碰到异步代码就会将其放入任务队列中进行等待,当同步代码执行完毕后再开始执行异步 ...

  2. postman 使用简单汇总

    postman官网下载地址:https://www.postman.com/downloads/ Postman支持功能 1.快速构建 2.参数化与变量设置提取 3.查看请求数据 4.提供断言功能 5 ...

  3. 加载properties文件

    import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java ...

  4. [后端-python实战总结]-chapter1-python基础01

    1.1 week 1 > 密码秘文: import getpass username = input('username:') passwd = getpass.getpass('passwd: ...

  5. dns服务之bind配置内网解析部分子域名,其它子域名转发

    bind配置内网解析部分子域名,其它子域名转发.以下以m.xxx.com和admin.xxx.com由内网dns解析,其它*.xxx.com转发给外网dns解析为例配置.文件/etc/named.co ...

  6. java原生的分页工具

    @NoArgsConstructor @Data //生成 空参构造 get.set. tostring. equals. hascode public class PageUtils<T> ...

  7. 解决移动H5页面的刷组造成件传值数据丢失问题

    问题描述 当前页面由2个组件组成分别命名成a,b,其中组件b(子)需要组件a(父)内接口响应的时间字段,因为组件b不能实时的接收到数据 因此组件b在接收数据的时用定时器加了一个延迟,但是在网络不好或者 ...

  8. django源码剖析(steup、runserver、生命周期)

    工作上会经常用到不熟悉的第三方模块,大多数时候会选择看文档.百度谷歌.看源码等形式去把它用起来.几年工作经验下来源码看的不少了,但当面试被问到django的生命周期时,只能浅谈根据wsgi协议会走ap ...

  9. C#连Mysql数据库报错 SSL Connection error

    MySql.Data.MySqlClient.MySqlException (0x80004005): SSL Connection error. ---> System.AggregateEx ...

  10. home条 防止误碰

    某些界面需要隐藏home条,防止误触导致页面返回 - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures { return UIRectEd ...