none
ミラーリング構成(同期)で、インデックス再構成実行中に、他処理のコミットタイムアウトが発生する RRS feed

  • 質問

  • ■B2CのWEB取引サイトを構築

    ■DBは、Win008ServerR2+SQLServer2008R2 EE ミラーリング(同期)をVMWARE上で構築

    ■概要
     インデックス再構成 ⇒ 日次
     インデックス再構築 ⇒ 週次
      をオンライン中に実施している。

      とりわけ、インデックスサイズが相対的に大きい(5GB以上)のインデックスの再構成実行中に、他のオンライン処理や、バッチ処理でコミットタイムアウトが発生しており(現在、5秒で設定)、これを解決したい。1分程度の再構成中にも発生するが、ほとんどが20分以上の再構成で発生している。

    インデックス再構築は、再構成を日次でやっているため、あまり対象となるインデックスがないので同事象が発生していないだけか、もしくは、再構築の処理方式では、再構成と同様の事象が発生しないのかはまだ分からない。

    ■仮説と質問

    ・ミラーリングが同期型のため、インデックス再構成のトランザクションログもミラー側に圧縮?・転送され、I/O負荷が非常に高くなる(ディスクIO負荷が高く、カレントキューレングスが200~300となる場合) ⇒ これがミラーリングだと普通なのか、どう評価すれば良いのかわからない

    ・I/O負荷が高く、ミラーリングへの反映がボトルネックとなり、他のオンライン処理や、バッチ処理のコミットのミラーリング側への同期反映がタイムアウトエラーとなっている?

    ・対応案として

     ・コミットタイムアウト5秒を適正な値 例:デフォルト15秒以上 に設定する。上記動作が、オンライン中のインデックス再構成動作として概ね適切で改善が難しいものである場合、一時的なレスポンス劣化を許容する

     ・ページ圧縮、行圧縮など圧縮機能を利用し、インデックスを圧縮することで、I/O負荷を減らす

     ・ミラーリング同期としても、上記の状態は異常であるため、ごくわずかなオフライン時間を利用して、インデックス再構成 or 再構築を優先度の高いものから行う

     などかと考えております。

    また、

    ・そもそも、再構成を日次で5%以上で実施しているが、それは適切か?

    ・断片化率がどこまで進むと、一般的に処理影響につながるものと言えるか?

    という質問もあります。

    以上、何か、ヒントとなるアドバイスをいただければと存じます。

    2014年2月10日 15:47

回答

  • ミラーリングで同期させているのであればインデックスの操作もミラー側でも実行されます。
    オンライン中のインデックス操作はI/O負荷による影響が大きいので避けるべきかと思います。
    インデックスの断片化による影響は大量データの読み込み時に大きくなるでしょう。
    私であれば断片化解消がほかの重要な処理に影響を与えるのでれば避けます。
    もし実行が必須であればオフライン時間帯で実行し、オンラインになる少し前に
    インデックス再構成をキャンセルしてはどうでしょうか。再構成であれば途中まで
    最適化したインデックスが利用可能です。
    またメンテナンス時間を取って30%以上断片化したインデックスを再構築するといった
    運用も考えられると思います。

    こちらのblogが参考になると思います。
    http://blogs.msdn.com/b/jpsql/archive/2013/03/01/10397042.aspx

    • 回答の候補に設定 星 睦美 2014年2月17日 7:41
    • 回答としてマーク 星 睦美 2014年2月28日 4:25
    2014年2月15日 11:42
    モデレータ