(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6096197
(24)【登録日】2017年2月24日
(45)【発行日】2017年3月15日
(54)【発明の名称】分散データ管理システムにおけるクエリ説明計画
(51)【国際特許分類】
G06F 17/30 20060101AFI20170306BHJP
【FI】
G06F17/30 340D
G06F17/30 110C
【請求項の数】12
【全頁数】13
(21)【出願番号】特願2014-530739(P2014-530739)
(86)(22)【出願日】2012年9月11日
(65)【公表番号】特表2014-530416(P2014-530416A)
(43)【公表日】2014年11月17日
(86)【国際出願番号】US2012054680
(87)【国際公開番号】WO2013039921
(87)【国際公開日】20130321
【審査請求日】2015年6月22日
(31)【優先権主張番号】61/535,227
(32)【優先日】2011年9月15日
(33)【優先権主張国】US
(31)【優先権主張番号】13/420,324
(32)【優先日】2012年3月14日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】ビアバウアー,トム
(72)【発明者】
【氏名】リー,ロバート・エイチ
【審査官】
齊藤 貴孝
(56)【参考文献】
【文献】
米国特許出願公開第2003/0093410(US,A1)
【文献】
特開2001−147846(JP,A)
【文献】
特開2001−331485(JP,A)
【文献】
特開平06−195248(JP,A)
【文献】
特開平03−108036(JP,A)
【文献】
特開2007−172516(JP,A)
【文献】
特開2003−316811(JP,A)
【文献】
国際公開第2010/098034(WO,A1)
【文献】
特開2010−176319(JP,A)
【文献】
特開2007−193381(JP,A)
【文献】
特表2009−522660(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/30
(57)【特許請求の範囲】
【請求項1】
分散データグリッドにおいてクエリを説明するためのシステムであって、前記システムは、
1つ以上のマイクロプロセッサと、
前記1つ以上のマイクロプロセッサ上で走るクラスタとを含み、前記クラスタは、前記クラスタ中に分散されたデータを格納する複数のノードを含み、各ノードは、前記ノード上に格納された前記データに対して構造化クエリ言語(SQL)クエリを実行可能であり、前記システムはさらに、
前記SQLクエリを含む要求を提出する、前記クラスタに接続されたクライアントを含み、
前記要求を受信すると、前記SQLクエリは前記クラスタ内の各ノードに提出され、前記クラスタ内の各ノードは、前記各ノードでのローカルデータを用いて前記SQLクエリについてのクエリ計画を評価し、前記各ノードに特有の最適なクエリ計画を判断し、前記各ノードで前記SQLクエリがどのように実行されるかに関する1組の情報を返送し、
前記クラスタ内のすべてのノードからの前記情報を集約するクエリ記録オブジェクトが作成され、前記クエリ記録オブジェクトは、前記クラスタ内の各ノードによって前記SQLクエリがどのように実行されるかに関する情報を含む、システム。
【請求項2】
分散データグリッドにおいてクエリを説明するための方法であって、
1つ以上のマイクロプロセッサ上で走るクラスタ内の複数のノードの各々は、前記ノード上に格納されたデータに対して構造化クエリ言語(SQL)クエリを実行可能であり、
前記方法は、
前記クラスタが、前記クラスタに接続されたクライアントから、前記SQLクエリを含む要求を受信するステップと、
前記クラスタが、前記SQLクエリを前記クラスタ内の各ノードに提出するステップと、
前記クラスタ内の各ノードが、前記各ノードでのローカルデータを用いて前記SQLクエリについてのクエリ計画を評価し、前記各ノードに特有の最適なクエリ計画を判断し、前記各ノードで前記SQLクエリがどのように実行されるかに関する1組の情報を返送するステップと、
前記クラスタが、前記クラスタ内のすべてのノードからの前記情報を集約するクエリ記録オブジェクトを作成するステップとを含み、前記クエリ記録オブジェクトは、前記クラスタ内の各ノードによって前記SQLクエリがどのように実行されるかに関する情報を含む、方法。
【請求項3】
前記クエリ記録オブジェクトはさらに実行追跡を提供し、各ステップの実行時間および総実行時間についての情報をレンダリングする、請求項2に記載の方法。
【請求項4】
前記要求はクエリ説明計画についてのものであり、前記クエリ説明計画を得るために、メソッドが呼出され、SQLクエリをパラメータとして前記メソッドに渡す、請求項2または3に記載の方法。
【請求項5】
クエリ呼出しの結果が、異なるクエリ計画同士を比較対照することにより調整される、請求項2〜4のいずれかに記載の方法。
【請求項6】
前記方法は、説明計画モードおよび追跡モードという少なくとも2つのモードで実行可能であり、前記説明計画モードは、クエリ実行の推定コストを含むクエリ記録オブジェクトを作成し、前記追跡モードは、クエリ実行の実際のコストを含む、請求項2〜5のいずれかに記載の方法。
【請求項7】
前記クエリ記録オブジェクトを採用することによってインデックスが作成される、請求項2〜6のいずれかに記載の方法。
【請求項8】
前記クラスタ内の各ノードは、前記ノード上に格納されたデータ区画に依存して、異なるクエリ計画を実行する、請求項2〜7のいずれかに記載の方法。
【請求項9】
コンピュータシステムによる実行用のプログラム命令を含み、それにより前記コンピュータシステムに請求項2〜8のいずれかに記載の方法を行なわせる、コンピュータプログラム。
【請求項10】
分散データグリッドにおいてクエリを説明するためのシステムであって、前記システムは、
1つ以上のマイクロプロセッサ上で走るクラスタ内の複数のノード上にデータを格納するための手段を含み、各ノードは、前記ノード上に格納された前記データに対して構造化クエリ言語(SQL)クエリを実行可能であり、前記システムはさらに、
前記クラスタに接続されたクライアントから、前記SQLクエリを含む要求を受信するための手段と、
前記SQLクエリを前記クラスタ内の各ノードに提出するための手段とを含み、前記クラスタ内の各ノードは、前記各ノードでのローカルデータを用いて前記SQLクエリについてのクエリ計画を評価し、前記各ノードに特有の最適なクエリ計画を判断し、前記各ノードで前記SQLクエリがどのように実行されるかに関する1組の情報を返送し、前記システムはさらに、
前記クラスタ内のすべてのノードからの前記情報を集約するクエリ記録オブジェクトを作成するための手段を含み、前記クエリ記録オブジェクトは、前記クラスタ内の各ノードによって前記SQLクエリがどのように実行されるかに関する情報を含む、システム。
【請求項11】
分散データグリッドにおいてクエリを説明するためのシステムであって、前記システムは、
1つ以上のマイクロプロセッサと、
前記1つ以上のマイクロプロセッサ上で走るクラスタとを含み、前記クラスタは、前記クラスタ中に分散されたデータを格納する複数のノードを含み、各ノードは、前記ノード上に格納された前記データに対して構造化クエリ言語(SQL)クエリを実行可能であり、
クライアントから、クエリ説明計画についての前記SQLクエリを含む要求を受信すると、前記SQLクエリは前記クラスタ内の各ノードに提出され、前記クラスタ内の各ノードは、前記各ノードでのローカルデータを用いて前記SQLクエリについてのクエリ計画を評価し、前記各ノードに特有の最適なクエリ計画を判断し、前記各ノードで前記SQLクエリがどのように実行されるかに関する1組の情報を返送し、
前記クラスタ内のすべてのノードからの前記情報を集約するクエリ記録オブジェクトが作成され、前記クエリ記録オブジェクトは、前記クラスタ内の各ノードによって前記SQLクエリがどのように実行されるかに関する情報を含む、システム。
【請求項12】
第1のノードに特有の前記SQLクエリのための第1の最適なクエリ計画は、第1のシーケンスにおける前記SQLクエリの1以上のフィルタを適用し、
第2のノードに特有の前記SQLクエリのための第2の最適なクエリ計画は、第2のシーケンスにおける前記SQLクエリの前記1以上のフィルタを適用し、
前記第1のシーケンスは、前記第2のシーケンスとは異なる、請求項1、請求項10および11のいずれかに記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
著作権表示
この特許文献の開示の一部は、著作権保護の対象となる資料を含む。この特許文献または特許開示は特許商標庁の特許ファイルまたは記録に記載されているため、著作権者は、何人によるその複製に対して異議はないが、その他の場合には如何なるときもすべての著作権を保有する。
【0002】
発明の分野
この発明は、分散コンピューティング環境におけるデータキャッシュおよびアクセス手法に関する。
【背景技術】
【0003】
背景
データ記憶および管理の状況では、クエリ最適化は、所与のクエリを実行するために最も最適なまたは効率的なやり方を判断しようとする。構造化クエリ言語(SQL)は宣言型であるため、通常、所与のクエリを実行する複数の異なるやり方(クエリ計画)があり、それらのやり方の各々は異なる性能をもたらすものの、同じ結果に到達する。クエリ計画とは、SQLベースのデータシステムにおいて情報にアクセスするために、または情報を修正するために使用される、順序付けられた一連のステップである。典型的なクエリオプティマイザーは、所与のクエリについてすべての可能なクエリ計画を検討し、それらのクエリ計画のうちのどれが最も効率的であるか(最も少ない量の待ち時間を生成するか)を判断する。
【発明の概要】
【発明が解決しようとする課題】
【0004】
クラスタの多くのノードにわたってデータが格納される分散データシステムでは、分散システム全体用の単一の最適なクエリ計画を判断することは難しい場合がある。たとえば、クラスタ全体にわたるデータ分散に依存して、クラスタ内のノードのいくつかにとってはあるクエリ計画が最適であるものの、他のノードにとっては別のクエリ計画が最適である場合がある。
【課題を解決するための手段】
【0005】
簡単な概要
さまざまな実施例によれば、開発者らおよびIT専門家らが障害を検出し、どのクエリがシステムの動きが遅い原因となっているか判断するのを助けるために、分散データシステムで使用されるクエリ説明計画が説明される。クエリ説明計画とは、SQLベースのデータシステムにおいて情報にアクセスするために、または情報を修正するために使用される、順序付けられた1組のステップである。クエリ説明計画は、クエリオプティマイザーによって選択された実行計画についての情報を作成し、格納する。一実施例によれば、分散データグリッドが、分散説明計画を提供するための設備を利用する。この分散説明計画は、クラスタ内の各ノードがクエリにどのように返答したかについての可視性を提供する。たとえば、あるノードはクエリのフィルタをあるシーケンスで適用し、一方、別のノードは異なるシーケンスを使用したかもしれない。加えて、分散クエリ説明計画は実行追跡を提供可能であり、各ステップの実行時間、総実行時間などについての情報をレンダリングする。
【図面の簡単な説明】
【0006】
【
図1】この発明のさまざまな実施例に従ったクエリ説明計画機能のシステムレベル図である。
【
図2A】この発明のさまざまな実施例に従ったクエリ説明計画を使用する一例の図である。
【
図2B】この発明のさまざまな実施例に従ったクエリ説明計画を使用する一例の図である。
【
図3】この発明のさまざまな実施例に従ったクエリ説明計画を提供するフローチャートである。
【
図4】この発明の一実施例を実現し得るコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【0007】
詳細な説明
同じ参照符号が同様の要素を示す添付図面の図において、この発明を、限定のためではなく例示のために説明する。この開示における実施例への参照は必ずしも同じ実施例に対するものではなく、そのような参照は少なくとも1つということを意味する。特定の実現化例が説明されるが、これは例示的な目的のためにのみ行なわれるということが理解される。関連技術の当業者であれば、この発明の範囲および精神から逸脱することなく、他の構成要素および構成が使用されてもよいということを認識するであろう。
【0008】
以下の説明では、この発明の完全な説明を提供するために多くの具体的詳細が述べられる。しかしながら、この発明はこれらの具体的詳細がなくても実践され得るということは、当業者には明らかであろう。他の点では、この発明を不明瞭にしないように、周知の機能は詳細には説明されない。
【0009】
さまざまな実施例によれば、開発者らおよびIT専門家らが障害を検出し、どのクエリがシステムの動きが遅い原因となっているか判断するのを助けるために、クエリ説明計画が分散データシステムに提供される。一実施例によれば、分散データグリッドが、分散説明計画を提供するための設備を利用する。この分散説明計画は、クラスタ内の各ノードがクエリにどのように返答したかについての可視性を提供する。たとえば、あるノードはクエリのフィルタをあるシーケンスで適用し、一方、別のノードは異なるシーケンスを使用したかもしれない。加えて、分散クエリ説明計画は実行追跡を提供可能であり、各ステップの実行時間、総実行時間などについての情報をレンダリングする。
【0010】
一実施例によれば、クエリ説明計画を得るために、メソッドを呼出すことができ、クエリをパラメータとして渡す。クエリはクラスタ内のすべてのサーバに送信可能であり、各サーバは、そのサーバに特有の判断された最適なクエリ計画と、その実行結果とを返送できる。これらの計画および結果は、クラスタ内のすべてのノード中で集約可能である。このため、メソッド呼出しの結果は、その特定のクエリについてのクラスタ中のすべてのクエリ計画に関する情報を提供するデータ構造であってもよい。設備はまた、異なるクエリ計画同士を比較対照し、結果を調整するための手段を提供してもよい。
【0011】
一実施例によれば、ユーザは、クエリ説明計画の結果を検査し、インデックスを作成して、クエリの速度を向上させることができる。インデックスとは、表の一部のコピーを作成することにより、または当該技術分野で公知であるような何らかの他の手段により、データ検索動作の速度を向上させることが可能なデータ構造である。クエリ説明計画の結果に基づいて、ユーザらは、システムの速度を向上させるためにどの表についてインデックスを作成するかについてのもっと良い考えを有することができる。
【0012】
図1は、この発明のさまざまな実施例に従ったクエリ説明計画機能のシステムレベル図である。この図は構成要素を論理的に別々のものとして図示しているが、そのような図示は単に例示的な目的のためである。この図に描かれた構成要素を別々のソフトウェア、ファームウェア、および/またはハードウェアへと組合せてもまたは分割してもよいということは、当業者には明らかであろう。また、そのような構成要素は、それらがどのように組合され、または分割されようと、同じコンピューティング装置上で実行可能であり、もしくは1つ以上のネットワークまたは他の好適な通信手段によって接続された異なるコンピューティング装置中に分散可能であるということも、当業者には明らかであろう。
【0013】
図示されているように、クライアント103が、複数のサーバ(100、101、102)間で1組のデータを管理する分散データグリッドクラスタ104に接続可能である。クライアントは、少ない待ち時間で必要なデータを得るために、データへのクエリを提出できる。加えて、図に示すように、クライアントは、グリッドに対してメソッドの呼出しを提供し、構造化クエリ言語(SQL)クエリをパラメータとしてメソッドに渡すことにより、クラスタからのクエリ説明計画を要求できる。クエリは次に、クラスタ内のサーバノードの各々に分散される。各ノードは、それ自体のデータ区画(106、107、108)に対してクエリ計画(109、110、111)を評価し、そのクエリ計画の結果を返送する。なぜなら、それはそのローカルに格納されたデータに関連しているためである。結果は次にクエリ結果オブジェクト105へと集約され、それがクライアントに返送される。クエリ結果オブジェクト105は、クラスタ内の各ノードが元のSQLクエリについてのクエリ計画をどのようにローカルに評価したかに関する情報を提供する。
【0014】
図2Aおよび
図2Bは、この発明のさまざまな実施例に従ったクエリ説明計画を使用する一例の図である。なお、この図はある符号およびデータ構造を含んでいるものの、本実施例はここに例示された特定の符号またはデータ構造に限定されない。当業者には明らかであるように、この発明の範囲内で多くの他の実現化例が可能である。
【0015】
より特定的には、
図2Aはクエリ計画を呼出す符号の一例を示し、
図2Bはその符号の呼出しによって返送されるクエリ記録オブジェクトを示す。一実施例によれば、クエリ記録オブジェクトは、表示される際に
図2Bに示すデータをレンダリングする文字列であってもよい。
【0016】
一実施例によれば、クエリ計画結果の「Name」フィールドは、クエリ計画ステップの名前を指す。多くの場合、これは、クエリのフィルタに対するメソッド「toString」の呼出しであろう。インデックスは、該当する場合、インデックスルックアップへの参照である。「Cost」とは、フィルタ有効性算出から返送された推定コストである。
【0017】
図2Bに示す結果は、クエリステップ用に使用されるフィルタおよび各インデックス(もしあれば)、フィルタに渡されたキーの組のサイズ、ならびにフィルタを使用する有効性を算出した結果を示す。たとえば、上述の結果は、4つの記憶ノードを有するクラスタにおいて1000個のエントリを有するキャッシュに対して走らされたクエリ説明計画についてのものであってもよい。
【0018】
なお、上述の事項は、クエリ計画結果が何に見えるかについての単なる一例である。他のさまざまな意味のあるやり方でクエリ計画の部分的結果を集約することが可能であり得る。クエリ計画集約子を拡張し、カスタムクエリ計画結果オブジェクトを実現することにより、クエリ計画結果のカスタム化を可能にするアーキテクチャを、以下に説明する。
【0019】
算出された有効性
一実施例によれば、算出された有効性とは、1組のキーをフィルタにかけるためにフィルタが一群のインデックスをどのように良好に使用できるかについての推定された尺度である。この値は、最も効果的なフィルタが最初に適用されるように、ArrayFilterにおけるフィルタの配置を決定するために使用可能である。IndexAwareFilter.calculateEffectivenessから返送された値は実際、フィルタを適用する推定評価コストである。
【0020】
例示として、以下の表1は、make=Hondaおよびcost<7000でインデックスがmake上にある場合の中古車についてのクエリを示す。
【0022】
一実施例によれば、表1に示す例における各フィルタについての有効性は、以下のように算出されるであろう。
【0023】
Equals Filter:適用可能なインデックスがあるため、算出された有効性は1として与えられる。インデックスを適用する動作がインデックスコンテンツへのアクセスをたった1度だけ必要とするため、1という値が使用される。これは純粋な評価コスト値である。なぜなら、これは、インデックスが所与のキーの組をどのように効果的に減少させるかについて何も述べていないためである。たとえば、キャッシュがHondaのみを含む場合、このフィルタの適用は安価であるが効果的ではない場合がある。ここで適用可能なインデックスがなければ、算出された有効性は、EVAL_COSTにキーの数を乗算したものとなるであろう。EVAL_COSTは一定値であり、現在1000に設定されている。これは、キーの組を減少させるためにフルスキャンを行なう相対的コストを示すよう意図されている。上述のように、この値は純粋に評価コストであり、キーの組を減少させる動作の実際の有効性について何も述べていない。
【0024】
Less Filter:ここで適用可能なインデックスはないので、算出された有効性は、EVAL_COSTにキーの数を乗算したものとなるであろう。
【0025】
And Filter:このフィルタの算出された有効性は、それを作り上げるフィルタの有効性に基づいている。この例では、Equals Filterの算出された有効性は1であり、Less Filterの算出された有効性はキーの数に基づく何らかの値である。根底にあるフィルタは、最も効果的なもの(実際には、最も費用がかからないもの)が最初に来るよう順序付けられたリストにおけるそれらの算出された有効性に基づいて重み付けされる。このAnd Filterの算出された有効性は、フィルタのそのリストにおける第1のフィルタの算出された有効性である。
【0026】
この例では、キーの所与の組は、最初にEquals Filterにより、第2にLess Filterにより減少されるであろう。make属性上にインデックスがないものの、cost上にインデックスがあった場合、それは、最初にLess Filterが適用されて反転されるであろう。フィルタの現在の順序付けは主として、適用可能なインデックスの有無に基づいている。これが最良の計画を作成するか否かは、フィルタを適用する実際の有効性(フィルタがキーの組を減少させる能力)に依存する。
【0027】
インデックスが式から取出されると、両方のフィルタは同じ算出された有効性(EVAL_COSTにキーの数を乗算したもの)を返送するであろう。これは、どちらのフィルタが最初に適用されるかわからないということを意味する。どちらが最良であるか判断するために、実際の有効性を算出する必要があるであろう。たとえば、キャッシュにおけるエントリの2%のみがHondaで、99%が7000ドル未満のコストである場合、Equals Filterを最初に適用することは理にかなう。なぜなら、それはキーの組を最も減少させるためである。逆に、キャッシュにおけるすべてのエントリがHondaである場合、Less Filterを最初に適用することは理にかなう。なぜなら、Equals Filterはキーの組を減少させるのに効果がないためである。
【0028】
場合によっては、実際にフィルタを適用することなく、有効性について仮定し、根拠のある事例を採用することが、可能であり得る。たとえば、インデックスを有するEquals Filterである。1のみを返送する代わりに、キーの組を減少させる要因を含めることによって推定を強化することができる。
【0030】
この値の変形例は、有効性/コストとして使用可能である。
図3は、この発明のさまざまな実施例に従ったクエリ説明計画を提供するフローチャートである。この図は例示のためにある特定のシーケンスの機能的ステップを示しているが、プロセスは必ずしもこの特定の順序またはステップに限定されない。この図に描かれたさまざまなステップが変更され、再構成され、並行して行なわれ、またはさまざまなやり方で適応され得るということは、当業者であれば理解するであろう。また、この発明の精神および範囲から逸脱することなく、あるステップまたはステップのシーケンスをこのプロセスに追加したり、またはこのプロセスから省略することができるということが理解されるべきである。
【0031】
ステップ300に示すように、クラスタ内の複数のノード上にデータが格納され、各ノードは、前記ノード上に格納されたデータに対して構造化クエリ言語(SQL)クエリを実行可能である。ステップ301で、クラスタに接続されたクライアントから、SQLクエリを含む要求が受信される。ステップ302で、SQLクエリはクラスタ内の各ノードに提出される。クラスタ内の各ノードは、そのノード上のローカルデータを用いてSQLクエリについてのクエリ計画を評価し、そのノードでSQLクエリがどのように実行されるかに関する1組の情報を返送する。ステップ303で、クラスタ内のすべてのノードからの情報を集約するクエリ記録オブジェクトが作成される。クエリ記録オブジェクトは、クラスタ内の各ノードによってSQLクエリがどのように実行されるかに関する情報を含む。
【0032】
さまざまな実施例によれば、クエリ説明計画は、分散データシステムにおいて統計値を収集し、クエリを走らせるためのコストを算出するためのメソッドを提供できる。それは要求ごとに行なうことができ、すべてのクエリの一部として行なう必要はない。一実施例によれば、説明計画プロセスは実際にクエリを走らせることを必要とせず、その代わり、所与のフィルタを用いてクエリを走らせるコストを算出できる。クエリ説明計画機能の実現は、分散データシステムにおけるクエリ性能に影響を及ぼす必要はない。説明計画の結果は、ITが失われたインデックスを追加できるように、プログラマではない人にとって消費できるものである必要がある。クエリ性能を向上させ、説明計画にとって意味のある値を提供するために、フィルタ評価中にインデックスを適用する有効性を算出するための既存のメソッドを調べて実現してもよい。クエリ説明計画の実現は、追跡機能を用いて使用されてもよい。追跡は、それが実際にクエリを走らせ、クエリ性能についての追加の統計値を提供すること以外は、クエリ説明計画に似ている。
【0033】
一実施例によれば、クエリ説明計画設備は、説明計画モードおよび追跡モードという少なくとも2つのモードで実行可能である。説明計画モードでは、設備は実際にはクエリを実行せず、単に各クラスタメンバー用にクエリ計画を返送する。追跡モードでは、設備はクエリを実行し、たとえば各フィルタを適用する実行時間およびフィルタが適用されたシーケンスを含む、クラスタ内の各ノードに対する実際の性能メトリクスを返送する。
【0034】
アーキテクチャ
分散キャッシュにおいてクエリ説明計画機能を可能にするために使用できるさまざまなオブジェクトのいくつかの例を以下に挙げる。なお、これらのオブジェクトは単に例示のためにのみ提供されており、この発明のすべての実施例を限定するよう意図されてはいない。
【0035】
QueryRecorder:QueryRecorder集約子は、クエリ記録を得るために使用可能である。この集約子は、クエリ説明計画が要求されている分散データグリッドへの信号として、および説明計画結果の実際の集約子として機能できる。QueryRecorderは、EXPLAINまたはTRACEという2つのタイプのうちの1つを用いて作成されるであろう。EXPLAINを用いてQueryRecorderを作成することは、クエリ実行の推定コストを含むQueryRecordオブジェクトを作成するであろう。TRACEを用いてQueryRecorderを作成することは、クエリ実行の実際のコストを含むQueryRecordオブジェクトを作成するであろう。言い換えれば、追跡集約を行なうことは、各フィルタステップで実際にクエリを実行して有効性(エントリの組を減少させる能力)を記録し、一方、説明計画集約は単に、(上述のように)各ステップを辿って推定コストを記録するであろう。
【0036】
QueryRecorderFilter:EntryFilterを拡張可能なフィルタインターフェイスが作成可能である。一実施例によれば、すべてのフィルタはこのインターフェイスを実現するであろう。このインターフェイスは、フィルタを説明し追跡する新しいメソッドを含む。多くのフィルタにとって、説明するための呼出しは、IndexAwareFilter.calculateEffectivenessを通してフィルタを適用する有効性を算出し、この情報をクエリの一部として記録するであろう。
【0037】
フィルタ実現:多くのフィルタ用のクエリ説明計画の標準実現は単に、クエリ記録ステップへのフィルタの適用についての情報を記録するであろう。この情報は、フィルタ適用前のキーの組のサイズと、フィルタ適用後のキーの組のサイズと、フィルタを適用する期間および実際のコストまたは推定コストとを含んでいてもよい。ArrayFilterを拡張するフィルタについては、クエリ説明計画の実現は、サブフィルタごとに新しいクエリ記録ステップを作成し、各々においてクエリ説明計画を呼出すであろう。ユーザらは、QueryRecorderFilterを実現または拡張することができる。QueryRecorderFilterを拡張しないフィルタは依然として、デフォルトで説明または追跡可能となるであろう。
【0038】
QueryContext:QueryRecorderFilterの説明計画および追跡メソッドは、クエリコンテキストの使用を含む。コンテキストは、クエリスキャンを行なうために必要なあらゆる情報で初期化されるバッキングマップコンテキスト(たとえばインデックスのマップ)へのアクセスを提供可能である。
【0039】
QueryRecord:QueryPlanインターフェイスは、クエリ計画動作から返送された標準結果オブジェクトを規定する。QueryPlanAggregatorは拡張可能であり、aggregateResultsの返送タイプはObjectであるため、QueryPlanインターフェイスの使用は必要とはされない。QueryPlanインターフェイスは、集約子が部分的結果を組合せることを可能にするaddResultsメソッドを含む。QueryPlanのデフォルト実現は、クエリ計画のステップのすべてを含む併合された結果にアクセスするためのさまざまなメソッドを含んでいてもよい。QueryPlanインターフェイスはまた、PartialResults、StepおよびContainmentStepを含む、クエリ計画結果の構成要素を作り上げる他のインターフェイスを含む。
【0040】
一実施例では、各サーバノード100〜102は、コンピュータシステム上で実現されてもよい。
図4は、この発明の一実施例を実現し得るコンピュータシステム400を示すブロック図である。コンピュータシステム400は、情報を通信するためのバス402または他の通信機構と、情報を処理するためにバス402と結合されたプロセッサ404とを含む。コンピュータシステム400はまた、情報およびプロセッサ404によって実行される命令を格納するためにバス402に結合された、ランダムアクセスメモリ(RAM)または他の動的記憶装置などのメインメモリ406を含む。メインメモリ406はまた、プロセッサ404によって実行される命令の実行中に一時的変数または他の中間情報を格納するために使用されてもよい。コンピュータシステム400はさらに、静的情報およびプロセッサ404用の命令を格納するためにバス402に結合された読出専用メモリ(ROM)408または他の静的記憶装置を含む。磁気ディスクまたは光ディスクなどの記憶装置410が、情報および命令を格納するために提供され、バス402に結合されている。
【0041】
コンピュータシステム400は、コンピュータユーザに情報を表示するためのブラウン管(CRT)などのディスプレイ412に、バス402を介して結合されてもよい。英数字キーまたは他のキーを含む入力装置414が、プロセッサ404に情報およびコマンド選択を通信するために、バス402に結合されている。別のタイプのユーザ入力装置は、マウス、トラックボール、またはカーソル方向キーなどのカーソル制御316であり、方向情報およびコマンド選択をプロセッサ404に通信し、ディスプレイ412上のカーソルの動きを制御する。
【0042】
この発明は、ここに説明された手法を実現するためのコンピュータシステム400の使用に関する。この発明の一実施例によれば、それらの手法は、メインメモリ406に含まれる1つ以上の命令の1つ以上のシーケンスをプロセッサ404が実行するのに応答して、コンピュータシステム400によって行なわれる。そのような命令は、記憶装置410などの別のマシン読取可能媒体から、メインメモリ406へと読込まれてもよい。メインメモリ406に含まれる命令のシーケンスの実行により、プロセッサ404は、ここに説明されたプロセスステップを行なう。代替的な実施例では、この発明を実現するために、ソフトウェア命令の代わりに、またはソフトウェアと組合せて、ハードワイヤード回路が使用されてもよい。このため、この発明の実施例は、ハードウェア回路とソフトウェアとのいかなる特定の組合せにも限定されない。
【0043】
加えて、各サーバノード100〜102は、ネットワーク422などのローカルネットワークを介して互いに接続可能である。また、ネットワーク422は、サーバノード100〜102を、サーバノード100〜102のクラスタの外のクライアント103に接続可能である。
【0044】
この開示において説明されたさまざまな状況全体を通し、この発明の実施例はさらに、前述のシステムおよび方法を実行するよう構成されたコンピュータ機器、コンピューティングシステムおよびマシン読取可能媒体を包含する。具体的に設計された集積回路または他の電子部品からなる実施例に加えて、この発明は、コンピュータ分野における当業者には明らかであるように、この開示の教示に従ってプログラミングされた従来の汎用または専用デジタルコンピュータもしくはマイクロプロセッサを用いて都合よく実現されてもよい。
【0045】
ソフトウェア分野における当業者には明らかであるように、この開示の教示に基づいて、適切なソフトウェア符号化が、熟練したプログラマらによって容易に準備可能である。この発明はまた、当業者には容易に明らかであるように、アプリケーション特有の集積回路を準備することにより、または従来の構成回路の適切なネットワークを相互接続することにより、実現されてもよい。
【0046】
さまざまな実施例は、ここに提示された機能のいずれかを行なうように汎用または専用コンピューティングプロセッサ/装置をプログラミングするために使用可能な命令を格納した記憶媒体であるコンピュータプログラム製品を含む。記憶媒体は、フロッピー(登録商標)ディスク、光ディスク、DVD、CD−ROM、マイクロドライブ、光磁気ディスク、ホログラフィックストレージ、ROM、RAM、PRAMS、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリ装置、磁気または光カード、ナノシステム(分子メモリICを含む)を含むあらゆるタイプの物理的媒体;紙または紙ベースの媒体;命令および/または情報を格納するのに好適なあらゆるタイプの媒体または装置のうちの1つ以上を含み得るが、それに限定されない。コンピュータプログラム製品は、1つ以上の公的および/または私的ネットワークを通して全体的にまたは部分的に送信可能であり、送信は、ここに提示された機能のいずれかを行なうために1つ以上のプロセッサによって使用可能な命令を含む。送信は、複数の別々の送信を含んでいてもよい。しかしながら、ある実施例によれば、命令を含むコンピュータ記憶媒体は一時的でなく(すなわち、送信されるプロセスにはない)、むしろ物理的装置上で持続される。
【0047】
この発明の好ましい実施例の上述の説明は、例示および説明のために提供されてきた。それは、包括的であるよう、またはこの発明を開示されたままの形に限定するよう意図されてはいない。当業者には、多くの修正および変更が明らかであろう。実施例は、この発明の原理およびその実際の適用を最良に説明するために選択され説明されており、それにより、関連技術の当業者がこの発明を理解できるようにする。この発明の範囲は請求項およびそれらの均等物によって定義されるということが意図されている。