SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

翔泳社の本:『絵で見てわかるSQL Serverの仕組み』

リレーショナルエンジンの構成とクエリのライフサイクル

抄録:『絵で見てわかるSQL Serverの仕組み』

 前回は、書籍『絵で見てわかるSQL Serverの仕組み』(翔泳社、平山 理 著)の第4章から、データベース構造の原理やデータファイルについて確認しました。今回は第8章から、SQL Serverがクエリを受け取り、データにアクセスするまでの内部動作。特に、リレーショナルエンジンとクエリプロセッサについて紹介している部分をみていきましょう。

 この章では、SQL Serverがクライアントからのクエリを受け取ってから、データにアクセスするまでの内部的なステップを紹介します。クエリが実行されるまでの一連の処理の流れや、その過程で決定されるデータアクセス方法は、クエリ実行時のパフォーマンスに大きな影響を与えます。そのため、数多く存在するSQL Serverのコンポーネントの中でも特に重要な部分だと言えます。この処理を行うコンポーネント群を総称して、リレーショナルエンジンもしくはクエリプロセッサと呼んでいます。リレーショナルエンジンの動作を理解することによって、パフォーマンス関連のトラブルシューティングを行う際に、様々な事象の中から重要な問題点を絞り込むことが可能になります。

8.1 リレーショナルエンジンの構成

 リレーショナルエンジンは、大きく分けて次の3つのコンポーネントで構成されています。それぞれのコンポーネントは、さらに数多くのサブコンポーネントによって構成されています(図8.1)。

図8.1 リレーショナルエンジン
図8.1 リレーショナルエンジン
[画像クリックで拡大]

8.2 クエリのライフサイクル

 クライアントから受け取ったクエリの処理要求は、リレーショナルエンジン内で図8.2のようなステップを経て実行されます。

図8.2 クエリのライフサイクル
図8.2 クエリのライフサイクル
[画像クリックで拡大]

①プランキャッシュの確認

 プランキャッシュ(あるいはプロシージャキャッシュ)には、これまでに実行されたクエリの実行プランが一定期間格納されています。また、格納されたクエリ実行プランは、クエリ実行プラン生成のもととなった実際のクエリテキスト(SELECTステートメントなど)も保持しています。

 もしも、クライアントから受け取ったクエリが、すでにプランキャッシュに存在するクエリと合致する場合は、多大なコストを必要とする最適化などの処理を省くことができます。そのため、クライアントからクエリを受け取ったら、まずプランキャッシュに合致するものが存在するかを、クエリテキストの比較によって確認します。

②解析(Parsing)

 クライアントから受け取ったクエリの解析を行います。クエリの解析とは、クエリの構成要素を入力データソースとしてのテーブルや、入力データのフィルタリングとしてのWHERE句、データの処理に影響を与えるORDER BYオペレータ[※1]などにいったん分類し、それらをツリー構造に再構成することを意味します。再構成されたツリーはクエリツリー(またはリレーショナルオペレータツリー)と呼ばれ、その後のステップでクエリの最適化が行われる際に使用されます(図8.3)。

図8.3 クエリツリー
図8.3 クエリツリー
[画像クリックで拡大]

※1 結果セットを任意の列で並べ替える際に使用するオペレータです。

③クエリのパラメータ化

 将来的にクエリが再実行されることに備えて、プランキャッシュに格納するための準備を行います。具体的には、クライアントから受け取ったクエリテキストをパラメータ化クエリに変換します(図8.4)。

図8.4 パラメータ化クエリへの変換
図8.4 パラメータ化クエリへの変換
[画像クリックで拡大]

④バインド

 クエリで操作されるテーブルなどの列と、クライアントへ返される結果セットのバインド(関連付け)が行われます。

⑤最適化

 クエリの解析結果として受け渡されたクエリツリーをもとに、クエリオプティマイザによってクエリ実行プランが生成されます。クエリオプティマイザの動作は、パフォーマンスチューニングの際にとても重要な意味を持つため、次節で詳細を説明します。

⑥クエリ実行プラン生成(もしくは再利用)

 クエリ実行プランがプランキャッシュに存在する場合は、再利用が行われます。存在しない場合は、クエリオプティマイザによって生成されたコンパイル済みプランをもとに実行可能プランが生成されます。

⑦リソース確保

 クエリ実行プランに基づいて、クエリを処理するために必要なリソースを確保します。たとえば、結果セットの並べ替えが必要な場合は、並べ替え用のメモリの獲得を要求します。あるいは、並列で処理されるべきクエリには、並列処理に必要な内部スレッドの獲得要求を行います。

⑧実行

 クエリ実行プランに基づいたリソースの確保が完了すると、クエリの実行が開始されます。

⑨クエリ実行プランの登録

 クエリ実行プランがプランキャッシュに存在しない場合は登録します。

次のページ
8.3 クエリオプティマイザ

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
関連リンク
翔泳社の本:『絵で見てわかるSQL Serverの仕組み』連載記事一覧

もっと読む

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/14146 2021/03/30 08:00

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング