软件开发死锁db2 9.7

这个DB2死锁我真的想不通

有A/B两张主从表,B从表里面对应A表的外键上有建了索引,事务1、2会同时查询、汇总B表里面的自身的部分数据,然后删除记录。例如事务1查询、汇总B表里面的1~5笔记录,事务2查询、汇总B表里面的6~10笔记录,然后删除各自的这5笔数据。但是在删除的时候,发生了死锁,当前锁模式为NS锁,请求...显示全部
有A/B两张主从表,B从表里面对应A表的外键上有建了索引,事务1、2会同时查询、汇总B表里面的自身的部分数据,然后删除记录。
例如事务1查询、汇总B表里面的1~5笔记录,事务2查询、汇总B表里面的6~10笔记录,然后删除各自的这5笔数据。
但是在删除的时候,发生了死锁,当前锁模式为NS锁,请求X锁。

数据库版本:DB2 V9.7
由于特殊原因,关闭了CUR_COMMIT = DISABLE;
锁超时:15秒
死锁检测:10秒

环境变量设置:
DB2_SKIPINSERTED=ON
DB2_EVALUNCOMMITTED=ON
DB2_SKIPDELETED=ON

用DB2 V9.7的死锁监控,监控到的锁事件相关信息见附件SQL。

实在是想不通这个死锁是如何产生的,求教育。

附件:

附件图标LOCK_PARTICIPANT_ACTIVITIES.xlsx (98.92 KB)

收起
参与21

查看其它 18 个回答xmherz的回答

xmherzxmherz测试工程师中软海晟
回复 14# stevenluffy


    谢谢你的建议,最后我们就是改变了SQL写法,将原来主从表关联查询数据,改成先获取主表ID,然后再根据主表ID查从表,这样就不会死锁了。
    这是个很大的事务,需要保证所有数据一致性,因此也不能用UR级别。
    只不过DB2的锁机制在这点上我觉得是个很大的BUG,为什么关联查询,就会把非自己的数据给NS锁掉了,希望改进啊。。。。
软件开发 · 2014-07-23
浏览1212

回答者

xmherz
测试工程师中软海晟

xmherz 最近回答过的问题

回答状态

  • 发布时间:2014-07-23
  • 关注会员:2 人
  • 回答浏览:1212
  • X社区推广