「実行プラン」を理解すると、パフォーマンス問題の解決能力が一気に向上する:SQL Serverトラブルシューティング(41)(1/2 ページ)
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「実行プランの重要性」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
前回は、SQL Serverの実行プランを作成するのに必要となる「統計情報」の基礎を解説しました。今回は、その「実行プラン」の運用方法を解説します。
「実行プラン」の重要性を理解する
「統計情報」が実際に利用されるのは、「実行プラン」の生成時です。
実行プランとは、SQL Serverが内部で利用するクエリの実行計画書のことです。SQL Serverは実行プランに従って、内部でデータ抽出、ソート、結合、フィルタリングなどの処理を行います。つまり、「動作のキモ」です。この実行プランを正しく理解し、正しく運用することで、パフォーマンス問題の解決能力が「一気に向上する」と言えます。
SQL Serverが「クエリを受け取り、実際に実行するまで」の流れは以下の通りです(図1)。
SQL Serverは、発行されたクエリを最終的に「実行プランに変換」します。その処理をコンパイルと呼びます。プログラムにおけるコンパイルと同じように、そのままではただのテキストデータを、実行エンジンであるSQL Serverが受け取れる形に変更する処理を行う行程となります。
クエリの実行に当たり、まずは「プロシージャキャッシュ」を確認します。プロシージャキャッシュは作成された実行プランを格納しておく、メモリ上の領域のことです。キャッシュに使い回せる実行プランが既に存在するならば、コンパイル処理を飛ばしてクエリを実行できます。
一方、プロシージャキャッシュに該当する実行プランがなかった場合は、コンパイル処理を行って実行プランを新たに作成します。コンパイルは「文法解析」「定義解析」「最適化」の3つのフェーズがあります。
文法解析では「T-SQLとして文法が正しいか」を、定義解析では「指定されたテーブルが存在するか、列が存在するかといった情報の整合性」を確認します。その後、統計情報を基にして最適化します。
この最適化処理では、データの読み出し方や結合、ソートの有無など、さまざまな処理の組み合わせの中からよいものが選ばれます。ここでのポイントは、「限られた時間の中で見つかった実行プランから、最もコストの少ないものを選ぶ」という条件があることです。時間を無限に使ってよいならば、莫大な数の実行プラン候補の中から絞り込んで、例えば「1秒以内で実行が終わる、最もよいもの」がみつかるかもしれません。しかし、それを探すのに1時間もかかってしまうのでは、意味がありません。作成された実行プランは「最も速いものである“とは限らない”」。ここを理解しておくことが、パフォーマンス問題を改善につなげるポイントになるでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「SQL Server 2016」に搭載される新たなセキュリティ対策を追う
パブリックプレビューが公開されているマイクロソフトのRDB次期版「SQL Server 2016」。特徴の1つとするセキュリティ対策機能のポイントと目指すところをキーパーソンに聞いた。 - そもそも、リレーショナルデータベースとは何か?
データベースを基礎から勉強し理解を深めていくことは簡単なことではありません。本連載では、データベースに対するハードルを少しでも低くするために、初心者の方に必要なデータベースの基本から、障害対策やチューニングといった実践に即した内容までを幅広く解説していきます。今回は、データベースの役割と、それを管理するソフトウェアであるDBMSの基本機能について解説します。【更新】 - データの登録を行うINSERT文
- 複数の条件を指定してSELECT文を実行する
前回は、SELECT文の初歩の初歩を解説しました。今回は、複数の条件を指定して、目的のデータを取り出す方法を解説します(編集部) - Oracle運用の基本「ログ」を理解しよう
本連載では、Oracle Database運用の鍵となるトラブル対処法について紹介していきます。第1回、第2回では情報収集の要となるログについて見ていきます。ログの出力情報は10gと11gとでは大きく異なる点がありますので、それぞれについても確認しておきましょう。