无限期运行的事务下的UPDATE语句

时间:2017-11-24 16:42:42

标签: sql sql-server sql-server-2005 sqlperformance

我在一个存储过程(使用SQL Server 2005)中遇到了永远运行查询的问题。

在此存储过程中,有许多UPDATE语句和一些在一个Transaction下运行的INSERT语句。

调试存储过程时,我发现有一个特定的UPDATE查询无限期地运行,如下所示。

BEGIN TRAN  
...   
...-- some INSERT & UPDATE statements   

 UPDATE PIH
        SET PIH.RemittanceHeaderID = RD.RemittanceHeaderID
        FROM TempPayroll TP 
            INNER JOIN RemittanceDetails RD  ON TP.UniqueID = RD.PLInvoiceDetailID 
            INNER JOIN PLInvoiceHeader PIH  ON RD.PLInvoiceUniqueID = PIH.InvoiceUniqueID AND PIH.CompanyCode = TP.CompanyCode
        WHERE TP.PLSelfBill = 1 
            AND TP.UsePLPaymentTerms = 1
            AND RD.PLInvoiceDetailID IS NOT NULL
            AND TP.RecordType LIKE 'INVOICE%'
            AND RD.RecordType LIKE 'INVOICE%'  
  ... --some UPDATE statements
COMMIT TRAN

但是,当我删除CompanyCode条件时,存储过程正在快速运行而没有任何问题。此外,如果我单独在一个事务下单独执行此语句,它运行正常。

此查询有大约240条匹配记录。每个表只包含30k - 50k记录。

如何调试查询以及如何修复它?

为什么只有JOIN条件(CompanyCode)才会产生此问题?

提前致谢。

0 个答案:

没有答案