【数据库-Mysql】[Err] 1205 - Lock wait timeout exceeded: try restarting transaction

一、问题描述 

偶发性的Update语句失败 

[SQL] UPDATE work_queue SET state1=1,state2=1 where state1=0 AND id IN (SELECT id FROM plan_queue WHERE work_window IN (1,2,3,4));

[Err] 1205 - Lock wait timeout exceeded: try restarting transaction

二、基础知识点

1、查看数据库的进程信息

SHOW FULL PROCESSLIST;

2、关闭指定进程

-- KILL Id
KILL 11173;

三、解决方案

1、检查应用程序(客户端、WEB端)

  • 程序内部访问\操作数据库时出现死锁
  • 程序内部抛出异常未对连接进行最终的关闭处理
try
{
     //Open Connection / Session
     
     //Execute SQL Command ,read Data

     //Close DataReader

    //Close Connection / Session
}
catch(Exception exp)
{
   //Close Connection / Session
}
finally
{
  //Close Connection / Session
}

 

2、检测触发器、定时器

触发器:触发器内使用了耗时(数据量过大的因素的考虑)的处理语句、使用了死循环的插入、更新、删除语句,导致死锁/卡锁。

定时器:定时器使用了存储过程、函数,存储过程、函数中包含了耗时(数据量过大的因素的考虑)的处理语句,导致死锁/卡锁。

优化语句、删除冗余的语句。

3、开启事务自动提交

检测事务是否为自动提交,mysql默认是自动提交的

  • 1 - 自动提交
  • 0 - 手动提交

查看命令

SELECT @@autocommit;

设置命令

SET GLOBAL autocommit=1;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值