Могут ли хранимые процедуры (или триггеры) Sql Server 2008 вручную параллельны или справляться с некоторой логикой? - PullRequest
1 голос
/ 30 октября 2009

Если у меня есть хранимая процедура или триггер в Sql Server 2008, может ли он выполнить некоторые вычисления sql «в другом неблокирующем потоке»? то есть. что-то на заднем плане

также, два блока кода SQL могут быть запущены параллельно? или два хранимых процесса запускаются параллельно?

например. Представьте себе, что нам дают задание по подсчету баллов для каждого пользователя переполнения стека (и, пожалуйста, оставьте все «делай это иначе» / service / batch / overnight / etc, elswhere) после того, как пользователь выполнит «действие».

Итак, у нас есть триггер в таблице сообщений, поэтому, когда новый пост вставляется, триггер срабатывает, и часть этой логики вычисляет последний счет пользователя. Вместо того чтобы ждать, пока сохраненный процесс завершит работу и заблокирует текущий поток / исполняемый файл sql, мы можем попросить его вычислить счет в фоновом режиме ИЛИ параллельно.

ура!

Ответы [ 2 ]

2 голосов
/ 30 октября 2009

SQL Server не имеет параллельного или отложенного выполнения: каждый блок исполняемого кода в соединении является последовательным, одна строка за другой.

Чтобы отделить обработку, вы обычно должны использовать задания агента SQL Server или использовать Service broker . Они начинают выполняться в новом соединении, новом сеансе и т. Д.

Это имеет смысл:

  • Что если вы хотите откатить изменения? Что делает фоновый поток и как он знает?
  • Какие данные он использует? Новый, Старый, блокировка, ожидание, снимок?
  • Что если он опередит основной поток и использует устаревшие данные?
1 голос
/ 30 октября 2009

Нет, но вы можете написать запрос в очередь. Компонент SQL Server Service Broker обеспечивает поддержку такого рода вещей. Возможно, это лучший вариант для асинхронной обработки.

...