次の方法で共有


メッセージの保持期間

適用対象:SQL ServerAzure SQL Managed Instance

キューでメッセージの保持期間が指定されている場合、Service Broker はメッセージ交換が終了するまでキューからメッセージを削除しません。 さらに、送信メッセージもキューにコピーします。 これにより、サービスは受信メッセージと送信メッセージの正確な記録を保持できます。

メッセージの保有により、メッセージ交換がアクティブな間、キューのメッセージ交換の正確な記録を保持できます。 詳細な監査が必要なアプリケーションや、メッセージ交換が失敗したときに補正トランザクションを実行する必要のあるアプリケーションでは、メッセージ交換中に各メッセージを状態テーブルにコピーするよりも有効です。

メッセージの保有により、アクティブなメッセージ交換のキューのメッセージ数が増加し、メッセージの送信時に SQL Server で実行される作業量も増加します。 そのため、パフォーマンスが低下します。 パフォーマンスへの正確な影響度合いは、キューを使用するサービスの通信パターンによって異なります。 一般に、アプリケーションを正しく動作させるのにメッセージの保有が必要な場合は、必ずメッセージの保有を使用する必要があります。 アプリケーションが会話がアクティブな間に送受信されたすべてのメッセージの正確な記録を必要としない場合、状態テーブルの状態を維持するとパフォーマンスが向上する可能性があります。 また、会話が終了すると、保持されたメッセージはキューから削除されるため、監査目的で保持を使用している場合は、メッセージを永続的ストレージにコピーしてから会話を終了する必要があります。

Note

メッセージの保有を使用すると、パフォーマンスが低下することがあります。 この設定は、アプリケーション サービス レベル アグリーメントで、送受信された正確なメッセージをアプリケーションに保持する必要がある場合にのみ使用してください。 受信する準備ができているキュー内のメッセージの状態は 1 です。 RECEIVE ステートメントは、状態 1 を示すメッセージを返します。 RECEIVE ステートメントは、メッセージを返した後、状態を 0 に設定し、メッセージの保持がオンの場合はキューにメッセージを残します。 メッセージリテンション期間がオフの場合、 RECEIVE ステートメントはキューからメッセージを削除します。 キューを使用するサービスは、受信メッセージと送信メッセージの両方を保存します。 この場合、SEND コマンドは、(status3を使用して) サービスのキューにメッセージをコピーし、メッセージを伝送キューに追加します。 メッセージ交換が終了すると、キューはこのメッセージ交換に関するすべてのメッセージを削除します。

アプリケーションは同じメッセージを 2 回受信できません。また、アプリケーションはキューに送信メッセージとして追加されたメッセージを受信できません。 保持されたメッセージを操作するには、 SELECT ステートメントを使用してキューにクエリを実行します。 監査を目的とする場合、保持されているメッセージを監査テーブルに挿入してから、メッセージ交換を終了します。 補正トランザクションの場合、通常、アプリケーションは、処理済みのメッセージを新しいものから古いものへ順番に操作し、各メッセージの動作を順番に元に戻します。これを、すべてのメッセージが処理されるまで続行します。

SELECT ステートメントを使用してキューにアクセスする方法の詳細については、「キューのクエリ」を参照してください。