none
インデックスの再構築による影響について RRS feed

  • 質問

  • SQLServerのDBを利用している製品の運用中にインデックスの再構築を実施した場合の影響について教えていただけないでしょうか。インデックスの再構築を定期実行してもいいのか、DB利用製品を停止してから実施しないといけないのかを確認したいです。利用している製品はSQL Server 2014以降になります。
    2020年10月5日 23:56

すべての返信

  • バージョンは、Enterpriseでしょうか

    オンラインのインデックス再構築は、Enterprise Editionでしかサポートされていないです。

    Standard Editionだと停止してするしか方法がないですが・・・(シングルモードにする必要があります)

    注意点は、以下をご参照ください。

    https://docs.microsoft.com/ja-jp/sql/relational-databases/indexes/guidelines-for-online-index-operations?view=sql-server-ver15



    2020年10月6日 2:29
  • Enterprise Edition を使用している場合は、オンライン操作によるインデックスの再構築が可能となるため、DB利用製品などを停止する(メンテナンス期間をもうける) 必要はないのですが、個人的には、オンライン操作であったとしても、ワークロードが多い時間を避けて、インデックスの再構築処理を実行されることをお勧めします。

    Enterprise Edition を使用していない場合、インデックスの再構築中のオブジェクトに対してアクセスが出来なくなるため、アプリケーション側で不必要なエラー (タイムアウトなど) を発生させたくない場合は、ワークロードが少ない時間帯、もしくは、DB利用製品を停止(メンテナンス期間)した状態で、インデックスの再構築を検討されると良いかと思います。

    なお、インデックスの再構成は、すべてのエディションでオンライン操作が可能であるため、インデックスの再構成と再構築を組み合わせて実行される (平日は オンラインで定期的にインデックスの再構成を実行し、週末に インデックスの再構築を実施するなど) と良いかもしれません。

    インデックスを再構成または再構築することでインデックス断片化を解決する
    https://docs.microsoft.com/ja-jp/sql/relational-databases/indexes/reorganize-and-rebuild-indexes?view=sql-server-ver15

    2020年10月6日 3:54
  • 再構築、再構成、オンライン、オフラインについては他の方の回答を参考になさってください。

    自分から補足として、①オフライン実行時の考え方 ②再構築と再構成についての2点お伝えさせていただきます。

    ①オフライン実行時の考え方

    Enterprise Editionでない場合、再構築はオフライン実行となります。オフライン実行とは、再構築実行中、該当オブジェクトにアクセスしようとしたクエリがブロックされる実行方式のことです。

    したがって、「夜間など、クエリが実行中でない時間帯」がもしあるのであれば、その時間帯でオフライン再構築を定期的に実施いただくのでも問題はないかと思います。

    ②再構築と再構成について

    環境によっては、再構成も再構築もそこまで全体のクエリ実行速度に差がでないことがあります。

    したがって、再構築を検討される場合でも、「本当に再構築が必要なのか」については一度調査してみてもいいかもしれません。

    参考:

    https://techblog.zozo.com/entry/sqlserver-index-reorganize-vs-rebuild

    Enterpriseであれば、あまり深く考えずにオンライン再構築でいいかと思います。

    Enterpriseではない場合、上記2点も考慮にいれてみてください。

    2020年10月6日 5:01