SQL Server 2008: можно ли временно приостановить выполнение асинхронных триггеров? - PullRequest
0 голосов
/ 06 февраля 2011

Есть ли способ временно подавить выполнение асинхронных триггеров в SQL Server 2008. Я реализовал триггеры с помощью очереди и посредника служб, который читает из очереди.С тех пор я хочу выполнить некоторые тяжелые запросы на этом сервере, и эти триггеры будут резко замедлять работу - как я могу остановить выполнение триггеров, но они все равно попадают в очередь, чтобы выполнить их позже.

Заранее спасибо!

Ответы [ 3 ]

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

Первый ответ с комментированием хранимой процедуры, а затем с отключением и включением очереди должен работать.У меня похожая ситуация - очередь сервисного брокера позади после триггера обновления вставки.Очередь использует хранимую процедуру для активации.Я сделал следующее (почти так же, как первый ответ, но не закомментировал тело хранимой процедуры): 1. Деактивировать очередь:

изменить имя очереди QueueName с активацией (status = off);

  1. При массовых обновлениях сообщения будут сохраняться в очереди.

  2. Активировать очередь:

alter queue QueueName с активацией (status = on);

Хранимая процедура очереди будет выполняться для каждого из сохраненных сообщений в очереди.

0 голосов
/ 10 февраля 2011

Вот что мы придумали:

Первое: закомментируйте тело хранимой процедуры, которая читает сообщения в очереди.Все остальное (триггеры, очередь и т. Д.) Работает так, как должно работать.Таким образом, сообщения попадают в очередь, но оттуда никто не читает

Второе: выполняйте тяжелые сценарии.Теперь очередь заполняется операциями, которые будут выполнены позже.

Третье: раскомментировать тело хранимой процедуры в исходное состояние.

Forth: выполнить Disable и после операции Enable в очереди.Теперь хранимая процедура начнет читать из очереди.И изменения применяются асинхронно.

0 голосов
/ 06 февраля 2011

Да, ОТКЛЮЧИТЕ ТРИГГЕР, и когда вы закончите, ВКЛЮЧИТЕ ТРИГГЕР.См. http://msdn.microsoft.com/en-us/library/ms189748.aspx для документации.

Однако это означает, что триггеры никогда не будут работать для данных, которые вы вводите. Если вы в конечном итоге захотите, чтобы триггеры выполнялисьвам придется сделать это вручную.Имейте в виду, что для этого требуется дублированная логика, и поэтому ее легко испортить.Соблюдайте осторожность.

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