一次锁超时解决方法 (Lock wait timeout exceeded; try restarting transaction)

锁超时的原因:

  • 某些SQL语句运行时间过长,长时间占用锁,导致新提交的SQL不能获取锁。
  • 某些事务占用时间过长,没提交或者回滚,导致锁未释放。

第一种情况,可以开启SQL的慢查询日志排查哪些SQL执行效率过低,使用Explain查看SQL是否走索引等,这种情况比较好定位。

第二种情况,要看下代码哪里可能要跑很久的,打日志,找出来。

 

另外记录一些常用的Mysql调试方法。

  • 开启sql慢查询日志
/etc/mysql/my.conf

[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/instance-1-slow.log
long_query_time = 2
  • 开启记录死锁     
set global innodb_print_all_deadlocks=1 
show variables like "%innodb_print_all_deadlocks%";

或者配置错误日志路径在my.cnf配置加 
[mysqld]
log-error=/var/log/mysql-error.log

  • show full processlist

可以用select * from information_schema.processlist;替代,以便过滤    

  • 开启mysql运行的sql语句记录

  • 查询最近一次死锁show engine innodb status\G;

//日志开启(日志输出到表:mysql.general_log 

SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'ON';   

Select * from mysql.general_log;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值