2011-01-06 8 views
2

Service Brokerを適切に使用しているかどうかを判断し、最大のパフォーマンスを得ようとしています。私たちはSBの会話と処理を調整しており、3000 /分から8000 /分になりましたが、CPUは100%で一定です。さらに、ある日SBキューは空のままですが、同様のトラフィック日にキューは500kまでバックアップできます。SQL Server Service Broker:オーバーヘッドまたは最大のパフォーマンスを決定する方法は?

マシンはクワッドクワッド(16コア)、HTなし、32GB RAM、AWBが有効なSQL Serverに割り当てられた26GBです。

SQL Server 2008 SP1(CUなし)、Enterprise Edition。 Windows NT 6.1(ビルド7600:)のマイクロソフトコーポレーションエンタープライズエディション(64ビット)

のMicrosoft SQL Server 2008(SP1) - 10.0.2531.0(X64)Mar 29 2009 10:11:52

メッセージはサービスブローカキューに挿入されます。サービスブローカキューはメッセージのグループを取得し、XMLを解析して(単純な解析ではなく)CLRを介して実行し、テーブルに挿入します。 CLRはT-SQLコードよりもかなり高速です。

私たちは毎晩統計/索引のメンテナンスを実行するスケジューラ

あたり35の実行可能なタスクの平均を持っています。

パフォーマンスを向上させるために、サーバーMAXDOP = 1を設定しました。

TFAMの競合を避けるために、TF1118のTEMPDBファイルの数を64に引き上げました。これは、TF1118と組み合わせてTEMPDBの競合を停止させたようです。

sys.dm_os_waiting_tasksを見ると、通常、〜60個のタスクがTHREADPOOLで待機していますが、その他の種類はほんの一握りです。

信号待ちは70%(リソース待機= 30%)です。

TokenAndUserPermCacheが20MB未満であることを確認しました。

sys.dm_os_latch_statsを見ると、1分で40~200kのBUFFERラッチが表示されます。これは主にsysdesend上にあり、Dialogsを処理するために使用するユーザーテーブルです。

また、SOS_SCHEDULER_WAITの値が高いこともわかります。これはCPUの負荷も示しています。しかし、CLRが忙しそうに忙しくなったり、Service Brokerのオーバーヘッドが原因です。私は喜んでコードを提供します - ここに投稿する必要があることを教えてください。

ありがとうございます。

+0

これはserverfault.comに再ポストすることを検討したいと思うでしょう。それは管理者のためのサイトです。あなたはまだここで答えを得るかもしれませんが、StackOverflowは通常、(SQLクエリのように)コーディングに合わせて調整されています。 – JNK

答えて

2
  1. ローカルキューイング/処理メカニズムとしてのみSSBを使用していますか、またはリモートメッセージ配信(xマシン転送)が含まれていますか。
  2. いくつのキューがありますか?
  3. アクティベーションは関与していますか?はい、どれくらいのmax_queue_readersですか?
  4. 500kのスパイクで驚かせることができるものは何ですか?彼らが排水するのにどれくらい時間がかかりますか?

暗闇の中でいくつかのショット:

  • あなたはsysdesend/sysderecv周りラッチ競合をバッファリング表示された場合、あなたはこの試みることができる:Service Broker Whitepaper on MSDN: the 150 trickを。
  • ゴーストクリーンアップがタスクまであることを確認してください。Dealing with Large Queuesを参照してください。 Skipped Ghost Records/secはチャートから外れますか?

〜60 CPUマシンでワーカーを待っているタスク...私は通常OKと思っていますが、SSB処理専用のマシンではちょっと変わってしまいます。アクティブ化されたジョブ)を実行するため、THREADPOOL待機を表示する傾向がありません。

+0

ハウディ!アイデアのためにあなたのブログを読んでいたが、 "大規模なキューを扱う"を見ていなかった。 (書式設定のお詫び)あなたの質問に答えるには:1)ローカルのみ。私たちはMSMQでそれを供給しています。 2)2つのキュー、私は信じています。 3)確かではない、チェックします。 4)スパイクではなく、ちょうど段階的な登山(それを食べているSBでも同じ)。それを何かに関連付けることはできません。トラフィックが低下すると、最大10k /分まで処理できるため、SBキューは1時間以内にクリアされます。実装する方法を理解しようとする - 150トリックを知っている(しかし使用していない)。ゴーストを500k/sまでスキップしました。 (さらに別の回答で) – mbourgon

+0

私たちは処理のためにキューから取り出している "バッチ"のサイズを100から1000に引き上げました。それは実際にパフォーマンスを大幅に向上させるようです。私たちはsysdesendがトップラケットの一つであることを知りました。 – mbourgon

+0

メッセージ本文の平均サイズはどのくらいですか? –