スケーラビリティとパフォーマンスに関する機能強化 (データベース エンジン)

データベース エンジンのスケーラビリティおよびパフォーマンスの強化には、フィルタ選択されたインデックスと統計情報、新しいテーブルとクエリ ヒント、新しいクエリ パフォーマンスおよびクエリ処理機能が含まれています。

フィルタ選択されたインデックスと統計情報

SQL Server 2008 では述語を使用して、フィルタ選択されたインデックスと統計情報をテーブル内の行のサブセットに作成できます。以前のバージョンの SQL Server では、インデックスと統計情報はテーブル内のすべての行に作成されました。フィルタ選択されたインデックスと統計情報は、ほとんどが NULL 値の列、異種カテゴリの値を含む列、異なる範囲の値を含む列などの、適切に定義されたデータのサブセットから選択するクエリに特に適しています。

フィルタ選択されたインデックスを適切にデザインすると、クエリのパフォーマンスが向上し、インデックスのメンテナンス コストを削減して、テーブル全体のインデックスと比較してインデックスのストレージ コストを削減することができます。詳細については、「フィルタ選択されたインデックスのデザイン ガイドライン」を参照してください。フィルタ選択された統計情報は、フィルタ選択されたインデックスの行のみを処理するので、クエリ プランの品質が向上します。データベース エンジンでは、フィルタ選択されたインデックスについて、フィルタ選択された統計情報が自動的に作成および管理されます。インデックス付けされていない列で、フィルタ選択された統計情報を作成し、フィルタ選択されたインデックスを必要としないデータのサブセットのクエリ プラン品質を向上させることもできます。詳細については、「クエリのパフォーマンスを向上させるための統計の使用」を参照してください。

テーブル ヒントとクエリ ヒント

UNKNOWN 変数値を含む OPTIMIZE FOR クエリ ヒント オプション

OPTIMIZE FOR クエリ ヒント オプションは、UNKNOWN 構文によって強化されています。この構文は、データベース エンジンで統計データを使用して、クエリの最適化中に初期値の代わりに 1 つ以上のローカル変数の値を判断するように指定します。この構文は、クエリ内のすべてのローカル変数に対して指定することも、1 つ以上の名前付きローカル変数に対して指定することもできます。詳細については、「クエリ ヒント (Transact-SQL)」を参照してください。

クエリ ヒント

テーブル ヒントをクエリ ヒントとして指定することで、高度なクエリ パフォーマンス チューニング オプションを提供できるようになりました。プラン ガイドのコンテキスト内でのみ、テーブル ヒントをクエリ ヒントとして使用することをお勧めします。詳細については、「クエリ ヒント (Transact-SQL)」および「プラン ガイドでの INDEX および FORCESEEK のクエリ ヒントの使用」を参照してください。

テーブル ヒント

高度なクエリ パフォーマンス チューニング オプションを提供するために、FORCESEEK テーブル ヒントが追加されています。このヒントは、クエリ オプティマイザに対し、クエリで参照されているテーブルやビューのデータへのアクセス パスとしてインデックスのシーク操作のみを使用することを指定します。詳細については、「FORCESEEK テーブル ヒントの使用」を参照してください。

クエリのパフォーマンスと処理

ロック エスカレーション オプション

ALTER TABLE の新しい LOCK_ESCALATION オプションを使用すると、テーブルのロック エスカレーションを無効にすることができます。パーティション テーブルでは、テーブル全体ではなく、パーティションにエスカレートするようにロックを構成できます。このオプションにより、パーティション テーブル使用時のロック競合を減らすことで、同時実行を向上させることができます。詳細については、「ALTER TABLE (Transact-SQL)」を参照してください。

最適化されたビットマップ フィルタ

クエリ オプティマイザでは、ビットマップ フィルタを並列クエリ プランに動的に配置して、スター スキーマに対するクエリのパフォーマンスを向上させることができます。最適化されたビットマップ フィルタでは、条件に該当しない行をクエリ プランの初期段階でファクト テーブルから排除できるため、これらのデータ ウェアハウス クエリのパフォーマンスを飛躍的に向上させることができます。詳細については、「ビットマップ フィルタを使ったデータ ウェアハウスのクエリ パフォーマンスの最適化」を参照してください。

パーティション分割されたオブジェクトの並列クエリ処理

SQL Server 2008 では、多くの並列プランでのパーティション テーブルに対するクエリ処理のパフォーマンスが向上しています。また、並列プランと直列プランを表す方法が変更され、コンパイル時と実行時の両方の実行プランで示されるパーティション分割情報が強化されています。SQL Server 2008 は、パーティション分割されたオブジェクトの並列クエリ実行プランに対するスレッドの割り当て方法を自動化し、処理能力を高めています。詳細については、「パーティション テーブルとパーティション インデックスに対するクエリ処理の機能強化」を参照してください。

プラン ガイド

sp_create_plan_guide ストアド プロシージャは、XML プラン表示出力を USE PLAN ヒントに埋め込む代わりに、出力を @hints パラメータで直接受け入れるように拡張されています。これにより、プラン ガイドのヒントとして固定クエリ プランを適用するプロセスが簡略化されます。さらに、新しいストアド プロシージャ sp_create_plan_guide_from_handle を使用すると、1 つ以上のプラン ガイドをプラン キャッシュ内のクエリ プランから作成できます。

同一のクエリとバッチまたはモジュールに対し、複数の OBJECT または SQL プラン ガイドを作成できます。ただし、有効にできるプラン ガイドは常に 1 つだけです。

プラン ガイドを検証するために、新しいシステム関数 sys.fn_validate_plan_guide を使用できます。プラン ガイドは、インデックスを削除するなど、データベースの物理デザインが変更されると無効になる場合があります。プラン ガイドを検証することで、プラン ガイドを変更せずにクエリ オプティマイザで使用できるかどうかを確認できます。

新しいイベント クラスである Plan Guide Successful および Plan Guide Unsuccessful を使用すると、プラン ガイドがクエリ オプティマイザによって使用されていることを簡単に確認できます。プラン ガイドを含むクエリの実行プランを SQL Server で作成できない場合、クエリはプラン ガイドを使用せずに自動的にコンパイルされます。Plan Guide Unsuccessful イベントは、初期のプラン ガイドのコンパイルに失敗した場合に発生します。

SQL Server: SQL Statistics オブジェクトの新しいカウンタである Guided Plan Executions/sec および Misguided Plan Executions/sec を使用すると、プラン ガイドを使用したクエリ プランの生成の成功と失敗の回数を監視できます。

プラン ガイドの作成、削除、有効化、無効化、スクリプトの作成などの操作は、SQL Server Management Studio を使用して実行できます。プラン ガイドは、オブジェクト エクスプローラの [プログラミング] フォルダに表示されます。

類似のクエリの発見とチューニングのためのハッシュ値

リソースを大量に使用するクエリを検索する場合は、個別に消費するシステム リソースは少ないものの全体では大量のシステム リソースを消費する類似のクエリを、どのように発見してチューニングするかを検討する必要があります。sys.dm_exec_query_stats カタログ ビューおよび sys.dm_exec_requests カタログ ビューは、類似のクエリおよび類似のクエリ実行プランの全体的なリソース使用率を調べるのに役立つクエリ ハッシュ値およびクエリ プラン ハッシュ値を提供します。詳細については、「クエリおよびクエリ プラン ハッシュを使用した類似クエリの検索およびチューニング」を参照してください。