日期:2014-05-19  浏览次数:21073 次

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

------解决方案--------------------
也要查查是否还有 Select 做了行锁或表锁的,不能只看Update。

另外如果是一个事务中有多个操作语句,那么相互作用关系会更复杂。


另外:有没有检查过本地数据库表的类型 和 服务器端表的类型 是否一致?
------解决方案--------------------
配置连接池试试呢?
------解决方案--------------------
探讨
select进行锁是什么前提呢?

------解决方案--------------------
探讨
不对的,这条语句也有正常的情况,正常的时候都是秒杀的
现在不太清楚为什么会出现updating状态

------解决方案--------------------
你们用的是 MyISAM 还是 InnoDB 引擎?