加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Lock wait timeout exceeded 问题处理办法

(2014-08-13 18:36:11)
标签:

死锁

分类: 工作相关

Lock wait timeout exceeded为锁等待超时。

1、锁等待超时。是当前事务在等待其它事务释放锁资源造成的。可以找出锁资源竞争的表和语句,优化你的SQL,创建索引等,如果还是不行,可以适当减少并发线程数。 ,Mysql的 InnoDB存储引擎是支持事务的,事务开启后没有被主动Commit。导致该资源被长期占用,其他事务在抢占该资源时,因上一个事务的锁而导致抢占失败!因此出现 Lock wait timeout exceeded
 
2、你的事务在等待给某个表加锁时超时了,估计是表正被另的进程锁住一直没有释放。
 
可以用 SHOW INNODB STATUS/G; 看一下锁的情况。 
 
3、搜索解决之道 
 
在管理 节点的[ndbd default] 
区加: 
TransactionDeadLockDetectionTimeOut=10000(设置 为10秒)默认是1200(1.2秒) 
 
4、InnoDB会自动的检测死锁进行回滚,或者终止死锁的情况。
 
如果参数innodb_table_locks=1并且autocommit=0时,InnoDB会留意表的死锁,和MySQL层面的行级锁。另 外,InnoDB不会检测MySQL的Lock Tables命令和其他存储引擎死锁。 
你应该设置innodb_lock_wait_timeout来解决这种情况。 
innodb_lock_wait_timeout是Innodb放弃行级锁的超时时间


1)select * from information_schema.innodb_trx 之后找到了一个一直没有提交的只读事务,

kill 到了对应的线程后ok 了。
select * from innodb_trx 查看有是哪些事务占据了表资源。

2)show engine innodb status , 并结合 show full processlist;

3)在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎);
innodb_trx ## 当前运行的所有事务
innodb_locks ## 当前出现的锁
innodb_lock_waits ## 锁等待的对应关系


解决办法:设置MySQL锁等待超时 innodb_lock_wait_timeout=50 ,autocommit=on

 

查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;  
 
查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 

http://blog.sina.com.cn/s/blog_53e68b3b0101bjxi.html

http://www.th7.cn/db/mysql/201406/57377.shtml


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有