​Lock wait timeout exceeded: tryrestarting transaction Query:
cookqq ›博客列表 ›mysql

​Lock wait timeout exceeded: tryrestarting transaction Query:

2024-01-13 22:01:56.0|分类: mysql|浏览量: 709

摘要: 在MySQL中,lock_wait_timeout是一个会话、线程级别的参数,它的作用是控制当一个MySQL会话在等待锁时的等待时间。当MySQL会话在等待获取一个锁时,如果等待时间超过该参数设置的时长,则会自动超时并且放弃获取该锁。 该参数对于控制并发访问非常重要,它可以保证系统在高并发情况下的正常运行并避免死锁。

Lock wait timeout exceeded: tryrestarting transaction Query: 

mysql出现死锁并获取锁超时后,会出现上面的错误


排查这个问题思路


1、检查当前数据库连接是否存在长事务或者死锁情况。

2、检查当前数据库连接是否释放了所有被占用的锁。

3、检查当前数据库连接是否在请求一个过度繁忙的资源。


排查重点

information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。


innodb_trx 当前运行的所有事务

innodb_locks 当前出现的锁

innodb_lock_waits 锁等待的对应关系


举个自己遇到的例子

A线程开启事务去更新一个表的某个条记录,比如

UPDATE user SET name='张三' where id = 1234;

A线程事务运行比较慢,一直没有提交事务。


B线程开启事务去执行其他业务动作,恰好也在更新这条记录,比如:

UPDATE user SET age=28 where id = 1234;

这个时候B线程的会报出错误Lock wait timeout exceeded: tryrestarting transaction Query: UPDATE user SET age=28 where id = 1234;


lock_wait_timeout的作用?

lock_wait_timeout的作用是控制会话的等待锁的时间,从而保证系统的安全和稳定性。其主要作用有以下几点:

1、控制并发访问:在高并发场景下,访问同一个资源的并发时间会相对较长,如果不对会话的等待锁的时间进行控制,

就会导致并发访问时出现大量的等待锁和死锁情况。

2、避免死锁:当不同的会话之间相互等待对方释放锁时,就会出现死锁现象。通过对等待锁时间的限制,可以有效地避免死锁的出现。

3、保证数据一致性:在保证并发访问的同时,也需要保证对数据更新的一致性和可靠性。

lock_wait_timeout的设置可以有效保证数据的一致性。


查看lock_wait_timeout?

SHOW VARIABLES LIKE 'lock_wait_timeout';


lock_wait_timeout修改方式?

lock_wait_timeout可以通过以下两种方式进行设置:

1、通过系统变量进行设置:可以通过set语句对该变量进行设置,例如:

SET lock_wait_timeout = 10;

执行以上语句会将当前会话的lock_wait_timeout值调整为10秒。


2、在配置文件中进行设置:可以在配置文件my.cnf或my.ini中添加以下行:

[mysqld]
lock_wait_timeout=10

这种方式可以使MySQL服务器在启动时就设置好lock_wait_timeout值,从而保证了全局的设置一致性。


参考文档:https://www.python100.com/html/97994.html

一键分享文章

分类列表

  • • struts源码分析
  • • flink
  • • struts
  • • redis
  • • kafka
  • • ubuntu
  • • zookeeper
  • • hadoop
  • • activiti
  • • linux
  • • 成长
  • • NIO
  • • 关键词提取
  • • mysql
  • • android studio
  • • zabbix
  • • 云计算
  • • mahout
  • • jmeter
  • • hive
  • • ActiveMQ
  • • lucene
  • • MongoDB
  • • netty
  • • flume
  • • 我遇到的问题
  • • GRUB
  • • nginx
  • • 大家好的文章
  • • android
  • • tomcat
  • • Python
  • • luke
  • • android源码编译
  • • 安全
  • • MPAndroidChart
  • • swing
  • • POI
  • • powerdesigner
  • • jquery
  • • html
  • • java
  • • eclipse
  • • shell
  • • jvm
  • • highcharts
  • • 设计模式
  • • 列式数据库
  • • spring cloud
  • • docker+node.js+zookeeper构建微服务
版权所有 cookqq 感谢访问 支持开源 京ICP备15030920号
CopyRight 2015-2018 cookqq.com All Right Reserved.