2017-06-14 18 views
0

SQL Server 2014には2つのデータベースがあります。SourceDBLogDBです。 SourceDB上では、Service Broker;サーバー上でService Broker External Activatorサービスがアクティブになります。Service Broker外部アクティベータ応答が長くかかる

SourceDBについてTargetQueueには、テーブルの(Product)挿入トリガがTargetQueueで変更を送信するTargetQueueがあり、TargetQueueには外部のexeクライアントを振り分けるイベント通知があります。 exeクライアントの中では、私はついにWAITFOR(RECEIVE TOP (1))..経由でデータをデキューし、LogDBに直接ログします。

したがって、私はSBEAサービスを開始し、最初の挿入時に(すべてのレコードを削除した後で)すぐにTargetQueueを挿入しますが、挿入時刻からSourceDBまでの間隔はLogDBへの挿入まで約です3-6秒、イベント通知ベースの時間消費ここでは、わからないと思います。これ以降の挿入の場合、間隔は100msとなります。

まず

First

さらに

Further

  1. なぜ最初の挿入は、それがになると、なぜ後のテーブルのすべてのレコードを削除し、時間がかかりすぎていますもう一度長くかかりますか?なぜ、それ以上のものは最初のものより短くなりますか?
  2. 10ms未満でSQLCLRを使用してほぼ同じ構造を実現できるため、10ms未満の間隔を減らすことはできますか?最も速い応答は私のアプリケーションにとっても重要ですか? (どちらの構造も同じSQL Serverインスタンスがローカルで動作しています)
+0

サービスブローカは、本質的に非同期であるあなたが技術としてそれを使用したい場合は、つまり、生成されたすべてのメッセージは最終的にプロセスによって消費されますが、キューからの同期動作に近いと思われるように、あなたは非常に多くのことを聞いています。 –

+0

@BenThul私は、Service Brokerを使用していますが、私のサーバーは頻繁に要求を受けるため、非同期です。これらの要求の処理を中断しないように、 Service Brokerを同期構造の代わりに使用することができます(最近、ここでは良いアドバイスを提供しています)。しかし、実際にはこのパフォーマンスには本当に不満があります。だから、これが私が本当に求めていることです。 – ibubi

答えて

1

外部アクティベータとイベント通知を削除することで、プロセスを合理化できます。代わりに、継続的にWAITFORを実行しているプログラムを持っている(ループ内のターゲット・キューに直接RECEIVE

は、ここでは、始めるためのサンプルです:。。https://code.msdn.microsoft.com/Service-Broker-Message-e81c4316

+0

迅速な対応のためにイベントベースの構造に頼るべきではないという意味ですか?そして、 'Waitfor(..'文はSQLサーバにとってコストがかかりますか? – ibubi

+0

)イベント通知、外部アクティベータ自体、外部プロセスを起動する必要があるという事実はすべて時間を追加し、WAITFOR(RECEIVEはポストされません)妥当なタイムアウト(少なくとも数秒)を使用している限り、 –

+0

Davidさん、ありがとうございました。これを試して結果を得るようにしています。 – ibubi

関連する問題