BLOBのマージレプリケーション中の高tempdbディスクI / O


8

BLOB(タイプimage)を複製するためのマージパブリケーションがあり、私のデータサイズに対して非常に高いtempdbディスクI / Oを取得しました。パブリケーションはダウンロード専用であり、フィルターはありません。

高いディスクI / Oは同期によって引き起こされ(サブスクライバーが同期していない場合はすべて問題ありません)、サブスクライバーの数と強く相関しています。同期の間にパブリッシャーでデータが変更されていない場合でも発生します。

  • 複製されたテーブルのサイズ:7MB(行の総数は約100)
  • tempdb I / O:書き込み(ログおよびデータファイル)の場合、最大30 MB /秒
  • サブスクライバーの数:100をわずかに超え、それぞれが30分ごとに(ほぼ均等に)同期しています。
  • 保存期間を14日に設定

パブリッシャーではSQL Server 2008を、サブスクライバーではSQL Server 2005-2008R2を使用します。すべてのサブスクライバーはWeb同期を使用します。

さらに、サブスクライバーでの同期には多くの時間がかかり、replmerg.log次のように複数回発生します。

DatabaseReconciler, 2015/04/21 12:13:40.348, 3604, 25088,  S2,  
INFO: [WEBSYNC_PROTOCOL]  
Sending client ReconcilerPhase WebSyncReconcilerPhase_RegularDownload     

DatabaseReconciler, 2015/04/21 12:13:47.063, 3604, 25194,  S2,  
INFO: [WEBSYNC_PROTOCOL]  
Received server ReconcilerPhase WebSyncReconcilerPhase_LastRegularDownload

@stream_blob_columns効果なしで設定のオンとオフを試みた。

質問がある:それは加入者にこれらのブロブを送信するためにマージレプリケーションを使用することをお勧めしますか?tempdbの問題のない大量のデータを含む他のパブリケーション(BLOB列はありません)があります。それはSQL Serverの欠陥ですか、それとも不適切な設定ですか?

パブリッシャーとディストリビューターは同じインスタンス、SQL Server 2008 SP4上にあり、サブスクライバーについて確信が持てません。それらの一部は最新でない可能性があります。とにかく、それが役立つと思われる場合は、バージョンを制御しているサブスクライバーが少ないテスト環境を準備できます。

の実行が原因でtempdbが過度に使用されていることを確認しましたsys.sp_MSenumgenerations90。チェックされたMSMerge_genhistoryテーブル。120 万以上のレコードpubidがnull であることがわかりました。

レプリケーションの達人とのこの会話を見つけました:

sp_mergemetadataretentioncleanup影響なしに実行されます。

このようなケース(の行が多すぎるMSmerge_genhistory)について、pubidnullとgenstatus= 1の行を削除するとレプリケーションの修正に役立つというコメントが見つかりました。

pubidnullの行を削除し(すべてのサブスクライバーが同期され、同期されないことを意味します。「手動モード」で再初期化されます)、ディスクIOが再び通常に戻ります。

この状況は、すべてのサブスクライバーがWebSyncを介して匿名であり、それらのほとんどが同じホスト名を持っているという事実が原因である可能性があると感じています。-hostnameキーがでレコードを乗算しないようにするのに役立つかどうかを確認してみますMSmerge_genhistory

回答:


1

SQL Server 2008以降のサーバーでのblobのマージレプリケーションの問題について説明しているTechNetブログがあります。

http://blogs.technet.com/b/claudia_silva/archive/2011/10/31/replication-watch-out-for-stream-blob-columns-when-setting-up-replication-on-your-sql- 2008-server.aspx

作成者は、SQL Server 2005クライアントがある場合などに、どの設定を使用するかについて警告していることに注意してください。


おかげで、私はすでにこれを読んでおり、@ stream_blob_columnsは効果がありません。(デフォルトではfalseであり、trueに切り替えても問題は解決しませんでした)
Marvin

1

お客様のサーバーに同様の問題があり、解決できませんでした。大量のIOはストレージをスローダウンさせ、いくつかのシステムに影響を与えました。原因自体を解決するソリューションを提供することはできませんが、結果として生じる問題を解決し、原因を特定して解決するためのより多くの時間を提供する(一時的な)オプションである可能性があります。

tempdbをRAMディスクに移動する際のIO問題を解決しました。私たちのケースでは、パフォーマンスの問題により他のシステムが一時的に応答しなくなったため、迅速に対応する必要がありました。サーバー設定を変更する代わりに、tempdb-filesをramdiskにコピーし、元のファイルのバックアップを作成して、シンボリックリンクに置き換えました。ramdiskは、tempdbファイルを含むイメージをロードします。sql-servicesは、ramdiskが開始され、sql-serviceが開始する前にイメージをロードしたことを確認するために遅延されました。ディスクからRAMに切り替えるための効果的なダウンタイムは1分もかかりませんでした。

私たちの場合、パフォーマンスを大幅に改善し、ストレージの問題を解決しました。このソリューションはお客様にとって非常にうまく機能し、最終的には永続的なソリューションとなっています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.