2016-05-12 7 views
1

私はテーブルtable1を持っています。私は、各挿入、更新、および変更イベントでトリガを使用してそのテーブルの監査を作成したいと思います。非同期トリガーとトリガー

この表では、一般的に一括更新、削除、または挿入は実行しません。しかし、時には何千ものレコードが変更されます。私はここでどのアプローチが効率的であるかを知りたいだけです。

  1. 単純なトリガー
  2. サービスブローカーに

を使用して非同期のトリガサービスブローカーを使用して非同期トリガーは、挿入、更新および削除の劣らずのためによく行ってますか?

答えて

2

SQL Serverは、実際には非同期トリガを提供しません。できるだけ通常の同期トリガがあり、このトリガではSENDを使用して、接続されたアクティブプロシージャを持つキューにホストされているService Brokerサービスにメッセージを送信し、この起動されたプロシージャをトリガします。元の同期トリガはコミットします。これは、トリガー「アクション」が高価で、延期する必要がある場合、またはアクションがHTTP Webサービスリクエストのような何らかの処理を行う場合に、リクエストがコミット後にのみ発生することを保証する必要がある場合に意味があります。しかし、元のSENDはすべての動作を同期トリガで発生させる必要があるため、Service Brokerに基づく非同期トリガは同期トリガの元の制限(例:may not fire on bulk insert)の影響を受けます。

考慮すべきもう1つの点は、 '非同期の' Service Brokerのバックアップトリガーに移動することはコストがかかることです。通知メッセージを送信して受信するには、少なくとも1つの挿入、2つの更新、および1つの削除(SENDRECEIVEを表す基になる操作)を実行する必要があります。また、非同期異常に対処する必要があります。非同期トリガーが実行されるまでに、データがうまく変更されている可能性があります。

個人的には、データ監査の場合、Change TrackingChange Data Captureの方が多く見えます。

+0

一度メッセージを送信すると、少なくとも私は応答を待つ必要はなく、トランザクションはブロックされません – gkarya42

関連する問題