有一个应用程序Application1正在发出我们在Prod中使用的insert语句
INSERT INTO Table1
(SELECT FROM Table2
WHERE conditions are true)还有另一个对Table2执行select查询的应用程序Apllication2
SELECT FROM Table2
WHERE conditions are true
with ur现在,每当insert查询运行时,第二个查询运行得非常慢,有时读取超时。
我试图找出Table2是否因为是insert语句的一部分而被锁定,但我找不到任何具体的证据。
我确实找到了给MySQL How to improve INSERT INTO ... SELECT locking behavior的东西
但对DB2来说什么都没有。
有没有人能帮我解释一下慢的原因?
发布于 2018-08-03 19:31:11
insert语句几乎肯定会对table2发出锁。但是,如果您的第二条语句具有with UR,那么它很可能可以避免这些锁。如果您有一个测试系统,您可以尝试将注册表变量DB2_WORKLOAD设置为WAS (这将设置所有这些变量:https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.admin.perf.doc/doc/c0011218.html)。
我建议使用dsmtop或MONREPORT.DBSUMMARY (https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/r0056370.html)来确定只读查询实际花费的时间。
发布于 2018-08-03 14:40:34
您可以使用第二个查询,如下所示: SELECT FROM Table2 WITH(NOLOCK) WHERE条件为真
注意:但是它会给你脏读。
https://stackoverflow.com/questions/51666112
复制相似问题