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锁等待超时
查看正在锁的事务
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
前一篇:swap过高的问题
后一篇:nmon监控工具的使用