2

約 14000 のメッセージであふれたシングルトン (シーケンシャル コンボイ) オーケストレーション インスタンスがあります。これは、インスタンスが 8 日間処理されていることを意味しますが、現在の処理速度は非常に遅いです (7 分に約 1 回)。インスタンスは高速で起動しましたが、ここ数日で現在のパフォーマンス レベルまで低下しました。

このインスタンスからさらにメッセージを迂回させました。バックログの処理が完了したら終了する予定です。

問題は、計算した現在の処理速度に基づいて、処理が完了するまでに 3 日あることです (約 660 メッセージの処理が残っています)。

私の質問は次のとおりです。これをスピードアップする方法はありますか?

4

3 に答える 3

2

これに対する回避策を作成することができました。

  1. メッセージボックスを照会し、消費されたが処理されなかったすべてのメッセージを取得します
  2. パフォーマンスの低いオーケストレーション インスタンスを強制終了する
  3. オーケストレーションの新しいインスタンスを作成したすべての未処理のメッセージをパイプで戻します。

この新しいインスタンスは、前のインスタンスのすべての履歴 (消費されたメッセージ) によって妨げられていないため、実行速度が約 60 倍速くなり、残りのバックログが高速にクリアされました。

消費されたが処理されていないメッセージを特定する方法は、ここに記載されている方法を使用することでした。

メッセージ ボックス データベースからメッセージ GUID のリストを取得したら、残りは次の場所に文書化されています。

要約すると、メッセージ ID を取得したら、メッセージ ボックス db の Parts テーブルから imgPart 列を選択します。これにより、メッセージ本文のバイナリ エンコードされた圧縮バージョンが得られます。次に、上記の記事のコードを使用してメッセージを再構築します。

この後、すべてのメッセージを取得し、MSMQ 受信場所を介してそれらを biztalk に送り返すだけでした。

長期的には、この問題の発生につながった設計上の欠陥に対処する必要があります。フラッディングは予想されていませんでしたが、実行中のプロセスのパフォーマンスが重い負荷の下で床を突き破ってしまうことは決して良いことではありません。

私たちが抱えている問題は、コンシューマー システムの大部分で、ソース メッセージの順序を維持する必要があることです。このため、どこにでもシングルトンがあり、そのすべてがこの問題にさらされる可能性があります。

ここで、BizTalk でのメッセージの再シーケンス戦略について投稿しました: BizTalk での順序付けされた配信のための再シーケンス戦略

于 2012-08-14T08:28:15.423 に答える
1

最初のシングルトン/マルチトン パターンで同様の動作に気付きました。原因は、非常に多くのメッセージがオーケストレーションと「相関」しているためであると思われました。メッセージの処理が完了しても、オーケストレーション インスタンスがまだ実行されていたため、メッセージボックスから確実に削除されません (BTS 2009、SP なし)。スプール テーブルが最大 50 万行に達すると、すべてのホストがスロットリング状態になり (6だったと思います)、スループットが劇的に低下しました。

以下が役立ちました:

  1. メッセージと変数が orch 内で厳密にスコープされていることを確認し、必要がなくなるとすぐにスコープから外れるようにしました。
  2. タイムアウトを追加して、マルチトンが一定時間 (たとえば 60 秒) 非アクティブになった後に「終了」できるようにしました。これの欠点は、オークが死んでいるときに新しいメッセージが到着した場合、ゾンビが発生する可能性があることです. 幸いなことに、パートナーに遅延を挟んでバーストでメッセージを送信させることができたため、この問題は回避されました.

メッセージボックス/スプールテーブルのレベルが原因でサーバーがスロットリングしていることが判明した場合、「データベースのメッセージ数のしきい値」を一時的に 10 倍に増やしてからホストを再起動すると、現在のバックログがクリアされる可能性があります。

于 2012-08-11T13:02:59.157 に答える
0

BTSデータベースジョブが稼働中であり、正しく構成されていることを確認してください。

于 2012-08-13T20:27:23.937 に答える