2011-08-31 147 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

相关问题