首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql死锁解决方案

2012-10-10 
mysql死锁最近的项目,每一个事务的的动作太多,然后测试发现有功能导致mysql死锁了不过很奇怪的是,死锁的语

mysql死锁
最近的项目,每一个事务的的动作太多,然后测试发现有功能导致mysql死锁了
不过很奇怪的是,死锁的语句是一条单纯的非事务update语句,这个我就有点想不通了,如果说是另一个事务锁住了当前行,那么这条update就一句话肯定是无法阻挡事务的继续执行,那么事务执行完毕之后,次update便可以顺利执行了,现在的现象是,用show processlist查看整个数据库就只有这条update处理update状态,没有任何其他语句阻塞,直到达到超时时间50秒,才释放.
这还请高手指点原因.
另外,如果事务锁表较多,是否应该尽量使用同一顺序?如果表有差异,却有局部相同的表,怎么处理比较好呢?

[解决办法]
锁是锁的索引块 并不是锁数据行

如果一个update锁定第1,2,3索引块 第二个update也需要锁定第1,2,3索引块

则第二个如果锁的顺序是3,2,1 则可能和第一个update产生死锁
[解决办法]
show process 看一下是和哪个进程产生冲突。
[解决办法]
show innodb status可以看上一次死锁的原因
[解决办法]
mysql5.5之后 show engine innodb status\G
[解决办法]
你的语句是什么? 表的create table 语句是什么? show index from xxx 也一同贴出以供分析。

热点排行