您的位置:首页 > 数据库

多事务同时访问数据库造成事务锁超时问题

2009-08-13 15:05 281 查看
今天在工作中遇到一个情况如下:

在分布式事务中insert一条数据成功插入,可以update的时候就报 Lock wait timeout exceeded; try restarting transaction 这种错误。

查了很多资料。

有人遇到这种情况原因是:事务锁超时的时间设置的太短。 需要加长事务锁的时间。 因为我的insert语句可以实现,所以排除这种可能。

还有说,在使用EJB 修改表B Web Service 修改表A 如果 EJB 包括修改表B 那么也会出现这种问题

经过分析,觉得应该是在进行分布式事务的时候。 有其他的线程对数据库进行访问。而且也造成有事务锁没有释放的情况,则分布式事务等待占用数据库锁的线程释放锁。 造成的超时。 于是我开始查找update的代码看看有没有什么问题。 结果偶然发现其他程序也有调用该update并且正常运行。于是我比对调用这个方法程序的不同。 发现在出现问题的方法中使用spring生命了事务。 这样在这个事务中再开启分布式事务相当于事务的嵌套。两个事务一个是spring管理。 一个是手动管理。所以出现了冲突 。 修改spring声明事务的代码。 将调用update方法事务传播行为中修改为SUPPORTS(支持当前事务,如果当前没有事务,就以非事务方式执行)问题解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐