Sql Server 2008のストアドプロシージャ(またはトリガー)は、手動でいくつかのロジックを並列またはバックグラウンドできますか?
-
22-07-2019 - |
質問
SQL Server 2008にストアドプロシージャまたはトリガーがある場合、「別の非ブロッキングスレッドで」いくつかのSQL計算を実行できますか?すなわち。バックグラウンドで何か
また、2つのSQLコードブロックを並行して実行できますか?または2つのストアドプロシージャを並行して実行しますか?
たとえば、。ユーザーが何らかの「アクション」を実行した後、各Stack Overflowユーザーのスコアを計算するジョブが与えられたと想像してみてください(そして、他のすべての「行うこと」を残してください)。
したがって、Postテーブルにトリガーがあるため、新しい投稿が挿入されると、トリガーが起動し、そのロジックの一部として、ユーザーの最新のスコアが計算されます。ストアドプロシージャが終了して現在のSQLスレッド/実行プログラムをブロックするのを待つ代わりに、バックグラウンドでORを実行してスコアを計算するように要求できますか?
乾杯!
解決
SQL Serverには、並列実行または遅延実行はありません。接続で実行されているコードの各ブロックは、1行ずつ連続しています。
処理を分離するには、通常、SQL Serverエージェントジョブを使用するか、サービスブローカー。これらは、新しい接続、新しいセッションなどで実行を開始します
これは理にかなっています:
- 変更をロールバックしたい場合はどうしますか?バックグラウンドスレッドは何を行い、どのようにそれを知るのですか?
- どのデータを使用しますか?新しい、古い、ロック待機、スナップショット?
- メインスレッドより先に進み、古いデータを使用するとどうなりますか?
他のヒント
いいえ。ただし、リクエストをキューに書き込むことはできます。 SQL ServerコンポーネントであるService Brokerは、この種のサポートを提供します。おそらく、非同期処理に利用できる最良のオプションです。
所属していません StackOverflow