sql >> データベース >  >> RDS >> Sqlserver

SQLServer用のインデックスマネージャーを使用したSQLServerインデックス管理

    SQLServerインデックスの概要

    SQL Serverのパフォーマンスの調整とクエリの拡張について話すとき、最初に考慮すべきことはSQLServerのインデックスです。要求された行への迅速なアクセスを提供することにより、基になるテーブルからのデータの読み取りを高速化するのに役立ちます。したがって、すべてのテーブルのレコードをスキャンする必要はありません。

    SQL Serverインデックスは、インデックスのBツリー構造により、これらの高速検索機能を提供します。この構造により、インデックスキーに基づいてテーブルの行をすばやく移動し、要求されたレコードを一度に取得できます。テーブル全体を読み取る必要はありません。

    SQLServerインデックスのタイプ

    主なタイプの中で、クラスター化インデックスと非クラスター化インデックスに注目します。

    クラスター化されたインデックス クラスタ化されたインデックスキー値に従って、データページ内の実際のデータを並べ替えます。インデックスの「リーフ」レベルでデータを保存し、各テーブルに1つのクラスター化されたインデックスのみを作成できるようにします。主キー制約がヒープテーブルに表示されると、クラスター化インデックスが自動的に作成されます。

    非クラスター化インデックス インデックスキー値と、メインテーブルの残りの行列へのポインタが含まれます。これはインデックスの「リーフ」レベルであり、各テーブルに最大999個の非クラスター化インデックスを作成できます。

    テーブルにクラスター化インデックスが作成されていない場合、そのテーブルは「ヒープテーブル」と呼ばれます。このようなテーブルには、ページ内のデータの順序とページの並べ替えとリンクを指定する基準がありません。

    そのテーブルにクラスター化インデックスが作成されると、ソートされたテーブルはクラスター化テーブルと呼ばれます。

    SQLServerによって提供される他の種類のインデックスもあります。

    • 一意のインデックスは、列の値の一意性を強制します。
    • カバーインデックスには、クエリによって要求されたすべての列が含まれます。
    • 複合インデックスには、インデックスキーに複数の列が含まれています。
    • その他の特定のインデックスタイプは、XML、Spatial、およびColumnstoreインデックスです。

    SQL Serverインデックスの利点は、クエリのパフォーマンスが向上することです。ただし、インデックスのみが正しい場合は機能します。設計を誤ると、クエリのパフォーマンスに悪影響を及ぼし、SQLServerリソースを消費して不要なインデックスを保存および維持します。

    すべての問題を解決する最適なインデックスを選択するのは簡単な作業ではありません。新しいインデックスを追加すると、データ取得プロセスは高速化されますが、データ変更プロセスは遅くなります。基になるテーブルgetыに対して実行された変更は、データの一貫性を維持するために、関連するすべてのインデックスに直接反映されます。

    そのため、本番環境で作成する前に、新しいインデックスの影響を調査してテストする必要があります。また、本番環境にデプロイした後、その影響と使用状況を監視する必要があります。

    新しいSQLServerインデックスを設計する際に考慮すべき要素

    最初の要素は、データベースワークロードタイプです。 。多数の書き込み操作を伴うOLTPワークロードを処理するとします。必要なインデックスの数は最小限に抑えられます。もう1つのケースは、多くの読み取り操作を伴うOLAPワークロードです。データの取得を高速化するために、可能な限り多くのインデックスが必要になります。

    また、テーブルサイズを確認する必要があります 。 SQL Server Engineは、その小さなテーブルからデータを取得するための最適なインデックスを選択するために時間とリソースを浪費するのではなく、基になるテーブルを直接スキャンすることを好みます。

    そのテーブルにインデックスを作成することを決定したら、クエリを提供するインデックスタイプを特定する必要があります。 。そこで、インデックスキーに追加する列を指定します。ベースは、クエリ述語と結合条件の列データ型と位置です。

    これらの要素は、正しい順序で最高のデータ取得パフォーマンスを保証し、インデックスを可能な限り短くシンプルに保つ必要があります。

    新しいインデックスを設計するときに考慮すべきもう1つの要素は、インデックスストレージです。 。別のファイルグループとディスクドライブに非クラスター化インデックスを作成することをお勧めします。このようにして、インデックスデータページで実行されるI/O操作をデータベースデータファイルから分離します。

    インデックスの設定を検討してください フィルファクター 、データで満たされた各リーフレベルページのスペースのパーセンテージを決定します(値はデフォルトの0または100パーセントとは異なります)。目標は、新しく挿入または更新されたレコード用に、各インデックスデータページにスペースを残すことです。また、インデックスの断片化の問題につながる可能性のあるページ分割の発生を最小限に抑えます。

    インデックス管理

    SQL Serverインデックスを使用してクエリのパフォーマンスを向上させるデータベース管理者の役割は、インデックスの作成に限定されません。インデックスの使用状況を積極的に監視して、その品質を特定する必要があります。さらに、断片化の問題を修正するために、インデックスを定期的に維持する必要があります。

    堅牢なレポート機能を備えたSQLServerManagement Studioは、データベース管理者に最も有用な統計データを提供します。これらの組み込みレポートの1つは、インデックス使用統計です。 :

    インデックス使用統計レポートは、データベースインデックスがどのように使用されるかを次の形式で説明します。

    • シーク :特定の行を見つけるためにSQLエンジンによってインデックスが使用される回数。
    • スキャン :インデックスリーフページがSQLエンジンによってスキャンされた回数。
    • ルックアップ :非クラスター化インデックスが非クラスター化インデックスとしてリストされていない残りの列を取得するためにクラスター化インデックスとして使用された回数。
    • 更新 :インデックスデータが変更された回数。

    インデックス作成の主な目的は、以下に示すように、インデックスシーク操作を実行することであることに注意してください。

    以前のレポートは、SQLServerがこれらのインデックスを利用してデータ取得プロセスを高速化するかどうかを指定するのに非常に役立ちます。特定のインデックスが期待どおりに機能しないことが判明した場合は、それを削除して、より適切なインデックスに置き換えます。

    SSMSによって提供される2番目のレポートは、インデックス物理統計です。 。各インデックスパーティションのページ数とともに、各インデックスパーティションごとのインデックスの断片化率に関する統計情報を返します。

    また、以下に示すように、断片化の割合に応じて、インデックスを再構築または再編成することにより、インデックスの断片化の問題を修正する方法をお勧めします。

    レポートによって提供される推奨事項を適用するには、インデックスごとにindexdefragmentationコマンドを実行できます。または、SSMSを使用して保守計画を作成し、インデックスを最適な方法で保守することもできます。

    dbForgeインデックスマネージャー

    dbForge Index ManagerはSSMSアドインであり、SQLServerインデックスの断片化の問題を検出して修正するのに役立ちます。

    また、一元化されたツールであり、データベース全体のインデックスの断片化の割合を検出する機能を提供します。これらの問題は、インデックスの再構築を実行することで修正できます。もう1つの方法は、そのインデックスの断片化の重大度に基づいて、操作を再編成することです。他のオプションの中には、インデックス関連のコマンドを実行するためのT-SQLスクリプトの生成、後で参照するためのインデックス分析結果のエクスポート、およびコマンドラインインターフェイスを使用したインデックスメンテナンスタスクの自動化があります。

    dbForge Index Managerは、Devartダウンロードページから入手できます。簡単なインストールウィザードを使用して、マシンにインストールできます。インストールが正常に完了すると、このアドインを使用できるようになります。

    SSMS内で使用するには、データベースを右クリックして、インデックスの断片化の管理を選択します。 インデックスマネージャーリストから:

    [インデックスマネージャ]ウィンドウから、関心のあるデータベース名をフィルタリングできます。

    再分析をクリックします 選択したデータベースのインデックスフラグメンテーションチェックを実行します。このプロセス中に選択したデータベースで作成されたすべてのインデックスのインデックス断片化統計が自動的に表示されます。

    Index Managerツールは、断片化の割合に基づいて、インデックスの断片化の問題を修正するためのアクションも推奨します。

    前のウィンドウの[必要なアクション]セクションでインデックスを確認すると、アクションリストをCSVレポートとしてエクスポートできます。問題のあるインデックスをそのページから直接再編成または再構築するか、後で実行するスクリプトを生成することで、提案された修正を実行できます。

    このシナリオでのインデックスの断片化の修正は次のようになります。

    前のスクリプトを実行するか、修正をクリックした場合 オプションをクリックしてから、再分析 その結果、断片化の問題が直接修正されていることがわかります。

    このように、dbForge Index Managerを利用して、インデックスの断片化の問題を分析および特定し、同じ場所から直接報告または修正します。

    便利なツール

    dbForge Index Managerは、スマートなインデックス修正とインデックスの断片化をSSMSにもたらします。このツールを使用すると、インデックスの断片化統計をすばやく収集し、メンテナンスが必要なデータベースを検出できます。ビジュアルモードでSQLServerインデックスを即座に再構築および再編成したり、将来使用するためのSQLスクリプトを生成したりできます。 dbForge Index Manager for SQL Serverは、多くの労力をかけなくてもパフォーマンスを大幅に向上させます。


    1. 条件付きでカーソルを定義する

    2. テキストファイルからmysqlデータベースにデータをインポートする方法

    3. Ruby on Rails3OSXのソケット'/tmp/mysql.sock'を介してローカルMySQLサーバーに接続できません

    4. DBCC_OBJECT_METADATAラッチ