mysql的事务死锁问题

李海华 2012-06-22 05:11:46
我有个web工程,加载时用定时器在后台启动了一个进程,后台进程每过一分钟对数据库进行一次操作,这个操作方法serviceA()是有事务的,操作涉及了A表

当我在IE里发请求时也对A表操作,但这个方法clientA()没有事务。可是如果调用clientA时正赶上serviceA执行,此时clientA就有问题了,页面卡住不动,约过几分钟返回错误:
mysql : Lock wait timeout exceeded; try restarting transactio
试了下serviceA方法也卡住了,在clientA返回错误到页面后它才继续循环执行

我感到奇怪的是,clientA方法只访问了一个A表,这种情况下不可能死锁,即clientA方法获得A表锁就一定能不受阻碍地执行完,因为不需要访问的表。

我并且进一步试了,把clientA方法也设成有事务的,仍然不行,除非在clientA方法的第一行就执行一个A表的update操作,空操作也行,这样获得A表的锁,就再也不会等待了。

这是为什么呢?甚至我遇到过没有事务的读方法也会卡住
...全文
306 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
rorom 2012-07-11
  • 打赏
  • 举报
回复
锁了的时候,用SHOW PROCESSLIST 查看到底是什么语句导致的死锁
然后再分析
李海华 2012-06-22
  • 打赏
  • 举报
回复
自己顶

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧