web-dev-qa-db-ja.com

Ola Hallengrenインデックスの最適化-「未使用」のインデックスをスキップ

Olaのスクリプトを使用したインデックスのメンテナンス中に、そのインデックスの合計読み取りに基づいて「未使用」のインデックスをスキップする方法はありますか?

という事は承知しています

  • インデックス統計は最後の再起動以降のものなので、ビジネスサイクル全体の監視が重要です
  • ビジネスサイクルで後で、一度でも必要になる可能性がある「未使用」のインデックスで再編成または再構築をスキップすると、パフォーマンスの問題が発生する可能性があります
  • 誰もが「ただ取り除いてみませんか」と考えています

後者に答えるために、これはベンダー提供のアプリケーションであり、OLTP 2TBのDBを使用しています。準拠を維持するために、私たちは多くを変更することはできず、他のものの間でそれらのインデックスを削除することはできません。したがって、これらのインデックスが使用されていないことを確認したら、これらのインデックスをスキップすることでメンテナンス時間を短縮することは有益だと思いました。

コメントをフォローするには、これが実行できない場合は、拡張機能としてOlaに投げる価値がありますか?

3
scsimon

私はそのようなオプションはないと思います、そしてOlaに機能リクエスト(またはプルリクエスト)を提出することができますが、除外したいインデックスのリストを提出することができます。

たとえば、_ALL_INDEXES, -Db1.Schema1.Tbl1.Idx1_を_@indexes_パラメータに渡すと、スクリプトはデータベースDb1のオブジェクトSchema1.Tbl1のインデックスIdx1をスキップします。

_@indexes_パラメータはnvarchar(max)であるため、必要なだけインデックスを渡すことができます。

これは維持するのが非常に退屈になるかもしれませんが、未使用のインデックスを決定するために使用するクエリからリストを生成できるはずです。

ただし、このアプローチでは、スキップするインデックスをよりきめ細かく制御できるため、たまにしか使用されないインデックスをスキップしないようにしたり、別のジョブを作成して、通常の未使用の大きなインデックスをスキップしたりできます。仕事ですが、メンテナンスウィンドウが大きい場合などは、それらの一部を最適化します。