Concurrency 一个删除多行的delete语句会导致死锁吗?
我们在z/OS上使用DB2有效版本8(或多或少,因此没有CUR_COMMIT) 在我们的(基于Java的,尽管这不应该相关)应用程序中,存在一个方法,该方法在事务中运行,并根据某一列的值(我们称之为特殊列)从名为MY_table的表中删除多条记录,执行该语句Concurrency 一个删除多行的delete语句会导致死锁吗?,concurrency,db2,database-deadlocks,db2-zos,Concurrency,Db2,Database Deadlocks,Db2 Zos,我们在z/OS上使用DB2有效版本8(或多或少,因此没有CUR_COMMIT) 在我们的(基于Java的,尽管这不应该相关)应用程序中,存在一个方法,该方法在事务中运行,并根据某一列的值(我们称之为特殊列)从名为MY_table的表中删除多条记录,执行该语句 DELETE FROM MY_TABLE WHERE SPECIAL_COLUMN=? 除了执行这个语句外,还会执行一些其他SQL语句,我省略了这些语句,因为目前我认为它们可能与我描述的问题无关 同时运行该方法时,我们有时会看到异常 ne
DELETE FROM MY_TABLE WHERE SPECIAL_COLUMN=?
除了执行这个语句外,还会执行一些其他SQL语句,我省略了这些语句,因为目前我认为它们可能与我描述的问题无关
同时运行该方法时,我们有时会看到异常
nested exception is com.ibm.db2.jcc.am.SqlException:
UNSUCCESSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT. REASON CODE 00C90088, TYPE OF RESOURCE 00000302, AND RESOURCE NAME ... SQLCODE=-913, SQLSTATE=57033, DRIVER=3.63.131
在执行从MY_表中删除时抛出,其中SPECIAL_COLUMN=?陈述根据这种说法,这似乎与“页面”上的锁有关
我的问题如下:
链接到一个类似问题的报告是的,两者都有可能,所以?@mustaccio谢谢你,我真的问了(在我问题的末尾)对于此问题,什么可能是合理的解决方案。您能建议一个可能的路径吗?如果您在频繁提交的情况下,在适当的索引下逐个删除唯一标识的记录,您不太可能遇到死锁。任何其他解决方案都会在不同程度上受到锁冲突和/或竞争条件的影响。mo如果不熟悉您的数据库和应用程序,就不可能重新给出详细的答案。非常感谢,我将这样做(当然要记住,要按定义良好的顺序删除行,例如按主键排序)。删除的顺序完全不重要。但是,我假设您知道逐个删除行会对性能产生影响。始终存在权衡。