Тайм-аут с триггером INSTEAD OF DELETE - PullRequest
2 голосов
/ 31 августа 2011

У меня проблемы со временем ожидания вместо триггера удаления в SQL Server 2008 R2.Похоже, это происходит только тогда, когда многие (> 6 или около того) CustomFieldOption s удалены в одной и той же транзакции.

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

Я понимаю, что, вероятно, потребуется дополнительный контекст (я обновлю вопрос по мере необходимости)- Я делаю что-то явно не так?

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Сначала я определил бы, если у вас возникла тупиковая ситуация: Как отследить взаимные блокировки с помощью SQL Server 2005 Profiler (также применимо к SQL Server 2008 R2)

[Между прочим: вам нужен только один экземпляр SET NOCOUNT ON; для хранимой процедуры]

Во-вторых, (в соответствии с комментарием Мартина), какие индексы у вас есть в этих таблицах? Правильные (покрывающие) индексы могут иметь огромное значение как для общей производительности, так и для блокировки.

1 голос
/ 31 августа 2011

Есть ли в ваших таблицах соответствующие индексы для удаляемых вами соединений? Как план выполнения выглядит для этих утверждений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...