Могут ли хранимые процедуры (или триггеры) Sql Server 2008 вручную параллельно работать или выполнять некоторую логику в фоновом режиме?

StackOverflow https://stackoverflow.com/questions/1647934

Вопрос

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

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

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

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

ваше здоровье!

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top