データベースのパフォーマンスにとって最も重要な変数の 1 つが、SQL インデックス フラグメンテーションです。 断片化レベルが適切に管理されないと、ブロック、デッドロック、IO 問題、ディスク流出問題に直面する可能性があります。
DMVs
SQL Server では、DMV sys.dm_db_index_physical_stats を使用して、インデックスの断片化レベル、ページ数、およびインデックス タイプに関する情報を取得することが可能です。
SSMS
また、SSMS
に内蔵されているSQL Serverレポート ‘Index Physical Statistics’ を使用して、次のフォーマットでデータベースのインデックス物理統計値を取得することができます。
このレポートはデータベース レベルで実行するように制限されており、インスタンスに複数のデータベースがあり、管理するインスタンスが多い場合、詳細を収集し、閾値ステータスに基づいて状態を分析し、SQLインデックスの再構築または再編成を決定することは時間とリソースのかかるタスクになります。
カスタム スクリプト
カスタム スクリプトも断片化の問題を検出および修正するために使用できますが、手動で結果を確立および分析するのは複雑なプロセスです。 これらの情報をすべて一元管理し、インデックスの保守方針を決定することが望まれます。 Alter Indexコマンドを使用すれば、断片化レベルを削除することができます。 小規模なデータベースでは、インデックスの再構築時にページ数をあまり気にしませんが、大規模なデータベースでは、これらも考慮する必要があります。
サードパーティ製ツール
ApexSQL Defrag を使用すると、既存の SQL インデックス断片化を簡単に監視、分析、削除できます。 グラフィカルなツールで、複数のインスタンスとデータベースを管理することができます。 このツールによって、以下のような利点が得られます。
ApexSQL Defragツールをインストールし、監視するインスタンスを設定すると、SQLインデックスフラグの状態を詳細に素早く表示することが可能です。
SQLインデックスの再構築や再編成は、必要でなければ避けるべきでしょう。 非常に大きなインデックスがある場合、分析に長い時間と多くのシステムリソースがかかることがあります。 ApexSQL Defragは、フラグメンテーションをチェックするオプションを提供します。 このスキャンモードでは、SQL Server は断片化に関する限られた情報を収集します。 これは、システムのパフォーマンスの問題を引き起こすことはありません。 ApexSQL Defrag
同様に、断片化レベルを高、中、低カテゴリに設定できます。
結果セットを分析したら、特定の SQL インデックスを右クリックして、複数のオプションを選択することができます。
- Analyze (fast)
- Analyze (Deep)
- ReorganizeRebuild
- Set fill factor
- Indexに対して何らかのジョブが実行されていれば中断、停止、キャンセルが可能です。 特定のインデックスでパフォーマンスの問題やブロックが発生した場合、そのジョブ自体をキャンセルできるので便利です
ApexSQL Defragでは、事前に定義されたテンプレートやカスタムパラメータからポリシーを作成できます。 テンプレートは、ほとんどのSQLインデックスデフラグの要件に適しています。
これらのテンプレートを使用して、オフラインまたはオンラインモードで、すべてのインデックスまたは閾値レベルに基づくインデックスのデフラグを決定することが可能です。 たとえば、30% 以上断片化したインデックスの上位 50% をオンラインで再構築する、または 10% 以上断片化した場合に再編成するポリシーを作成したいとします。
CPU、メモリ負荷、トランザクション ログ使用量、アクティブ トランザクションに関するリソース閾値を構成することもできます。 メンテナンス ウィザード ジョブやカスタム スクリプトを使用したインデックス メンテナンスでは、このレベルの制御を行うことはできません。 私は、一部のユーザーで、無駄のないデータベース使用期間が終了した後にメンテナンスを実行したくないという要件を見たことがあります。 メンテナンスを行っている場合、ジョブを手動で停止するか、特定の時間にインデックスメンテナンスジョブを停止するために別のSQLエージェントジョブを作成する必要があります。
ApexSQL Defragは、複数のジョブを設定および監視するオーバーヘッドを提供します。
上記のスクリーンショットでは、断片化レベル、インデックスサイズ、ページ数によって、SQLインデックスメンテナンス作業をさらにカスタマイズできることがわかります。 ロックされたオブジェクトの遅延時間は、特定の時間で定義することができます。 インデックスページ数が指定した数より小さい、または大きいインデックスを除外したい場合もあります。
変更を加えてテンプレートとして構成し、再使用することができます。 インデックスのメンテナンスを実行すると、[アクティビティ]タブで、メンテナンス前後のインデックスの断片化統計の優れた概要を得ることができます。 メンテナンス後、インデックスの断片化レベルが制御されているかどうかを知ることは不可欠です。 通常、断片化レベルを再度キャプチャする必要がありますが、この情報によりオーバーヘッドを節約できます。
レポートセクションでは、サーバー レベルでのレポート、全体レポートを見ることができます。
また、クラスタ化インデックスと非クラスタ化インデックスの上位10個を表示することもできます。 我々は、この有用な情報を取得し、同様にシステムリソースに目を保つことができます。
我々は、すべてのレポートをエクスポートし、エクスポートオプションを構成することができます。 我々はそれを探索しながら、限られた情報を抽出することがあります。 ApexSQL Defrag は、レポートに含めたいチャート、統計、SQL インデックス統計チャートなど、表示する情報を選択するオプションを提供します。
結論:
ApexSQL Defrag ツールにより DBA は SQL インデックス監視とメンテナンスを改善し管理タスクを容易に実行できるようになりました。 すべての情報は、カスタムビジュアル、ポリシー、およびさまざまな有益なレポートとともに、グラフィカルなツールで得られます。