最近的项目,每一个事务的的动作太多,然后测试发现有功能导致mysql死锁了
不过很奇怪的是,死锁的语句是一条单纯的非事务update语句,这个我就有点想不通了,如果说是另一个事务锁住了当前行,那么这条update就一句话肯定是无法阻挡事务的继续执行,那么事务执行完毕之后,次update便可以顺利执行了,现在的现象是,用show processlist查看整个数据库就只有这条update处理update状态,没有任何其他语句阻塞,直到达到超时时间50秒,才释放.
这还请高手指点原因.
另外,如果事务锁表较多,是否应该尽量使用同一顺序?如果表有差异,却有局部相同的表,怎么处理比较好呢?
对了,补充一下:
我在本地测试的时候,同样跟服务器是64位mysql,但是jdk是32位的,服务器jdk是64位的,在本地大量数据测试完全没有问题的,一上服务器,只要数据超过2条,就必出问题...
不过很奇怪的是,死锁的语句是一条单纯的非事务update语句,这个我就有点想不通了,如果说是另一个事务锁住了当前行,那么这条update就一句话肯定是无法阻挡事务的继续执行,那么事务执行完毕之后,次update便可以顺利执行了,现在的现象是,用show processlist查看整个数据库就只有这条update处理update状态,没有任何其他语句阻塞,直到达到超时时间50秒,才释放.
这还请高手指点原因.
另外,如果事务锁表较多,是否应该尽量使用同一顺序?如果表有差异,却有局部相同的表,怎么处理比较好呢?
对了,补充一下:
我在本地测试的时候,同样跟服务器是64位mysql,但是jdk是32位的,服务器jdk是64位的,在本地大量数据测试完全没有问题的,一上服务器,只要数据超过2条,就必出问题...
解决方案 »
- Exception starting filter struts2
- hibernate中如何解决主键的配置问题?
- 用纯JAVA实现页面显示报表,急求
- tomcat6 启动时出现异常,请高手指点迷津
- seam中session bean的使用问题
- 求JAVA 英语资料
- 【高手帮助】'sessionFactory'报错该怎么解决
- 初用JFreechart报错!!!!!
- junit测试的方法调用了JNDI,总是出错......
- windowsXP系统下jdbc驱动连接sqlserver2000的问题。
- struts2标签或者el表达式如何与html input表单value值相加?
- 急!!!关于hibernate的问题
另外:有没有检查过本地数据库表的类型 和 服务器端表的类型 是否一致?
表类型是一致的
select进行锁是什么前提呢?
看事务隔离级别,比较简单的做法是:Select .... For Update估计是Update所使用的检索没有索引吧?导致全表扫描速度很慢。
不对的,这条语句也有正常的情况,正常的时候都是秒杀的
现在不太清楚为什么会出现updating状态
听起来更像是需要Update的行集被锁住了,所以等待释放锁。