2011-08-31 127 views
2

我在SQL Server 2008 R2下發生了以下問題而不是刪除觸發器的超時問題。只有在很多(> 6個左右)CustomFieldOption在同一個事務中被刪除纔會出現。INSTEAD OF DELETE觸發器超時

CREATE TRIGGER dbo.[DeleteCustomFieldOptionInsteadOfTrigger] ON dbo.[CustomFieldOption] INSTEAD OF DELETE 
AS 

BEGIN 

    SET NOCOUNT ON; 

    UPDATE ucf SET ucf.PendingCustomFieldOptionIdValue = NULL, ucf.PendingProposedStateId = NULL 
       FROM UserCustomField ucf 
    INNER JOIN deleted d ON d.CustomFieldOptionId = ucf.PendingCustomFieldOptionIdValue 
    WHERE ucf.CurrentCustomFieldOptionIdValue IS NOT NULL; 

    SET NOCOUNT ON; 

    DELETE ucf FROM UserCustomField ucf 
       INNER JOIN deleted d ON d.CustomFieldOptionId = ucf.PendingCustomFieldOptionIdValue 
    WHERE ucf.CurrentCustomFieldOptionIdValue IS NULL; 

    SET NOCOUNT ON; 

    DELETE ucf FROM UserCustomField ucf 
       INNER JOIN deleted d ON d.CustomFieldOptionId = ucf.CurrentCustomFieldOptionIdValue; 

    SET NOCOUNT ON; 


    DELETE cfo FROM CustomFieldOption cfo 
    INNER JOIN deleted d ON d.CustomFieldOptionId = cfo.CustomFieldOptionId; 

    SET NOCOUNT OFF; 

END 

我認識到可能需要進一步的上下文(我會根據需要更新問題) - 我在這裏做了什麼明顯錯誤的事嗎?

+0

爲'死鎖'和'死鎖圖表'運行一個分析器跟蹤 –

+0

@Mitch小麥:你能更具體一點嗎?請回答:我需要做的跟蹤? – DanP

+2

你的表是否有適當的索引,用於正在進行的'刪除'連接?這些陳述的執行計劃是什麼樣的? –

回答

1

您的表格是否有適當的索引,用於刪除您正在進行的連接?這些陳述的執行計劃是什麼樣的?

2

我會首先確定是否遇到一個僵局:How to Track Down Deadlocks Using SQL Server 2005 Profiler(適用於SQL Server 2008 R2以及)

[順便說一句:你只需要在每個存儲過程的SET NOCOUNT ON;一個實例]

其次, (根據@ Martin的評論)你在這些表上有哪些索引?正確的(覆蓋)索引可以對整體性能和阻塞產生巨大的影響。

+0

感謝您的信息;看起來可能需要相當多的工作來解決這個問題的底部。 – DanP

相關問題