DB2 INSERT INTO…SELECT锁定

时间:2018-08-03 05:56:26

标签: sql select insert db2 locking

有一个应用程序Application1,它发布了我们在Prod中使用的插入语句

    INSERT INTO Table1
    (SELECT FROM Table2
    WHERE conditions are true)

还有另一个应用程序Apllication2正在对Table2进行选择查询

    SELECT FROM Table2
    WHERE conditions are true
    with ur

现在,无论何时运行插入查询,第二个查询的运行速度都很慢,有时读取超时。

我试图查找Table2是否由于作为insert语句的一部分而被锁定,但是我找不到任何具体证据。

我确实为MySQL找到了一些东西 How to improve INSERT INTO ... SELECT locking behavior

但对于DB2没有任何帮助。

有人可以帮我理解缓慢的原因吗?

2 个答案:

答案 0 :(得分:1)

几乎可以肯定,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)。

我建议使用dsmtopMONREPORT.DBSUMMARYhttps://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/r0056370.html)来确定只读查询的实际时间。

答案 1 :(得分:0)

您可以使用以下第二个查询: 从Table2中选择WITH(NOLOCK)  条件正确的地方

注意:但这会给您带来脏读。