実行速度の遅いクエリを分析するためのチェックリスト
クエリや更新の実行に予想よりも長時間かかる場合、さまざまな原因が考えられます。実行速度の遅いクエリは、SQL Server が実行されているネットワークまたはコンピュータに関連するパフォーマンスの問題が原因であることがあります。また、物理的なデータベース設計の問題が原因である場合もあります。
クエリや更新の実行速度が遅い場合に共通する原因は次のとおりです。
- 低速なネットワーク通信
- サーバー コンピュータのメモリ不足、または SQL Server で使用可能なメモリ不足
- インデックス付きの列に関する有用な統計情報の欠如
- インデックス付きの列に関する古い統計情報
- 有用なインデックスの欠如
- 有用なインデックス付きビューの欠如
- 有用なデータ ストライピングの欠如
- 有用なパーティションの欠如
実行速度の遅いクエリをトラブルシューティングするためのチェックリスト
クエリまたは更新に予想よりも長時間かかっている場合は、次の質問に回答して、前のセクションで挙げられた実行速度の遅いクエリの原因に対処してください。
ヒント : |
---|
時間を節約するため、購入元に問い合わせる前にこのチェックリストを確認してください。 |
- パフォーマンスの問題はクエリ以外のコンポーネントに関係していますか。たとえば、低速なネットワーク パフォーマンスが問題ですか。パフォーマンス低下の原因となっているか、低下に影響しているコンポーネントが他にありますか。
Windows システム モニタを使用して、SQL Server および SQL Server に関係ないコンポーネントのパフォーマンスを監視できます。詳細については、「リソースの利用状況の監視 (システム モニタ)」を参照してください。 - パフォーマンスの問題がクエリに関連する場合、どのクエリまたはクエリ セットが関係していますか。
まず、SQL Server Profiler を使用して、時間のかかるクエリを特定します。詳細については、「SQL Server Profiler の使用」を参照してください。
実行速度の遅いクエリが特定されたら、プラン表示を生成することによってさらにクエリのパフォーマンスを分析することができます。プラン表示は、クエリ オプティマイザが生成するクエリ実行プランのテキスト、XML、またはグラフィカル表示です。Transact-SQL SET オプション、SQL Server Management Studio、または SQL Server Profiler を使用してプラン表示を生成できます。
Transact-SQL SET オプションを使用してテキストおよび XML 実行プランを表示する方法の詳細については、「プラン表示 SET オプションを使用した実行プランの表示 (Transact-SQL)」を参照してください。
SQL Server Management Studio を使用してグラフィカル実行プランを表示する方法の詳細については、「グラフィカル実行プランの表示 (SQL Server Management Studio)」を参照してください。
SQL Server Profiler を使用してテキストおよび XML 実行プランを表示する方法の詳細については、「SQL Server Profiler のイベント クラスを使用した実行プランの表示」を参照してください。
これらのツールで収集した情報から、SQL Server クエリ オプティマイザによってクエリがどのように実行され、どのインデックスが使用されているかを判別できます。また、クエリの書き直しやテーブルのインデックスの変更、さらにデータベース設計の変更によってパフォーマンスが向上するかどうかもわかります。詳細については、「クエリの分析」を参照してください。 - クエリは有用な統計情報を使用して最適化されていましたか。
列の値の分布に関する統計情報は、インデックス付きの列については SQL Server により自動的に作成されます。また、インデックスなしの列についても、SQL Server Management Studio または CREATE STATISTICS ステートメントを使用して手動で作成できます。AUTO_CREATE_STATISTICS データベース オプションが TRUE に設定されている場合は、自動的に作成することもできます。これらの統計情報をクエリ プロセッサで使用し、クエリの評価に最適なストラテジを決定できます。結合演算にかかわるインデックス未設定の列の追加統計情報を保持していると、クエリ パフォーマンスを向上させることができます。詳細については、「インデックス統計」を参照してください。
SQL Server Profiler または SQL Server Management Studio のグラフィカル実行プランを使用してクエリを監視し、クエリの統計情報が不足していないかどうかを判断します。詳細については、「Errors and Warnings イベント カテゴリ (データベース エンジン)」を参照してください。 - クエリ統計情報は最新のものですか。統計情報は自動的に更新されていますか。
クエリ統計情報の自動更新が無効になっていない場合、SQL Server では、インデックス付き列のクエリ統計情報を自動的に作成し、更新します。また、インデックスなしの列についても、SQL Server Management Studio または UPDATE STATISTICS ステートメントを使用して手動で更新できます。AUTO_UPDATE_STATISTICS データベース オプションが TRUE に設定されている場合は、自動的に更新することもできます。最新の統計情報は日時データには依存しません。UPDATE 操作が行われていない場合でも、クエリ統計情報は最新になります。
統計情報の自動更新が設定されていない場合、自動更新に設定してください。詳細については、「インデックス統計」を参照してください。 - 適切なインデックスが利用可能ですか。1 つ以上のインデックスの追加によって、クエリのパフォーマンスが向上するのではないでしょうか。詳細については、「インデックスの設計の全般的なガイドライン」、「欠落したインデックスの検索」、および「データベース エンジン チューニング アドバイザのリファレンス」を参照してください。データベース エンジン チューニング アドバイザでも、必要な統計情報の作成が推奨されます。
- データまたはインデックスがアクセスされる状態になっていますか。ディスク ストライピングを検討してください。ディスク ストライピングは、RAID (redundant array of independent disks) のレベル 0 を使用して実装できます。このレベルでは、複数のディスク ドライブにわたってデータが分散されます。詳細については、「ファイルとファイル グループの使用」および「RAID」を参照してください。
- クエリ オプティマイザは複雑なクエリを最適化する方法を示していますか。詳細については、「クエリ チューニングに関する推奨設定」を参照してください。
- 大量のデータがある場合は、分割する必要がありますか。データ管理の容易性が分割の主な利点ですが、テーブルやインデックスが同様に分割されている場合、分割によってクエリのパフォーマンスが向上することもあります。詳細については、「パーティション分割について」および「物理データベース デザインのチューニング」を参照してください。
参照
概念
プラン表示 SET オプションを使用した実行プランの表示 (Transact-SQL)
SQL Server Profiler のイベント クラスを使用した実行プランの表示
プラン表示のセキュリティ
Showplan を生成する Transact-SQL ステートメント