【线上故障记录】MySQLTransactionRollbackException: Lock wait timeout exceeded

news2024/9/27 4:12:08

数据同学反馈凌晨1-2点会出现连接系统MySQL数据库等待锁超时

com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

InnoDB事务等待一个行级锁的时间最长时间默认值是50秒(单位是秒),超过这个时间就会放弃。一个事务A试图访问一行数据,但是这行数据正在被另一个innodb事务B锁定,此时事务A就会等待事务B释放锁,等待超过innodb_lock_wait_timeout设置的值就会报错。

最直接的解决方案,就是调整innodb_lock_wait_timeout超时参数(治标不治本):

第一种在MySQL的配置文件中加入,然后重启MySQL

innodb_lock_wait_timeout = 500

第二种直接执行如下命令

set global innodb_lock_wait_timeout=500;

一、慢SQL排查流程

1、根据Druid的监控查看慢SQL,发现超过100S的慢SQL:

SELECT
* 
FROM
	( SELECT * FROM rule_result WHERE org_id = '67303' AND state = 0 AND exec_date = '2022-12-25' ) result 
WHERE
	exec_result = 0 
ORDER BY
	person_idcard ASC 
	LIMIT 0,
	10

explain解释执行,选择的索引是Order By后的idcard索引。子查询就没有走索引,所以出现了慢SQL:

优化后:

SELECT
	person_name AS NAME,
	person_idcard AS idcard,
	person_phone AS phone,
	org_id AS companyId,
	org_name AS companyName,
	dept_name AS deptName,
	rule_name AS ruleName,
	exec_date AS execDate,
	exec_result AS execResult,
	org_id AS orgId,
	window_value AS windowValue,
	type_name AS peopleTypeName,
	person_idcard_code AS idcardCode,
	window_start AS windowStart 
FROM
	( SELECT * FROM kp_rule_result WHERE org_id = '67303' AND state = 0 AND exec_date = '2023-01-04' ) result 
ORDER BY
	person_idcard ASC 

explain解释执行,选择子查询的索引,效率更高,只需要1点几秒(直接去掉身份证排序也行):

2、慢SQL排查完成后,两天内是好了,不过后来数据同学发现要先删表再写入中间结果,数据量量大时间太慢导致他的其他事务等待锁中断了。


二、慢SQL的影响

2.1、什么是MySQL慢查询呢?

其实就是查询的SQL语句耗费较长的时间。正常情况下,MySQL是不会自动开启慢查询的,且如果开启的话默认阈值是10秒

具体耗费多久算慢查询呢?这其实因人而异,有些公司慢查询的阈值是100ms,有些的阈值可能是500ms,即查询的时间超过这个阈值即视为慢查询。

# slow_query_log 表示是否开启
mysql> show global variables like '%slow_query_log%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_query_log      | OFF                                  |
| slow_query_log_file | /var/lib/mysql/0bd9099fc77f-slow.log |
+---------------------+--------------------------------------+

# long_query_time 表示慢查询的阈值,默认10秒
show global variables like '%long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |

2.2、MySQL慢查询危害
 
1、当表是Myisam表,对表有慢查询,不阻塞Select,对该表的其他DML、DDL操作都会被阻塞。
 
2、当表是Innodb表,当表上有慢查询,不阻塞Select 和DML,其他的DDL操作都会被阻塞,比如出现waiting for table metadata lock。

为啥会造成DDL操作阻塞?

众所周知,InnoDB引擎默认加的是行锁,但锁其实都是加在索引上的,如果筛选条件没有建立索引,会降级到表锁。而慢查询有一大部分原因都是因为没加索引导致的,所以慢查询时间过长,就会导致表锁的时间也很长,如果这时候执行DDL就会造成阻塞。

综上,当数据库中存在慢查询时,是比较危险的,当执行备份、create index、alter  table 、flush table 等操作时就会造成数据库的等待。

2.3、如何避免慢查询

1、对查询SQL,进行压测,该加索引就加索引;

2、如果有索引,进行explain执行计划分析避免索引失效的情况;


参考链接:

Mysql 异常:MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction - 简书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

尚硅谷_ShardingSphere5

ShardingSphere5第01章 高性能架构模式1、读写分离架构2、数据库分片架构2.1、垂直分片2.2、水平分片3、读写分离和数据分片架构4、实现方式4.1、程序代码封装4.2、中间件封装4.3、常用解决方案第02章 ShardingSphere1、简介2、ShardingSphere-JDBC3、ShardingSphere-Proxy第03…

tcping实用小工具

Tcping----实用小工具tcping命令详解 一、tcping介绍 tcping:tcping命令基于tcp协议监控,可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从容硬线连接到分组交换或电路交换网络的各种通信系统之…

DNS域名解析

文章目录一 定义二 配置文件三 DNS解析流程四 总结一 定义 用户在浏览器输入URL,浏览器就会向该URL对应的服务器发送请求,获得对应的IP,才能将资源返回给用户。 简单来说,DNS就是将URL转化成IP的过程。 二 配置文件 在Linux系统…

js逆向-Mytoken请求参数逆向

声明 本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负! 如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦! 前言 目标网站:aHR0cHM6Ly93d3cubXl0b2tlbmNhcC5j…

数益工联 x TiDB丨如何运用 HTAP 挖掘工业数据价值?

制造业是一个古老而悠久的行业,它的起源最早可追溯到石器时代。从新石器时代简单的工具,到今天复杂的智能工厂,制造业历经千年发展,蜕变成了由技术驱动的创新行业,充满各种自动化流程、始终互连的设备和数据丰富的流程…

深度学习笔记(一)——什么是神经网络

生物学中的神经元的定义 神经元有很多种类,下图就是其中的一种,锥体神经元。它由三部分组成,分别是树突,胞体和轴突。树突是接受输入,轴突是用于输出的。神经元的树突在接收到特定的输入刺激后,其胞体就会被…

BGP在数据中心的应用5——BGP生命周期管理

注: 本文根据《BGP in the Datacenter》整理,有兴趣和英文阅读能力的朋友可以直接看原文:https://www.oreilly.com/library/view/bgp-in-the/9781491983416/上一部分笔记请参考:https://blog.csdn.net/tushanpeipei/article/deta…

腾讯前端vue面试题合集

能说下 vue-router 中常用的 hash 和 history 路由模式实现原理吗? (1)hash 模式的实现原理 早期的前端路由的实现就是基于 location.hash 来实现的。其实现原理很简单,location.hash 的值就是 URL 中 # 后面的内容。比如下面这…

简单易懂的Spring扩展点详细解析,看不懂你来打我

简单易懂的Spring扩展点原理,看不懂你来打我总览BeanFactoryPostprocessor作用回调时机原理BeanDefinitionRegistryPostProcessor作用例子:Spring对Configuration、ComponentScan、Component、Bean、Import等注解的处理回调时机原理ImportSelector作用例…

vue组件之间的数据传递

目录 组件之间的通信 1、组件之间的关系:父子关系、兄弟关系、跨级关系 2、父子组件之间的通信(数据传递): 3、兄弟组件之间的通信(数据传输): 4、跨级组件之间的通信:provide /…

SparkSQL 入门简介

在安装目录的bin目录打开spark-shell.cmd,输入如下,按tab健,查看可执行数据源 spark.read.在安装目录D:\spark-3.0.0-bin-hadoop3.2\bin\input新建user.json {"username":"chen","age":3} {"username&q…

vue全家桶-vuex(一)

vue全家桶-vuex(一)1.Vuex概述2.Vuex中的核心特性A.State1.this.$store.state.全局数据名称-组件访问State中的数据的第一种方式2.组件访问State中的数据的第二种方式:按需导入B.Mutation1.this.$store.commit是触发Mutation的第一种方式2.触…

java学习day67(乐友商城)商品详情及静态化(Thymeleaf)

1.商品详情 当用户搜索到商品,肯定会点击查看,就会进入商品详情页,接下来我们完成商品详情页的展示, 1.1.Thymeleaf 在商品详情页中,我们会使用到Thymeleaf来渲染页面,所以需要先了解Thymeleaf的语法。 …

简明Java讲义 1:Java环境搭建与入门

目录 1、Java 介绍 2、Java 运行机制 3、Java开发环境搭建 4、Hello World! 1、Java 介绍 Java是Sun微系统公司在1995年推出的,是一门面向对象的编程语言 2006年12月,Sun公司发布了JDK1.6(也称作Java SE 6) 200…

数位DP~

综述 数位DP的应用范围: 在某个区间内有多少个满足一定的性质 数位DP中使用的方法: 类似于前缀和。A到B相当于f[B] - a[A-1] 这一点尤为重要,因为已经弱化了边界,使得考虑的更少分情况讨论 ​ 1081. 度的数量 ​ 输入样例…

BGP综合实验

目录 1.拓扑图 2.实验要求 3.实验思路 4.主要配置 5.测试 6.实验总结 1.拓扑图 2.实验要求 AS1存在两个环回,一个地址为192.168.1.0/24;AS3中存在两个环回,一个为192.168.2.0/24;整个AS2的IP地址为172.16.0.0/16&#xff0c…

k8s之工作机制

写在前面 本文一起看下k8s基本架构。 1:Kubernetes的基本架构 k8s本身也是一种分布式架构,也需要在多台机器(实体机或虚拟机无差别)部署,部署的机器我们叫做节点,其中节点分为Master node即主节点,worke…

java使用反射给对象属性赋值

📢📢📢📣📣📣哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝一位上进心十足的【Java ToB端大厂领…

高频js手写题之实现数组扁平化、深拷贝、总线模式

前言 古人学问无遗力,少壮工夫老始成。纸上得来终觉浅,绝知此事要躬行。看懂一道算法题很快,但我们必须将这道题的思路理清、手写出来。 三道js手写题的思路和代码实现 数组扁平化 演示效果 将[1, [1, 2], [1, [2]]] 变成 [1, 1, 2, 1, 2] 第一种&…

抽象类与抽象方法

文章目录一、abstract关键字使用修饰类:抽象类修饰方法:抽象方法注意点抽象类的匿名子类一、abstract关键字使用 abstract:抽象的 可以修饰:类、方法 修饰类:抽象类 1、此类不可进行实例化 2、抽象类中一定有构造器…