MYSQL5.7索引异常引发的锁超时处理记录
原始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索引异常引发的锁超时处理记录的更多相关文章
- mysql大数据表删除操作锁表,导致其他线程等待锁超时(Lock wait timeout exceeded; try restarting transaction;)
背景: 1.有一个定时任务,每10分钟入一批统计数据: 2.另一个定时任务,每天定时清理7天前数据,此定时任务每天01:18:00执行: 现象: 每天01:20:00的统计数据入库失败,异常信息如下, ...
- 手把手教你定位线上MySQL锁超时问题,包教包会
昨晚我正在床上睡得着着的,突然来了一条短信. 什么?线上的订单无法取消! 我赶紧登录线上系统,查看业务日志. 发现有MySQL锁超时的错误日志. 不用想,肯定有另一个事务正在修改这条订单,持有这条订单 ...
- java dump 内存分析 elasticsearch Bulk异常引发的Elasticsearch内存泄漏
Bulk异常引发的Elasticsearch内存泄漏 2018年8月24日更新: 今天放出的6.4版修复了这个问题. 前天公司度假部门一个线上ElasticSearch集群发出报警,有Data Nod ...
- mysql 事务锁超时时间 innodb_lock_wait_timeout
mysql 事务锁超时时间 innodb_lock_wait_timeout: # 查询全局等待事务锁超时时间 SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait ...
- INDEX--创建索引和删除索引时的SCH_M锁
最近有一个困惑,生产服务器上有一表索引建得乱七八糟,经过整理后需要新建几个索引,再删除几个索引,建立索引时使用联机(ONLINE=ON)创建,查看下服务器负载(磁盘和CPU压力均比较低的情况)后就选择 ...
- 记一次kubernetes集群异常: kubelet连接apiserver超时
Background kubernetes是master-slave结构,master node是集群的大脑, 当master node发生故障时整个集群都"out of control&q ...
- mysql 锁超时
对一个别人正在读写的表执行DDL操作,经常需要先锁表,但是这个表正在被人执行读写操作,那么就会报:Lock wait timeout 类的错误. 通过MDB实例详情页面的进程管理可以看到类似如下的情况 ...
- springmvc单Redis实例实现分布式锁(解决锁超时问题)
一.前言 关于redis分布式锁, 查了很多资料, 发现很多只是实现了最基础的功能, 但是, 并没有解决当锁已超时而业务逻辑还未执行完的问题, 这样会导致: A线程超时时间设为10s(为了解决死锁问题 ...
- WebSphere中数据源连接池太小导致的连接超时错误记录
WebSphere中数据源连接池太小导致的连接超时错误记录. 应用连接超时错误信息: [// ::: CST] webapp E com.ibm.ws.webcontainer.webapp.WebA ...
- GC Ergonomics间接引发的锁等待超时问题排查分析
1. 问题背景 上周线上某模块出现锁等待超时,如下图所示: 我虽然不是该模块负责人,但出于好奇,也一起帮忙排查定位问题. 这里的业务背景就是在执行到某个地方时,需要去表中插入一批数据,这批数据需要根据 ...
随机推荐
- for循环当中的 var let区别
首先要了解这里代码执行顺序: for循环同步:setTimeout异步: js在执行代码的过程中,碰到同步代码会依次执行,碰到异步代码就会将其放入任务队列中进行等待,当同步代码执行完毕后再开始执行异步 ...
- postman 使用简单汇总
postman官网下载地址:https://www.postman.com/downloads/ Postman支持功能 1.快速构建 2.参数化与变量设置提取 3.查看请求数据 4.提供断言功能 5 ...
- 加载properties文件
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java ...
- [后端-python实战总结]-chapter1-python基础01
1.1 week 1 > 密码秘文: import getpass username = input('username:') passwd = getpass.getpass('passwd: ...
- dns服务之bind配置内网解析部分子域名,其它子域名转发
bind配置内网解析部分子域名,其它子域名转发.以下以m.xxx.com和admin.xxx.com由内网dns解析,其它*.xxx.com转发给外网dns解析为例配置.文件/etc/named.co ...
- java原生的分页工具
@NoArgsConstructor @Data //生成 空参构造 get.set. tostring. equals. hascode public class PageUtils<T> ...
- 解决移动H5页面的刷组造成件传值数据丢失问题
问题描述 当前页面由2个组件组成分别命名成a,b,其中组件b(子)需要组件a(父)内接口响应的时间字段,因为组件b不能实时的接收到数据 因此组件b在接收数据的时用定时器加了一个延迟,但是在网络不好或者 ...
- django源码剖析(steup、runserver、生命周期)
工作上会经常用到不熟悉的第三方模块,大多数时候会选择看文档.百度谷歌.看源码等形式去把它用起来.几年工作经验下来源码看的不少了,但当面试被问到django的生命周期时,只能浅谈根据wsgi协议会走ap ...
- C#连Mysql数据库报错 SSL Connection error
MySql.Data.MySqlClient.MySqlException (0x80004005): SSL Connection error. ---> System.AggregateEx ...
- home条 防止误碰
某些界面需要隐藏home条,防止误触导致页面返回 - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures { return UIRectEd ...