(58)【調査した分野】(Int.Cl.,DB名)
投票モジュールが、前記第1のコンピューティングノードから前記第1の推定コストに関する前記第1の実行計画の投票及び前記第2のコンピューティングノードから前記第2の推定コストに関する前記第2の実行計画の投票を受け取る手順と、
前記第1の実行計画の投票の数が前記第2の実行計画の投票の数よりも多いことに基づき、前記第1の実行計画を選択する手順と、を更に含む、請求項1に記載の方法。
前記第1の実行計画の投票の数又は前記第2の実行計画の投票の数は、前記第1のコンピューティングノードの性能特性、前記第1のコンピューティングノードに記憶されたデータの量及び前記第1のコンピューティングノードが前記クエリを実行する頻度のうちの1つ以上に基づき決定される、請求項4に記載の方法。
前記第1のコンピューティングノード及び前記第2のコンピューティングノードは、それぞれ区画された表の区画を維持する、請求項1から請求項7のいずれか一項に記載の方法。
【発明を実施するための形態】
【0006】
以下の開示は、データベースシステム、状態機械、ワークフローエンジンなどとして動作する複数のシャードにわたって最適化される実行計画の生成を対象とする。様々な実施形態では、各シャードは、シャードで動作する実行エンジンによる実行のために、関連したコスト係数で局所的に最適化された実行計画を生成する。コスト係数は次に、システム全体でその効果を考慮して最適化される計画を選択するように、他の実行計画と関連付けられたコスト係数と調整および比較され得る。コスト係数に対する調整は、とりわけ実行計画を生成したシャードによって収集された統計値、他のシャードによって生成された統計値、およびシャードの相対的な性能特性に基づいてもよい。コスト係数の比較は、中央権限による順次比較、投票、決定などを含む様々な技術によって実施され得る。
【0007】
図1は、大域的最適化プロセスの一実施形態を示す。1つ以上のクライアントアプリケーションは、インターネット等のネットワーク100を介してシャードベースのシステムに接続される。クライアントアプリケーションは、ネットワーク100を介してシステムにクエリ102を送信する。クエリという用語は、例えば、データを返し、データを変更し、またはコンピューティングプロセスもしくはデバイスの状態を変更させ得るコンピューティング動作を呼び出す任意のタイプの要求またはコマンドを指すように本明細書全体にわたって使用される。クエリ102は、特定のシャード118に方向付けられてもよく、または任意のリダイレクション構成要素104によってそこに経路指定されてもよい。例えば、シャード118で動作する実行エンジン120は、クエリを受信および処理することができる。様々な非限定的実施形態では、実行エンジンは、データベース、状態機械、またはワークフローエンジンであり得る。実行エンジンは、クエリを実行するように命令のセットを実施する。同じクエリを実行することができる任意の数の代替的な命令のセットがあってもよく、各セットが異なるコストを有する。様々な非限定的な例では、コストという用語は、命令または命令のセットを実施するために必要とされる時間、消費されるCPUサイクルの数、ワーキングセット、メモリ容量、キャッシュ容量、記憶デバイスの読み出しおよび書き込み性能などを含むことができる。コストはまた、データセット内の行の数、または重複データの量などの係数によって影響を受け得る。クエリを実行するコストを減少させるために、実行エンジン(時にはクエリオプティマイザとして既知の構成要素を介する)は、クエリを実行する予測コスト、すなわち、推定コストを最小限にするか、または減少させる試みに基づいて、局所的に最適化された実行計画を生成することができる。しかしながら、この計画は、単一のシャードで使用するのに好ましくてもよいが、必ずしもシステム全体が最適化されない。しかしながら、フロントエンドモジュール122は、通信構成要素124を介して計画情報およびクエリ統計値を他のフロントエンドモジュール110および116と共有することができる。通信構成要素124は、シャード間の計画情報の通信を調整するか、または容易にし、大域的最適化経路を決定するように必要に応じて計画情報およびクエリ統計値に調整を提供し、大域的に最適化された計画の選択を可能にする。大域的に最適化されるという用語は、使用が好ましく、かつ必ずしも数学的または確定的に最適な計画を記述しない計画を指すことに留意されたい。
【0008】
本明細書に記載される他の実施形態は、シャードベースのシステムの性能を最適化するように、アプリケーションがヒントを使用することを可能にする。一実施形態では、システムは、クエリ内でクエリがシャードでどのように実行されるかを変更する命令をシャードに送信することをアプリケーションに含めさせる。別の実施形態では、システムは、クエリを実行するために使用される実行計画を直接制御する命令をアプリケーションに含めさせ得る。
【0009】
さらなる実施形態は、データベース性能を最適化するためのヒントおよび提案を技術者に提供する。例えば、好ましい実行計画に関するヒントを受信した後、ソフトウェア技師は、クエリオプティマイザに対する提案を含む修正されたクエリを発行するように、アプリケーションプログラムコードを変更し得る。これらの提案は、クエリオプティマイザが好ましい実行計画に従うように、クエリオプティマイザによって生成された計画に影響を与える。
【0010】
本開示の様々な態様は、ある特定の実施例および実施形態に関して本明細書に記載され、これは、図解することを意図し、本開示を限定することを意図しない。本明細書に提示される主題は、コンピュータ可読記憶媒体などの、コンピュータプロセス、コンピュータ制御装置、コンピューティングシステム、または製造物品として実装され得ることが理解されるべきである。本明細書に記載される主題は、1つ以上のコンピューティングデバイスで実行するプログラムモジュールにおいて一般的に提示されるが、当業者であれば、他の実装形態が他のタイプのプログラムモジュールと組み合わせて実施され得ることを認識するであろう。一般的に、プログラムモジュールとしては、ルーチン、プログラム、構成要素、データ構造、ならびに特定のタスクを実施するか、または特定の抽象データ型を実装する他のタイプの構造が挙げられる。
【0011】
当業者であれば、本明細書に記載される主題が、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブル家庭用電化製品、ミニコンピュータ、メインフレームコンピュータ、ハンドヘルドコンピュータ、携帯情報端末、電子書籍リーダー、携帯電話デバイス、特殊目的のハードウェアデバイス、ネットワーク機器などを含む、本明細書に記載されるものを超える他のコンピュータシステム構成で実践されるか、またはそれらと併用され得ることも理解するであろう。本明細書に記載される実施形態はまた、タスクが、通信ネットワークを通じて結合される遠隔処理デバイスによって実施される分散型コンピューティング環境で実践され得る。分散型コンピューティング環境では、プログラムモジュールは、ローカルおよび遠隔メモリ記憶デバイスの両方に位置することができる。
【0012】
本明細書内では、この一部を形成し、かつ図解、特定の実施形態、または実施例として示す添付の図面に対して参照が行われる。本明細書の図面は、一定の比率の縮尺で描かれない。同様の番号は、いくつかの図を通して同様の要素を表す。
【0013】
大量のデータの管理は、共通のコンピューティング問題である。この問題に対する手法は、大きいデータのセットをより小さいセットに分割することに関係し、これは、比較的安価なコンピューティングデバイスによって管理され得る。各コンピューティングデバイスはまた、それに割り当てられたデータのセットで動作するクエリに応答することに関与し得る。各コンピューティングデバイスによって管理されたデータが共通のレイアウト、またはスキーマを共有する場合、同じクエリまたは意味的に均等な形態のクエリは、コンピューティングデバイスのいずれかまたはすべてに適用され得る。加えて、クエリを解決するための同じ順序のステップは、コンピューティングデバイスのすべてで使用するために選択され得る。実行計画と呼ばれ得るこの順序は、クエリを満たすのに必要とされる動作のセットを記述する。順序は、個々のコンピューティングデバイスへのその影響に基づいて選択され得る。しかしながら、全体的なデータ管理システムの性能は、順序が全体的なデータ管理システムへのその影響(すなわち、応答時間、ワーキングセット、CPUサイクルなどの様々な係数に関するコスト)に基づいて、かついずれか1つのコンピューティングデバイスへのその順序の影響だけでなく選択される場合に改善され得る。
【0014】
大きいデータ管理システムを設計するとき、1つもしくは2つのより大きく、より高価なデバイスを使用するのではなく、多くのより小さいコンピューティングデバイス間の作業負荷を分割することが多くの場合に望ましい。より小さいコンピューティングシステムは各々、それがシステム全体の断片を表すことにより、シャードと呼ばれ得る。シャードは、ドメインと呼ばれ得るものに分類され、これは、作業負荷を集合的に管理するように組織化されたシャードの群である。シャードは、コモディティハードウェアコンピュータ、仮想マシン、コンピューティングクラスタ、およびコンピューティング機器などの多種多様なコンピューティング環境で実装され得る。これらのコンピューティングデバイスまたは環境のいずれかは、便宜上、コンピューティングノードと呼ばれ得る。
【0015】
典型的に、各シャードは、独自の専用のプロセッサ、メモリ、および記憶デバイスにアクセスできるデータベースシステム等の完全に独立した実行エンジンを動作する。このタイプの独立したアーキテクチャを利用するシステムは、良好な拡張性を有し、重要な構成要素を共有するシステムと比較してより弾力性がある。独立したアーキテクチャは、ドメイン内の個々のシャードが機能することを停止したとしても、システム全体が動作し続けることを可能にする。しかしながら、当業者であれば、純粋な独立したアーキテクチャからの逸脱が時々望ましいときがあり、または必要であることを理解するであろう。例えば、より大きいシステムを構成するシャードはしばしば、共通のネットワーク基盤を共有する。ネットワークはこの場合、単一障害点を表すが、それらはしばしば、記憶サブシステム等のエラーを起こしやすい構成要素と比較して比較的堅牢である。したがって、共通のネットワークの使用は、独立したアーキテクチャの利点の大部分を保持しながら、シャード間の通信を可能にする。
【0016】
シャードベースのアーキテクチャを用いてデータ管理システムを構築するために多くの可能な手法が利用され得る。1つ手法では、データ表は、行によって区画され、各行の範囲は、特定のシャードに割り当てられる。シャードは、すべての要求を処理して、区画に割り当てられた値の範囲内に入る値を有するデータを取り出すか、または記憶する。この手法は、水平な区画と呼ばれる。一例として、顧客情報を含む表を考慮されたい。顧客の表は、顧客の苗字に基づいて水平に区画され得る。2シャードドメインでは、苗字が「A」〜「M」で始まる顧客は、第1のシャードに割り当てられてもよく、苗字が「N」〜「Z」で始まる顧客は、第2のシャードに割り当てられてもよい。
【0017】
いくつかの場合、ドメインによって維持されるすべての表は、水平に区画される。しかしながら、多くの他の構成が可能である。いくつかの表は、水平に区画され得るが、他の表は、シャード間で複製される。他の場合、水平に区画された表は、ハードウェア障害に対する保護の手段として複製される。
【0018】
表が水平に区画されるとき、各シャードは、同一のスキーマを有するが異なるデータのセットを含む表を提供する。換言すれば、各シャードで提供された水平に区画された表は、同じ列のレイアウトを共有するが、異なるデータの行を含む。各シャード上の表が共通のスキーマを共有するため、クエリは、クエリが最終的に実行する1つまたは複数のシャードのどれかに関係なく書き込まれ得る。
【0019】
共通のスキーマを活用するために、必要とされるデータを含む1つまたは複数のシャードにクエリを経路指定するための手段が提供され、複数のシャードは、要求が2つ以上の水平な区画に及ぶデータに関係する場合に関係し得る。正しいシャードにクエリを経路指定する手法の3つの非限定的な例は、以下の通りである。第1の手法は、クエリを適切なシャードに経路指定する集中型ホストに関係する。集中型システムがクエリを受信するとき、これは、クエリ内に潜在的に関係する区画の範囲を決定する。これは次に、これらの区画を提供し、結果をアセンブルし、かつそれらをクライアントに転送するシャードにクエリを転送することができる。第2の手法では、任意のシャードが要求を受信し、先程記載した同様の様式でそれを処理することができる。アプリケーションは最初に、要求されたデータを含む可能性が最も高い区画を提供するシャードにこの要求を送信する。第3の手法では、アプリケーションは、シャードおよび区画方式の両方を十分に認識し、別個のクエリを各々要求されたシャードに直接送信する。
【0020】
データ管理システムがクエリを実行するとき、これは、表走査、インデックス走査、およびハッシュ表索引等の一連のステップを実施することができ、これは、クエリに対する結果を生成するために必要とされる内部動作である。集合的に、これらのステップは、クエリを実施するためにデータ管理システムによって取られる経路を記述する。より一般的に、それらは、クエリを実施するために実行エンジンによって取られる命令のセットであり、実行計画という用語によって本明細書に、または計画という用語によって簡潔さのために言及される。データベースにおいて、実行計画は、例えば、アクセス経路またはクエリ計画と呼ばれる。多くの場合、同じクエリのための多くの異なる可能な実行計画がある。各実行計画は、同じ結果を生成することができるが、それらの性能特性は、大きく異なり得る。クエリという用語は、実施されるデータの要求またはコマンドを指すことに留意されたい。さらに、単一のクエリは、多くの異なる形態を有することができ、これらのすべては、同じ実行計画を用いて実行され得る。例えば、同じクエリは、異なる言語、様々なテキスト形式を用いて表されてもよく、あるいは、よくあることだが、コマンドが実行されるまで供給されないパラメータ化された値を含んでもよい。これらの場合のすべてに対して、同じ実行計画は、あらゆる形態のクエリを実行するために使用され得る。
【0021】
実行計画はまた、状態機械またはワークフロープロセッサ等の他のタイプの実行エンジンによって使用される。例えば、状態機械は、各関連したコストを持つ一連の可能な状態遷移を含むことができる。様々な経路は、状態「A」から状態「Z」に移動するときに横断されてもよく、これらの各々は、異なるコストを有することができる。
【0022】
特定のシャードでクエリを実行するための好ましい計画を決定するために、クエリオプティマイザとして既知の構成要素は、以下の各々可能な実行計画の予測されたコストを評価する。実行計画における各ステップは、予測(すなわち、推定)コストと関連付けられ、ステップを実行するために必要な時間、または消費するコンピューティングリソースなどの要素を考慮する。実行計画を実施する総予測コストは、その構成要素のステップのコストに基づいて計算され得る。ブランチおよびループは、実行される特定のブランチの可能性を考慮し、かつそれに応じてコスト係数を調整することによって構成され得る。典型的に、総予測コストは、無名スカラー値または時間ベースの推定値として表される。予測コストという用語はまた、推定コストと呼ばれてもよく、必ずしも実際に生じるコストの正確な予測ではないことに留意されたい。
【0023】
予測コストが既知であると、最適化された実行計画は、最も安価な総コストで実行計画を選択することによって選ばれ得る。コストに加えて他の要素も考慮され得る。例えば、全体的な計画があまり効率的ではない場合であっても、初期の結果のセットを迅速に返す計画を選択することが場合によっては望ましい。
【0024】
コスト計算の正確性は、様々な統計値を使用することによって改善され得る。これらは、表における行の数、または列における固有値の数などの値を含むことができる。統計値はまた、同じ実行計画の事前の実行に関連した測定値を含むことができる。データは、所定の実行計画を実行するのに費やした総時間など、一般的な性質であってもよく、または表走査を実施することに関係するディスク読み出しの数など、より詳細であり得るくてもよい。さらに、統計値は、実行計画のどのブランチが実際には最も一般に実行されるか反映し、コスト予測の精度を改善することができる。
【0025】
しかしながら、この手法の有効性は、シャードベースのシステムに限定される。各シャードは独立しており、独自のクエリオプティマイザおよび統計値のセットを有する。したがって、所定のシャードでは、クエリオプティマイザは、局所的に最適化されるが必ずしも大域的に最適化されない実行計画を生成する。大域的に最適化された計画は、各シャードでの所定の実行計画のコスト等の係数、およびそれが各シャードで実行される相対頻度を考慮し全体的なシステム性能を最大化する。しかしながら、局所的に生成された計画の予測コストは、それらが生成されたシステムの特性を反映するだけであるため、誤解を招く恐れがあり得る。
【0026】
大域的に最適化された実行計画を識別する1つの一般的な手法は、ドメイン内の各シャードで局所的に最適化された計画を生成することと、次に、大域的に最適化されると決定するように各計画のコストを比較することとに関係する。様々な手法は、各計画の予測コストの直接比較を実施すること、または本明細書に開示される比較のための他の実施形態など、コストを比較するために使用され得る。様々な手法はまた、各シャードが局所的に最適化された実行計画を生成するときに、計画に関する情報がどのように共有されるか、および大域的に最適化された計画が他のシャードによってどのように利用されるかなど、大域的に最適化された実行計画を決定する他の態様に関して利用され得る。
【0027】
一実施形態では、シャードは、リーダーとして指定され、その局所的に最適化された実行計画に関する情報をブロードキャストする。別のシャードがブロードキャスト計画を独自の計画と比較し、独自の計画が優れていると気付く場合、これは、リーダーとして独自の計画を指定し、独自の計画に関する情報をブロードキャストすることができる。このプロセスは、シャードが現在のリーダーの計画より優れている計画を提供することができなくなるまで続く。このプロセスの最後の先導的計画は、大域的に最適化されると見なされる。
【0028】
図2は、大域的最適化プロセスの一実施形態を示す。一連の動作として示されるが、当業者であれば、様々な実施形態が示される動作を追加、削除、再整理、または修正し得ることを理解するであろう。動作200では、シャードは、リーダーとして現在指定された実行計画に関する情報を受信する。この情報は、
図4によって記載されるデータ構造に類似し得る。
【0029】
動作202では、シャードは最初に、先導的計画を独自の局所的に生成された計画と比較するべきであるかを決定する。いくつかの場合、先導的計画のための情報が受信されるときに局所的計画が生成されていない。このような場合、いくつかの手法が取られ得る。様々な非限定的な例は、新しい計画を直ちに生成すること、または比較なしに先導的計画を受諾することを含む。いくつかの実施形態では、シャードは、いくつかの後の時点で独自の計画を生成し、次いでそれを現在の先導的計画と比較しながら、最初に先導的計画を利用し始めることができる。あるいは、シャードは、比較のための実行計画を決して生成しないように構成されてもよい。
【0030】
比較が実施されるべきであると動作202が決定する場合、シャードは、現在の先導的計画に対応するクエリのための独自の計画を生成するか、または取り出す。動作204では、2つの計画は次に、本明細書に記載される実行計画を比較するための実施形態を含む様々な手段のうちの1つを用いて比較される。動作206で局所的計画が優れている場合、シャードは、動作210で独自の局所的に生成された計画を使用し始めるか、またはそれを使用し続ける。この計画は、動作212でリーダーとして指定され、この計画に関する情報は、動作214で他のシャードにブロードキャストされる。動作206に戻ると、局所的に生成された計画が優れていなかった場合、シャードは、動作208で独自の計画ではなく先導的計画を採用する。
【0031】
比較が実施されるべきではないと動作202が決定する場合、シャードは、直ちに先導的計画を使用し始める。この手法は、局所的計画が生成される間にクエリ実行を停止する必要なく、シャードが既存の計画を使用することを可能にするため、有利であり得る。シャードは次に、シャードがそうでなければ動作していないときなど、後の時点で独自の計画を生成することができる。
【0032】
別の実施形態では、リーダーは、シャードによって生成された実行計画を連続的に評価することによって選択され得る。最初にリーダーとして指定されたシャードは、リーダーの実行計画を独自の計画と比較する第2のシャードに直接、実行計画情報を送信することができる。その計画が優れていると第2のシャードが決定する場合、それは、それ自体をリーダーとして指定し、計画に関する情報を第3のシャードに送信する。そうでなければ、第2のシャードは、元の実行計画情報を第3のシャードに転送する。このプロセスは、各シャードによって保持された実行計画が評価されるまで続き、この順序における最後のシャードは、最終の先導的計画を大域的に最適化された計画として指定する。
【0033】
図3は、順次評価による大域的最適化の一実施形態を示す。第1のシャードは、生成された第1の計画が大域的に最適化された計画であると仮定することにより、動作300で局所的に最適化された実行計画を生成し、かつ計画に関する情報を第2のシャードに送信する。第2のシャードは、動作302で独自の計画を生成するか、または対応するクエリのための予め生成された計画を取り出す。動作304では、コスト係数は、計画の推定コスト間の確実な比較を可能にするように決定され得る。外部から受信され、かつ局所的に生成された計画は次に、動作304で比較される。第2のシャードは次に、動作306で好ましい計画を次のシャードに転送し、このプロセスは、308ですべてのシャードが実行計画を評価することができ、かつ大域的に最適化された計画が決定されるまで繰り返す。動作310では、シャードは、大域的に最適化された計画を利用して取得および開始する。
【0034】
さらなる実施形態は、投票プロセスによる大域的クエリ最適化を実施する。各シャードは、様々な係数に基づいて多くの投票を割り当てられてもよく、リーダーとして選択される独自の計画のためにこれらの投票を行ってもよい。シャードに利用可能な投票の数に影響を与え得る係数としては、シャードの実行計画のコスト、それぞれのクエリが実行される頻度、およびシャードのハードウェアの性能特性が挙げられる。
【0035】
図4は、投票プロセスによって大域的に最適化されたクエリを選択するためのシステムを示す。各シャード400は、様々なサブモジュールが統合され得るフロントエンドモジュール402を含む。当業者であれば、モジュールという用語がメモリ内に記憶され、かつプロセッサによって実行された回路またはソフトウェア命令等の手段を用いることにより実装された機能性の抽象的な単位を指し得ることを理解するであろう。モジュールは、別のプロセス、プログラム、または回路に統合され得る。モジュールはまた、機能性のサブユニットとして別のモジュールに組み込まれ得る。
【0036】
一実施形態では、投票計算器モジュール404は、フロントエンドモジュール402に統合される。投票計算器モジュール404は、統計モジュール408を参照することによって利用可能な投票の数を決定し、これは次に、データベース410およびシャードのオペレーティングシステム412から統計値を取得することができる。一実施形態では、投票の数は、クエリのコスト、シャードのハードウェアの性能特性、シャードで記憶されたデータの量およびタイプ、ならびにクエリがシャードで実行される相対的頻度のうちの1つ以上を参照してクエリごとで決定される。
【0037】
投票調整器モジュール420は、投票プロセスを開始する。
図4に別々に示されるが、投票調整器モジュールは、フロントエンドモジュール402等の任意のモジュールに統合され得る。そうだとしたら、各シャードは、投票調整器モジュール420を含み得るが、1つのみが任意の所定の時間でアクティブである。
【0038】
投票プロセスが開始すると、各投票モジュール406は、投票計算器モジュール404から利用可能な投票の数を取得する。投票モジュール406は次に、投票情報を投票調整器モジュール420に送信する。投票情報は、投票が成功すれば、他のシャードが実行計画をその後要求することを可能にするのに十分な情報を含む。この情報は、シャード識別子、実行計画識別子、およびその実行計画に対して行われる投票の数を示す値を含むことができる。前述のように、投票モジュール406が行い得る投票の数は、投票計算器モジュール404によって決定された量によって限定される。
【0039】
各投票モジュール406がその投票を行うと、投票調整器モジュール420は、大部分の投票でクエリ計画を選択する。いくつかの実施形態では、2つ以上の投票モジュール406は、同じ実行計画に対する投票を行うことができる。そうだとしたら、それらの投票は、ともに追加され、その値は、獲得計画を決定するために使用され得る。
【0040】
獲得計画を決定した後、投票調整器モジュール420は、各シャードに結果を通知し、計画情報モジュール430を介して計画情報を取得し、かつこの情報を各シャードに転送することによって、計画を用いて開始するためにシャードに十分な情報を提供する。他の実施形態は、シャードに好ましい計画を通知し、かつ好ましい計画の使用を開始するための異なる手段を利用することができる。
【0041】
大域的に最適化された実行計画はまた、中央権限によって決定され得る。一実施形態では、各シャードは、その実行計画に関する情報を、各計画を評価および比較する中央権限に送信する。中央権限は、大域的に最適化された計画を決定し、かつその計画に関する情報を各シャードにブロードキャストする。
【0042】
図5は、中央権限を利用することによって大域的に最適化された実行計画を決定する一実施形態を示す。シャード500は、最適化情報520を中央権限510に送信する。最適化情報は、クエリ計画情報、クエリ統計値、およびハードウェア特性情報のうちの1つ以上を含むことができる。実行計画情報は、
図6に示されるものに類似するデータ構造によって表され得る。中央権限510は次に、本明細書に記載されるように、実行計画のコストを比較するための様々な実施形態に従って、各計画のコストを比較し、最も安価な計画を選択することができる。
【0043】
最適化情報520のうちのいくつかは、コスト比較より前の時間に送信され得る。中央権限510は、各シャード500からの係数を積極的に取り出すことができる。あるいは、各シャード500は、様々なトリガー係数に基づいて最適化情報520の態様を送信することができる。様々な実施形態では、関連する要素は、例えば、定期的に、または情報が大幅に変更したときに送信され得る。
【0044】
様々な実施形態では、通信機構は、実行計画に関する情報を分布させるために利用されなければならない。大域的に最適化された計画の選択が進行中である間、計画に関する限定された量の情報を送信することが好ましくてもよい。したがって、送信された情報は、計画の間の比較に必要とされるものに限定され得る。ブロードキャストまたは2地点間通信など、情報を送信するために様々な手段が利用され得る。大域的に最適化された計画が選択された後、計画を利用されることをできるように、より完全な情報が必要とされ得る。他の手段の中でも、ブロードキャストおよび2地点間通信の両方は、この情報を通信するために利用され得る。しかしながら、比較的より大量のデータが関係していることにより、2地点間通信が好ましくてもよい。
【0045】
図6は、実行計画を比較するのに有用な情報を含むデータ構造600の一実施形態を示す。様々な実施形態は、シャード間の計画情報を送信するために、この構造または類似の構造を利用することができる。当業者であれば、データ構造を含む要素が単に例示であることを認識するであろう。代替の実施形態は、本明細書に記載される要素を削除、置換、または追加することができる。
【0046】
ソース識別子602は、実行計画情報のソースを識別し、これは、計画が生成されたシャードであり得る。識別子は、大域的に一意の識別子、ユニフォームリソースロケータ、またはインターネットプロトコルアドレス等のソースを識別するのに役立つ任意のタイプの値であり得る。一実施形態では、送信者が好ましい計画を有すると受信シャードが決定すると、これは、602によって識別されたソースからの計画に関する追加情報を要求することができる。
【0047】
実行計画識別子604は、実行計画を識別する。これは、大域的に一意の識別子等の実行クエリ計画を識別するのに役立つ任意のタイプの値であってもよく、402によって識別されたソースから識別された実行計画に関する完全な情報を取得する要求で使用され得る。
【0048】
クエリ識別子606は、計画が適用されるクエリを識別するのに役立つ。これは、大域的に一意の識別子またはクエリ自体のテキストなど、クエリを識別するのに役立つ任意のタイプの値であってもよい。
【0049】
ドメイン識別子608は、シャードが属するドメインを示す。これに関して、ドメインは、大域的に最適化されたクエリを決定することに関与する一群のシャードを指す。典型的に、ドメインは、所定の表に対して水平な区画のすべてに対応するが、他の配列が有利であり得る。ドメインを構成するシャードは、区画された表を管理することに関係するシャードのすべてを必ずしも含まない。
【0050】
コスト表示器610は、計画のコストの測定値を提供する。コスト表示器は、単純なスカラー値、スカラー値の1つ以上のベクトル、またはコスト情報を伝達する他の手段であってもよい。一実施形態では、コスト表示器は、実行計画を含むステップのセットにおけるステップに対応する値のベクトルである。
【0051】
図7は、より完全な実行計画情報を送信するためのデータ構造700の一実施形態を示す。この構造は、シャードが対応するクエリを実行するように実行計画を使用し始めることを可能にするのに十分な情報を含むことを意図する。一般的に、この情報は、計画を比較するのに必要とされる情報より送信するのにコストがかかる。したがって、これは、最適化されると決定された後のみ、実行計画に関する詳細な情報を送信することが好ましくてもよい。
【0052】
データ構造700は、実行計画のソースの識別子702を含むことができ、これは、大域的に一意の識別子、ユニフォームリソースロケータ、またはインターネットプロトコルアドレス等のソースを識別するのに役立つ任意のタイプの値であり得る。第2の識別子704は、計画自体を識別し、大域的に一意の識別子等の計画を識別するのに役立つ任意のタイプの値であり得る。第3の値706は、計画が適用されるクエリを識別する。これは、大域的に一意の識別子またはクエリ自体のテキストなど、クエリを識別するのに役立つ任意のタイプの値であってもよい。
【0053】
加えて、データ構造は、実行計画をシャードのクエリオプティマイザにロードするのに十分な実行計画を詳細に表すメタデータ708を含むことができる。これは、実行計画詳細710を含むことができる。いくつかの実施形態では、メタデータは、アプリケーションプログラミングインターフェースを介してデータベースに提供され得る。データベースは、プログラミングインターフェースが呼び出された後、供給された実行計画を用いて対応するクエリを処理する。
【0054】
2つの実行計画の予測コストを比較するために様々な手段が利用され得る。いくつかの状況では、調整せずにクエリオプティマイザによって提供されたコスト統計を直接比較することが有利であり得る。しかしながら、様々な係数は、未調整コスト比較を誤解させる場合がある。例えば、シャードのうちの1つでの比較的高速のCPU性能は、関連した実行計画がより遅いプロセッサを有するドメイン内のシャードで成績が悪い場合であっても、シャードのクエリオプティマイザによって生成されたコスト推定値を減少させることができる。
【0055】
一実施形態では、各実行計画のコスト統計は、実行計画を生成したシャードの性能特性に基づいて調整される。スカラーコスト統計は、他のシャードとの比較に好適な調整されたコスト統計を生成するために調整係数を乗じ得る。調整係数は、シャードの全体的な性能特性に基づいてもよい。CPU速度、メモリ容量、記憶デバイス読み出し性能、記憶デバイス書き込み性能、記憶デバイスシーク時間、行カウント、およびデータの重複など、多数の性能およびデータベース測定基準が利用され得る。
【0056】
図8は、コスト比較をすることができる一実施形態を示す。各シャード800は、関連した未調整コスト802で実行計画を生成する。各シャードは、クエリ統計806と性能特性808とのいくつかの組み合わせに基づいて調整係数804を計算する。技術者による手動調整などの他の係数もまた、計算に使用され得る。典型的に、未調整コスト802は、調整されたコスト810を生成するために調整係数804を乗じるが、他の数学または論理演算が調整されたコスト810を生成するために利用され得る。各実行計画からの調整されたコスト810は次に、結果822を生成するために比較関数820によって比較される。
【0057】
図9は、アクセス計画の個々の構成要素のコストが関係のある性能特性に基づいて調整される一実施形態を示す。このように、コスト調整は、コスト計算に影響を与える可能性がより高い特性に重みをつけることによってより正確に行われ得る。例えば、完全な表走査は、CPU速度によるものよりシャードのディスクドライブの性能によって影響を与えられる可能性がより高い場合がある。したがって、表走査のコスト係数は、CPUの速度ではなくディスク性能に基づいて主に調整され得る。
【0058】
実行計画900は、様々な動作タイプ902〜914を含む。各動作タイプは、そのタイプのすべての動作の総コストを反映する関連した未調整コストを有する。各未調整コストは、関連したコスト調整係数930の使用によって調整され、関係のある統計値および性能特性920を参照して決定される。決定に使用された統計値のセットおよび性能特性は、調整係数が関連付けられる動作タイプによって異なり得る。例えば、ハッシュアクセス動作タイプ910と関連付けられる調整係数930は、CPU速度922のみに、または、主に二次的考察としてワーキングセット926とともにCPU速度922に基づいて調整され得る。多くの他のタイプの測定基準も考慮され得る。物理的メモリまたはCPU速度の量などの比較的静的測定値に加えて、動的性能測定基準が収集され、かつ使用され得る。様々な非限定的な例は、ワーキングセット、CPU使用率、平均ディスク待ち行列の長さなどである。実行エンジンによって収集された性能測定基準も考慮され得る。データベースにおいて、様々な非限定的な例としては、キャッシュコヒーレンス測定値、平均ユーザセッション数、および様々なイベントログエントリが挙げられる。
【0059】
様々な実施形態では、最適化された実行計画は、定期的に再計算される。再計算は、ドメイン内のシャードで条件を変更することにより望ましくありうる。例えば、動作中、シャードは、追加のデータを記憶し、場合により、シャードのドメインにわたって変更されたデータの分布をもたらすことができる。そうだとしたら、かつて大域的に最適化された実行計画であったものは、非効率になり得、かつ大域的に最適化された実行計画の新しい決定が望ましくなる。
【0060】
大域的に最適化された実行計画の新しい決定は、最初に利用されたものに類似の様式で進行し得る。一実施形態では、各シャードは、独自の局所的に最適化された実行計画を再計算し、かつ大域的に最適化された計画は、本明細書に記載される様々な実施形態に従って選択される。しかしながら、いくつかの場合では、局所的に最適化された計画のサブセットのみを再計算することが望ましくてもよい。一実施形態では、各シャードは、表の大きさ等のいくつかの特性のセットが閾値を超えて変化した場合にのみ、新しい局所的に最適化された計画を決定することができる。
【0061】
大域的に最適化された実行計画の再計算は、様々なイベントまたは条件によって引き起こされ得る。例えば、これは、1週間に1回など、定期的に引き起こされ得る。あるいは、これは、シャードのうちの1つ以上が動作していないときに適時的に行われてもよい。一実施形態では、シャードがそうでなければ動作していないとき、これは、その局所的に最適化された実行計画を再計算し、局所的に最適化された計画のコストが大幅に変更した場合にのみ、大域的に最適化された計画の再計算を引き起こす。大域的に最適化された計画の再計算のための他のトリガーイベントは、シャードで記憶されたデータの量が大幅に変更したとき、またはシャードのハードウェア構成が変更したときを含む。
【0062】
シャードベースのアーキテクチャの1つの利点は、追加の容量が必要とされるときに新しいシャードが追加され得ることである。しかしながら、統計値のキャッシュを蓄積し、新しい実行計画を生成する間、新しいシャードは、最適に満たずに実施することができる、。大域的に最適化されると既に決定された実行計画で自動的に投入されることが新しいシャードに有利である。その後、新しいシャードは、局所的に最適化された実行計画を計算することができ、大域的に最適化された実行計画を決定するために本明細書に記載される実施形態は次に、新しいシャードと併せて実施され得る。
【0063】
いくつかの例では、クライアントアプリケーションは、システム内のシャードにわたって概ね均等に実行されるクエリを発行する。これは、アプリケーションが各シャードに割り当てられた水平な区画にわたって均等に分布されるデータを要求するときに生じる傾向がある。他の場合では、クライアントアプリケーションは、単一区画に向かって大きく歪んだクエリを発行することができる。後者の場合では、全体的なシステム性能は、個々のアプリケーションがその代わりに、実行されたクエリのための大域的に最適化された実行計画をオーバーライドすることを可能にすることによって改善され得る。
【0064】
他の実施形態では、システムは、クライアントアプリケーションにヒントを供給することができる。ヒントは、実行計画の生成およびクエリ自体の実行に影響を与える提案を含むことができる。例えば、ヒントは、特定のクエリが実行されるとき、完全な表走査がインデックス走査より好ましいことを提案することができる。多くの他のタイプのヒントが可能であり、かつ企図される。クライアントアプリケーションに供給されるヒントは、様々な手段によって決定され得る。一実施形態では、潜在的なヒントは、コスト削減に基づいて評価される。ドメインにわたって繰り返されたクエリ実行のコストを最適化するヒントが、クライアントアプリケーションに利用可能にされる。クライアントは次に、それがクエリを実行するときに供給されたヒントを含むことができる。シャードがクエリを受信すると、これは、ヒントを処理し、ドメインの最適化された性能と一致する様式でクエリを実行する。当業者であれば、先程記載された実施形態が本出願に記載される他の実施形態に加えて、またはその代わりに実践され得ることを認識するであろう。
【0065】
クライアントアプリケーションは、様々な方法でヒントを受信することができる。ブロードキャストシステムは、1つ以上の関係のあるクライアントアプリケーションにヒントを送信するために利用され得る。この手法は、新しい、または異なるヒントが生成されるときに更新をリブロードキャストすることができる利点を有する。あるいは、各アプリケーションは利用可能なヒントを直接要求することができる。特定のハードウェアおよびソフトウェア環境に好適な追加の実施形態も企図される。
【0066】
さらなる実施形態では、ヒントは、シャードベースのシステムから技師および他の技術スタッフに供給され得る。一実施形態では、シャードは、その計画が現在選択された大域的に最適化された計画より大幅に安価であることを示すヒントを供給し、大域的に最適化された計画の再計算またはそのオーバーライドが望ましくてもよいことを提案することができる。ヒントは、様々な方法でユーザに送信され得る。非限定的な例としては、対象とするユーザにアクセス可能なハードドライブに記憶されること、電子メールまたはメッセージングを介して送信されること、または後の処理のために列を成して配置されることが挙げられる。
【0067】
他の実施形態では、システムは、クライアントアプリケーションプログラムの最適化を可能にするソフトウェア技術スタッフによる使用のためにヒントを供給する。ヒントは、技師がクライアントアプリケーションからシャードベースのシステムに送信されたクエリを手動で修正することを提案することができる。例えば、ヒントは、大域的に最適化された実行計画の決定に従って、インデックス走査が特定のクエリに対する完全な表走査より好ましいことを提案することができる。ソフトウェア技師は次に、アプリケーションを修正し、所望の大域的に最適化された計画に適合する可能性がより高いクエリをそれに発行させ得る。他の実施形態では、ヒントはまた、クエリを実行する他の態様を変更するために使用され得る。例えば、ヒントは、クエリが特定のシャードで実行されるべきであるか、または特定のシャードが回避されるべきであるかを、直接的または間接的に示すことができる。ヒントはまた、クエリが複数のシャードにわたって実行を必要とすることを示し、クエリの再構築が望ましいことを人員に提案してもよい。
【0068】
図10は、この手法の一実施形態を示す。一連の動作として示されるが、当業者であれば、動作の順序が異なる場合があり、かつ動作が追加、修正、または削除され得ることを理解するであろう。
【0069】
動作1000では、シャードベースのシステムは、クライアントアプリケーションからのクエリを受信および処理する。大域的に最適化された実行計画は次に、動作1002で生成される。しかしながら、シャードにクエリを直接採用させるのではなく、システムは、動作1004で大域的に最適化された実行計画に関する情報を技術スタッフに送信することができる。この情報は、技師がアプリケーションに所望の修正を行うことを可能にするのに十分な実行計画の記述または説明を含むことができる。例えば、これは、最適化された実行計画の命令のセットおよび関連したコストの記述を含むことができる。
【0070】
動作1006では、システムは、動作1004で提供された情報に従って修正されたクエリを受信する。新しいクエリ計画は次に、動作1008で修正されたクエリに対して生成される。クエリに行われた修正により、新しい実行計画は、所望の大域的に最適化された計画と一致する様式で生成される。さらに説明するために、ヒントは、未修正計画がクエリオプティマイザによって処理されるときにそれがインデックス走査をもたらす場合であっても、大域的に最適化された実行計画がインデックス走査の代わりに完全な表走査を使用することを示すことができる。修正されたクエリは、完全な表走査が好ましいことをクエリオプティマイザに示す命令を含む。したがって、クエリオプティマイザは、完全な表走査を用いて実行計画を生成し、結果として得られたクエリは、所望の大域的に最適化された計画と一致する。新しいクエリが生成された後、クエリは、動作1010で、その計画を用いて実行され得る。
【0071】
例示の目的のために、本明細書に記載される実施形態のうちのいくつかは、水平に区画されたデータを有するデータ管理システムを指す。しかしながら、当業者であれば、本開示の態様が従来のデータベースに関係しないシステムに適用され得ることを理解するであろう。例としては、これらに限定されないが、状態機械およびワークフローエンジンが挙げられる。
図11は、本明細書に記載される大域的最適化技術が適用され得る一実施形態を示す。第1および第2のコンピューティングノード1100は、共通のコマンド1120を受信および処理することができる。コマンドは、それがドメイン内の複数のコンピューティングノードで実行され得、かつ総コストが推定され得る一連のステップに分解され得るならば、任意のタイプであり得る。状態機械およびワークフローエンジンは、これらの基準に適合するコマンドを処理するシステムの例である。双方とも関連した遷移を有する状態のセットからなる。クエリを実施することは、現在の状態からコマンドが実行された状態への遷移のセットを含む。コマンドの完全な状態に達することができるあらゆるシャードは、コマンドを処理することができ、そのようにするコストは、その状態に達するために必要とされるすべての遷移の推定コストに基づいて推定され得る。実行エンジンは、例えば、クエリオプティマイザによって最適化されるか、またはそうでなければ選択された好ましい計画の後に、所望の遷移のセットを生じさせることによってクエリを実施することができる。各シャードによって管理されたデータは、シャードのドメインがセット全体を集合的に管理するように、区画されたデータセットの区画を管理することができる。区画は、データのうちのいくつかまたはさらにはすべてがシャード間で複製されるように重複であり得る。データセットは、任意のタイプのデータを含み、これらに限定されないが、表、ベクトル、配列、グラフなどを含むことができる。
【0072】
ステップの順序および予測コストは、局所的オプティマイザ1102によって決定される。比較モジュール1130は、実行統計、相対的ハードウェア性能特性、および各システムが共通のコマンドを実行する相対的頻度を参照して、2つの計画の予測コストを比較する。比較の結果は、好ましい実行計画1140であり、これは、好ましい実行計画1140と実行エンジン1104との間の連結矢印によって示されるように、実行エンジン1104によって利用され得る。ヒントをアプリケーションまたは技術支援スタッフに供給することなどとともに、好ましい計画を使用するための他の様々な実施形態も利用され得る。
【0073】
前節に記載されるプロセス、方法、およびアルゴリズムの各々は、1つ以上のコンピュータまたはコンピュータプロセッサによって実行されたコードモジュールで具現化され、それによって完全または部分的に自動化され得る。コードモジュールは、ハードドライブ、ソリッドステートメモリ、光ディスクなど、任意のタイプの非一時的コンピュータ可読媒体またはコンピュータ記憶デバイスで記憶され得る。プロセスおよびアルゴリズムは、アプリケーション特有の回路に部分的または全体に実装され得る。開示されるプロセスおよびプロセスのステップの結果は、例えば、揮発性または不揮発性ストレージなど、任意のタイプの非一時的コンピュータストレージ内に持続的または別の方法で記憶され得る。
【0074】
加えて、前述の実施形態のうちの1つ以上は、以下の付記を考慮して理解され得る。
1.第1の実行エンジンを動作させるように構成された第1のコンピューティングノードであって、第1の実行エンジンが、区画されたデータセットの第1の区画を含み、
第1のコンピューティングノードが、第1の実行エンジンでクエリを実行する第1の計画を決定するように動作可能な第1のクエリオプティマイザを動作させるように構成され、クエリが、区画されたデータセットに方向付けられる、第1のコンピューティングノードと、
第2の実行エンジンを動作させるように構成された第2のコンピューティングノードであって、第2の実行エンジンが、区画されたデータセットの第2の区画を含み、
第2のコンピューティングノードが、第2の実行エンジンでクエリを実行する第2の計画を決定するように動作可能な第2のクエリオプティマイザを動作させるように構成される、第2のコンピューティングノードと、
クエリを実行する第1の計画またはクエリを実行する第2の計画が、第1および第2の実行エンジンでクエリを実行するために使用されるべきであるかを決定するように構成されたオプティマイザと、を備える、システム。
2.実行エンジンは、データベースである、付記1に記載のシステム。
3.オプティマイザは、クエリを実行する第1または第2の計画が、クエリを実行する第1の計画を実行する第1のコスト、およびクエリを実行する第2の計画を使用する第2のコストを比較することによって使用されるべきであるかを決定するように構成される、付記1に記載のシステム。
4.オプティマイザは、クエリを実行する第1または第2の計画が第1および第2のコンピューティングノードの特性に基づいて、第1および第2のコストを調整することによって使用されるべきであるかを決定するように構成される、付記3に記載のシステム。
5.第2のコンピューティングノードは、クエリを実行する第1の計画を示す情報を受信するように構成される、付記1に記載のシステム。
6.第2のコンピューティングノードは、オプティマイザの決定に基づいて、クエリを実行する第1の計画を用いてクエリを実行するように構成される、付記1に記載のシステム。
7.クエリは、パラメータ化されたクエリである、付記1に記載のシステム。
8.オプティマイザは、第1の実行計画または第2の実行計画が、クエリの以前の実行および収集された性能測定基準から決定された統計値のうちの1つ以上に基づいて、クエリを実行するために使用されるべきであるかを決定するように構成される、付記1に記載のシステム。
9.データベースクエリを実行するための方法であって、
第1のコンピューティングノードでデータベースクエリを実行するための第1の命令のセットであって、第1のコンピューティングノードによって決定される様式でデータベースクエリを実施する、第1の命令のセットを実行する第1の推定コストを示す情報を受信することと、
第2のコンピューティングノードでデータベースクエリを実行するための第2の命令のセットであって、第2のコンピューティングノードによって決定される様式でデータベースクエリを実施する、第2の命令のセットを実行する第2の推定コストを示す情報を受信することと、
第1および第2の推定コストを比較することによって、第1および第2のコンピューティングノードのうちの少なくとも1つでデータベースクエリを実施するために第1または第2の命令のセットを使用するかを決定することと、を含む、方法。
10.第1および第2の推定コストを比較することは、第1および第2のコンピューティングノードの性能特性に対して調整することをさらに含む、付記9に記載の方法。
11.性能特性は、プロセッサ速度、記憶デバイス速度、利用可能なメモリ、ワーキングセット、CPU使用率、平均ディスク待ち行列の長さ、キャッシュコヒーレンス測定値、平均ユーザセッション数、およびイベントログエントリのうちの1つ以上を含む、付記10に記載の方法。
12.第1および第2の推定コストを比較することは、第1および第2コンピューティングノードによって管理されたデータの特性に対して調整することを含む、付記9に記載の方法。
13.データの特性は、多くのデータの行およびデータの繰り返しの頻度のうちの1つ以上を含む、付記12に記載の方法。
14.第1および第2の推定コストを比較することは、少なくとも1つの命令の推定コストに対する第1または第2のコンピューティングノードの特性に基づいて、第1または第2の命令のセットのうちの少なくとも1つの命令の推定コストを調整することを含む、付記9に記載の方法。
15.第1のコンピューティングノードは、第1の命令のセットを実行する推定コストを示す情報を第2のコンピューティングノードに送信する、付記9に記載の方法。
16.第1または第2の命令のセットを使用するかを決定することは、第1または第2のコンピューティングノードのうちの少なくとも1つによって実施される、付記9に記載の方法。
17.クエリは、区画された表に方向付けられ、クエリオプティマイザは、第1の命令セットを決定する、付記9に記載の方法。
18.コストは、計算能力、CPU速度、メモリ容量、キャッシュ容量、記憶デバイス読み出し性能、記憶デバイス書き込み性能、記憶デバイス書き込み性能、記憶デバイスシーク時間、行カウント、およびデータの重複のうちの少なくとも1つの関数である、付記9に記載の方法。
19.第1または第2の命令のセットを使用するかを決定することは、トリガーイベント後に実施される、付記9に記載の方法。
20.トリガーイベントは、周期的イベント、ハードウェアコンポーネントの変更、ハードウェアの構成に対する変更、およびシステムに記憶されたデータの変更のうちの1つ以上を含む、付記19に記載の方法。
21.非一時的コンピュータ可読記憶媒体であって、コンピューティングデバイスによる実行時に、このコンピューティングデバイスに、
クエリを実施する第1のコストであって、第1のコンピューティングノード内で第1の命令セットを実施する推定コストの決定を含む、第1のコストの推定値を受信することと、
クエリを実施する第2のコストを推定することであって、第2の推定コストが、第2のコンピューティングノードで第2の命令セットを実施する推定コストの決定を含む、推定することと、
第1および第2のコンピューティングノードの相対的特性に対して調整した後、第1のコストを第2のコストと比較し、第1の命令セットが第1および第2のコンピューティングノードでクエリを実施するために好ましいと決定することと、を少なくとも行わせるコンピュータ命令をその上に記憶させた、非一時的コンピュータ可読記憶媒体。
22.コンピューティングデバイスによる実行時に、このコンピューティングデバイスに、
第2のコンピューティングノードでの実行時に、クエリが第1の命令セットを用いて実施されるように、第1の命令セットをクエリと関連付けること、を少なくとも行わせる命令を非一時的コンピュータ可読記憶媒体上に記憶される、付記21に記載の非一時的コンピュータ可読記憶媒体。
23.コンピューティングデバイスによる実行時に、このデバイスに、
第3のコンピューティングノードでの実行時に、クエリが第1の命令セットを用いて実施されるように、第1の命令セットをクエリと関連付けること、を少なくとも行わせる命令を非一時的コンピュータ可読記憶媒体上に記憶される、付記21に記載の非一時的コンピュータ可読記憶媒体。
24.非一時的コンピュータ可読記憶媒体であって、コンピューティングデバイスによる実行時に、このコンピューティングデバイスに、
クエリオプティマイザから、第1のコンピューティングノードでクエリを実行するための第1の計画を取得することと、
クエリオプティマイザから、第2のコンピューティングノードでクエリを実行するための第2の計画を取得することと、
クエリを実行するための第1および第2の計画を実行する予測コストを比較することと、
この比較に基づいて、クエリを実行するための第1または第2の計画のうちのどちらが好ましいかを決定することと、
クエリを実行するための好ましい第1または第2の計画を示す情報を送信することと、を少なくとも行わせる命令をその上に記憶させた、非一時的コンピュータ可読記憶媒体。
25.情報は、クライアントアプリケーションに送信される、付記24に記載の非一時的コンピュータ可読記憶媒体。
26.情報は、ユーザに送信され、この送信は、記憶デバイス、待ち行列、またはメッセージングシステムのうちの1つ以上を含む、付記24に記載の非一時的コンピュータ可読記憶媒体。
27.情報は、クエリを実行するための好ましい第1または第2の計画と一致するクエリを実行するために、クエリオプティマイザに計画を生成させるようにクエリを修正するための提案を含む、付記24に記載の非一時的コンピュータ可読記憶媒体。
28.情報は、クエリを特定のコンピューティングデバイスに経路指定する提案を含む、付記24に記載の非一時的コンピュータ可読記憶媒体。
【0075】
上述される様々な特徴およびプロセスは、互いに独立して使用されてもよく、または様々な方法で組み合わされてもよい。すべての可能な組み合わせおよび部分的組み合わせは、本開示の範囲内に入ることを意図する。加えて、ある特定の方法またはプロセスブロックは、いくつかの実装形態で省略されてもよい。本明細書に記載される方法およびプロセスはまた、任意の特定の順序に限定されず、それに関するブロックまたは状態は、適切な他の順序で実施され得る。例えば、記載されるブロックまたは状態は、具体的に開示されるもの以外の順序で実施されてもよく、または複数のブロックもしくは状態は、単一のブロックもしくは状態で組み合わせられてもよい。例示的なブロックまたは状態は、連続して、並行して、またはいくつかの他の様式で実施されてもよい。ブロックまたは状態は、開示される例示的な実施形態に追加され、またはそれから削除されてもよい。本明細書に記載される例示的なシステムおよび構成要素は、記載されるものとは異なって構成されてもよい。例えば、要素は、開示される例示的な実施形態と比較して、それに追加され、それから削除され、または再配列されてもよい。
【0076】
様々な項目は、メモリ内またはメモリ上に記憶されるように図解され、かつこれらの項目またはこれらの部分は、メモリ管理およびデータ整合性のためにメモリと他の記憶デバイスとの間で転送され得ることも理解される。あるいは、他の実施形態では、ソフトウェアモジュールおよび/またはシステムのうちのいくつかまたはすべては、別のデバイス上のメモリ内で実行し、コンピュータ間通信を介して図解されるコンピューティングシステムと通信する。さらに、いくつか実施形態では、システムおよび/またはモジュールのうちのいくつかのまたはすべては、これらに限定されないが、1つ以上の特定用途向け集積回路(ASIC)、標準集積回路、コントローラ(例えば、適切な命令を実行し、かつマイクロコントローラおよび/または埋込み型コントローラを含むことによる)、フィールドプログラマブルゲートアレイ(FPGA)、結合プログラマブル論理デバイス(CPLD)などを含む、少なくとも部分的にファームウェアおよび/またはハードウェア内など、他の方法で実装または提供されてもよい。モジュール、システム、およびデータ構造のうちのいくつかまたはすべてはまた、ハードディスク、メモリ、ネットワーク、または適切なドライブによって、もしくは適切な接続を介して読み出される携帯用媒体物品など、コンピュータ可読媒体に記憶(例えば、ソフトウェア命令または構造化データとして)されてもよい。システム、モジュール、データ構造はまた、無線ベースおよび有線/ケーブルベースの媒体を含む様々なコンピュータ可読伝送媒体上で生成されたデータ信号として伝送されてもよく、様々な形態を(例えば、単一もしくは多重化アナログ信号の一部として、または複数の離散デジタルパケットもしくはフレームとして)取ってもよい。このようなコンピュータプログラム製品はまた、他の実施形態で他の形態を取ってもよい。したがって、本発明は、他のコンピュータシステム構成で実践されてもよい。
【0077】
本明細書に使用される条件付き用語、数ある中でも、例えば、「することができる(can)」、「することができる(could)」、「してもよい(might)」、「してもよい(may)」などは、別の方法で具体的に記述されないか、または使用されるように文脈内に別の方法で理解されない限り、ある特定の実施形態がある特定の特徴、要素、および/またはステップを含むが、他の実施形態はこれらを含まないことを伝えることを一般的に意図する。したがって、このような条件付き用語は、特徴、要素、および/またはステップが1つ以上の実施形態に何らかの形で必要とされるか、あるいは、これらの特徴、要素、および/もしくはステップが任意の特定の実施形態内に含まれるか、またはそれで実施されるかをオーサ入力もしくはプロンプティングの有無にかかわらず、1つ以上の実施形態が決定する論理を必然的に含むことを意味することを一般的に意図しない。用語「備える」、「含む」、「有する」などは、同義語であり、開放型様式で包括的に使用され、追加の要素、特徴、行為、動作などを排除しない。また、用語「または」は、使用時に、例えば、要素の一覧を結びつけるために、用語「または」は、一覧における1つ、いくつか、またはすべてを意味するように、その包括的意味で(かつその排他的意味ではなく)使用される。
【0078】
ある特定の例示的な実施形態が記載されたが、これらの実施形態は、単に例示として提示され、本明細書に開示される本発明の範囲を限定することを意図しない。したがって、前述の説明には、任意の特定の特徴、特性、ステップ、モジュール、もしくはブロックが必要であり、または不可欠であることを意味することを意図することはない。実際には、本明細書に記載される新規の方法およびシステムは、様々な他の形態で具現化されてもよく、さらに、本明細書に記載される方法およびシステムの形態で様々な省略、置換、および変更は、本明細書に開示される本発明の趣旨から逸脱することなく行われてもよい。添付の特許請求の範囲およびその均等物は、本明細書に開示される本発明のうちのいくつかの範囲および趣旨内に入るようにこのような形態または修正を包含することを意図する。