(57)【要約】      （修正有）【課題】拡張可能かつ効率的な大きいデータベースを作り出すシステム、データベースクエリを実行するための方法及びコンピュータに読み取り可能な記録媒体を提供する。【解決手段】システムにおいて、投票計算器モジュール４０４は、フロントエンドモジュール４０２に統合される。投票計算器モジュール４０４は、統計モジュール４０８を参照することによって利用可能な投票の数を決定し、投票プロセスが開始すると、各投票モジュール４０６は、投票計算器モジュール４０４から利用可能な投票の数を取得する。投票モジュール４０６は次に、投票情報を投票調整器モジュール４２０に送信する。獲得計画を決定した後、投票調整器モジュール４２０は、各シャードに結果を通知し、計画情報モジュール４３０を介して計画情報を取得し、かつ、この情報を各シャードに転送することによって、計画を用いて開始するためにシャードに十分な情報を提供する。【選択図】図４
2018077868.tif 000002
【特許請求の範囲】
【請求項１】
クエリを実行するため第１のコンピューティングノードによって第１の動作を実行する第１の推定コストを計算する手順と、
前記クエリを実行するため第２のコンピューティングノードによって第２の動作を実行する第２の推定コストを計算する手順と、
前記第１の推定コスト及び前記第２の推定コストに少なくとも一部基づき、前記第１の動作のセットを使用し、前記１のコンピューティングノード及び前記２のコンピューティングノードによって、実行するクエリを割り当てる手順と、を含む方法。
【請求項２】
前記第１の動作のセットは、前記１のコンピューティングノードのクエリ統計値に基づき特定される、請求項１に記載の方法。
【請求項３】
前記第１の動作のセットは、前記第２のコンピューティングノードから生成される第２のクエリ計画であると特定される、請求項１に記載の方法。
【請求項４】
前記第１の動作のセットの投票を受け取る手順と、
前記投票に少なくとも一部基づき、前記第１の動作のセットが好ましいかを特定する手順と、を更に含む、請求項３に記載の方法。
【請求項５】
前記第１の動作のセットの第１の投票の数が前記第２の動作のセットの第２の投票の数よりも多いことに少なくとも一部基づき、前記第１の動作のセットが好ましいと特定する手順をさらに含む、請求項３に記載の方法。
【請求項６】
前記第１のコンピューティングノードの性能特性、前記第１のコンピューティングノードに記憶されたデータの量及び前記第１のコンピューティングノードが前記クエリを実行する頻度のうちの１つ以上に少なくとも一部基づき、前記第１の動作のセットが好ましいと特定する手順をさらに含む、請求項３に記載の方法。
【請求項７】
コスト係数によって前記第１の推定コストを調整し、調整されたコストと前記第２の推定コストとを比較する手順をさらに含む、請求項１に記載の方法。
【請求項８】
前記コスト係数は、前記第１のコンピューティングノード及び前記第２のコンピューティングノードの相対的性能特性に少なくとも一部基づく、請求項７に記載の方法。
【請求項９】
前記コスト係数は、前記第１の動作のセットの動作に一部基づく、請求項７に記載の方法。
【請求項１０】
前記第１のコンピューティングノード及び前記第２のコンピューティングノードは、それぞれ区画された表の区画を維持する、請求項９に記載の方法。
【請求項１１】
少なくとも１つのプロセッサと、
機械可読な命令を記憶するメモリと、を有し、前記少なくとも１つのプロセッサで実行されることにより、
クエリを実行するため第１のコンピューティングノードによって第１の動作を実行する第１の推定コストを計算させ、
クエリを実行するため第２のコンピューティングノードによって第２の動作を実行する第２の推定コストを計算させ、
前記第１の推定コスト及び前記第２の推定コストに少なくとも一部基づき、前記第１の動作のセットを使用し、前記１のコンピューティングノード及び前記２のコンピューティングノードによって、実行するクエリを割り当てさせる、システム。
【請求項１２】
前記機械可読な命令を記憶するメモリにおいて、前記第１の動作のセットは前記１のコンピューティングノードを実行するためのクエリを最適化するために形成される、請求項１１に記載のシステム。
【請求項１３】
前記機械可読な命令を記憶するメモリにおいて、前記少なくとも１つのプロセッサで実行されることにより、前記システムに少なくとも、
前記第１のコンピューティングノードのクエリ統計値及び前記第１のコンピューティングノードのハードウェア特性のうちの１つ以上を示す、前記第１の動作のセットを前記第２の動作のセットと比較するための情報を受け取らせる、請求項１２に記載のシステム。
【請求項１４】
前記機械可読な命令を記憶するメモリにおいて、前記少なくとも１つのプロセッサで実行されることにより、前記システムに少なくとも、
前記第１の動作のセットの投票を受け取らせ、
前記投票に少なくとも一部基づき、前記第１の動作が好ましいかを特定させる、請求項１２に記載のシステム。
【請求項１５】
コスト係数基づき、前記第１の推定コストと前記第２の推定コストとを比較させ、前記コスト係数は、前記第１のコンピューティングノード及び前記第２のコンピューティングノードの相対的性能特性に少なくとも一部基づく、請求項１１に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
関連出願の相互参照
本出願は、２０１２年１１月３０日に出願された米国特許出願第１３／６９１，２１３号の利益を主張し、本開示は、その全体が参照により本明細書に組み込まれる。
【０００２】
多くの場合、多数のプロセッサおよび大きいメモリバンクを有する単一サーバではなく、多くの小さいコンピュータを用いて大きいデータベースを実装することが望ましい。これらの小さいコンピュータは、最も強力なサーバとは対照的に、それらが比較的安価であり、容易に取得され、容易に交換可能であることにより、コモディティハードウェアと呼ばれることが多い。しかしながら、コモディティハードウェアを使用する利点にもかかわらず、拡張可能かつ効率的な大きいデータベースを作り出すことは、依然として困難な試みである。
【０００３】
コモディティハードウェアで大きいデータベースシステムを実装するための１つの技術は、シャードを利用することを含む。一般論として、シャードは、より大きいコンピュータの問題のごく一部の解決を担うコンピューティングシステムである。例えば、シャードが大規模なデータ管理システムに使用されるとき、表は、行によって水平な区画として既知であるものに分割され得る。各シャードは、区画を管理し、その区画に関係する要求およびコマンドに応答する。この手法は、コストを減少させ、従来のデータベースシステムと比較されるときにより良い性能を有することができる。
【０００４】
しかしながら、シャードベースのシステムは、最適化することが困難であり得る。各シャードは、そのシャードで動作するクエリのための実行計画を生成することができるクエリオプティマイザを有する独立したデータ管理システムを含むことができる。実行計画は、そのシャードでの実行に対して局所的に最適化され得るが、必ずしもすべてのシャードにわたって最適化されない。性能特性と各シャードによって管理されたデータにおける差により、１つのシャードで効率的に動作する計画が、別のもので不十分に動作する可能性がある。
【図面の簡単な説明】
【０００５】
【図１】大域的クエリ最適化を利用するシャードベースのシステムの一実施形態を示す。
【図２】リーダー指名および比較を用いて大域的に最適化された実行計画を選択するための一実施形態を示す。
【図３】順次評価によって大域的に最適化された実行計画を選択するための一実施形態を示す。
【図４】投票プロセスによって大域的に最適化された実行計画を選択するための一実施形態を示す。
【図５】中央権限によって大域的に最適化された実行計画を選択するための一実施形態を示す。
【図６】比較のための実行計画情報を通信するためのデータ構造の一実施形態を示す。
【図７】実行計画が実行エンジンによって使用されることを可能にするのに十分な実行計画情報を通信するためのデータ構造の一実施形態を示す。
【図８】コスト調整を用いたコスト比較の一実施形態を示す。
【図９】実行計画におけるステップの個々の調整を用いたコスト比較の一実施形態を示す。
【図１０】結果として生じる実行計画が所望の大域的に最適化された実行計画と一致するように、ヒントを使用してクエリを修正する一実施形態を示す。
【図１１】実行エンジンおよび局所的オプティマイザを有するコンピューティングノードとともに大域的最適化プロセスを利用するためのシステムを使用する一実施形態を示す。
【発明を実施するための形態】
【０００６】
以下の開示は、データベースシステム、状態機械、ワークフローエンジンなどとして動作する複数のシャードにわたって最適化される実行計画の生成を対象とする。様々な実施形態では、各シャードは、シャードで動作する実行エンジンによる実行のために、関連したコスト係数で局所的に最適化された実行計画を生成する。コスト係数は次に、システム全体でその効果を考慮して最適化される計画を選択するように、他の実行計画と関連付けられたコスト係数と調整および比較され得る。コスト係数に対する調整は、とりわけ実行計画を生成したシャードによって収集された統計値、他のシャードによって生成された統計値、およびシャードの相対的な性能特性に基づいてもよい。コスト係数の比較は、中央権限による順次比較、投票、決定などを含む様々な技術によって実施され得る。
【０００７】
図１は、大域的最適化プロセスの一実施形態を示す。１つ以上のクライアントアプリケーションは、インターネット等のネットワーク１００を介してシャードベースのシステムに接続される。クライアントアプリケーションは、ネットワーク１００を介してシステムにクエリ１０２を送信する。クエリという用語は、例えば、データを返し、データを変更し、またはコンピューティングプロセスもしくはデバイスの状態を変更させ得るコンピューティング動作を呼び出す任意のタイプの要求またはコマンドを指すように本明細書全体にわたって使用される。クエリ１０２は、特定のシャード１１８に方向付けられてもよく、または任意のリダイレクション構成要素１０４によってそこに経路指定されてもよい。例えば、シャード１１８で動作する実行エンジン１２０は、クエリを受信および処理することができる。様々な非限定的実施形態では、実行エンジンは、データベース、状態機械、またはワークフローエンジンであり得る。実行エンジンは、クエリを実行するように命令のセットを実施する。同じクエリを実行することができる任意の数の代替的な命令のセットがあってもよく、各セットが異なるコストを有する。様々な非限定的な例では、コストという用語は、命令または命令のセットを実施するために必要とされる時間、消費されるＣＰＵサイクルの数、ワーキングセット、メモリ容量、キャッシュ容量、記憶デバイスの読み出しおよび書き込み性能などを含むことができる。コストはまた、データセット内の行の数、または重複データの量などの係数によって影響を受け得る。クエリを実行するコストを減少させるために、実行エンジン（時にはクエリオプティマイザとして既知の構成要素を介する）は、クエリを実行する予測コスト、すなわち、推定コストを最小限にするか、または減少させる試みに基づいて、局所的に最適化された実行計画を生成することができる。しかしながら、この計画は、単一のシャードで使用するのに好ましくてもよいが、必ずしもシステム全体が最適化されない。しかしながら、フロントエンドモジュール１２２は、通信構成要素１２４を介して計画情報およびクエリ統計値を他のフロントエンドモジュール１１０および１１６と共有することができる。通信構成要素１２４は、シャード間の計画情報の通信を調整するか、または容易にし、大域的最適化経路を決定するように必要に応じて計画情報およびクエリ統計値に調整を提供し、大域的に最適化された計画の選択を可能にする。大域的に最適化されるという用語は、使用が好ましく、かつ必ずしも数学的または確定的に最適な計画を記述しない計画を指すことに留意されたい。
【０００８】
本明細書に記載される他の実施形態は、シャードベースのシステムの性能を最適化するように、アプリケーションがヒントを使用することを可能にする。一実施形態では、システムは、クエリ内でクエリがシャードでどのように実行されるかを変更する命令をシャードに送信することをアプリケーションに含めさせる。別の実施形態では、システムは、クエリを実行するために使用される実行計画を直接制御する命令をアプリケーションに含めさせ得る。
【０００９】
さらなる実施形態は、データベース性能を最適化するためのヒントおよび提案を技術者に提供する。例えば、好ましい実行計画に関するヒントを受信した後、ソフトウェア技師は、クエリオプティマイザに対する提案を含む修正されたクエリを発行するように、アプリケーションプログラムコードを変更し得る。これらの提案は、クエリオプティマイザが好ましい実行計画に従うように、クエリオプティマイザによって生成された計画に影響を与える。
【００１０】
本開示の様々な態様は、ある特定の実施例および実施形態に関して本明細書に記載され、これは、図解することを意図し、本開示を限定することを意図しない。本明細書に提示される主題は、コンピュータ可読記憶媒体などの、コンピュータプロセス、コンピュータ制御装置、コンピューティングシステム、または製造物品として実装され得ることが理解されるべきである。本明細書に記載される主題は、１つ以上のコンピューティングデバイスで実行するプログラムモジュールにおいて一般的に提示されるが、当業者であれば、他の実装形態が他のタイプのプログラムモジュールと組み合わせて実施され得ることを認識するであろう。一般的に、プログラムモジュールとしては、ルーチン、プログラム、構成要素、データ構造、ならびに特定のタスクを実施するか、または特定の抽象データ型を実装する他のタイプの構造が挙げられる。
【００１１】
当業者であれば、本明細書に記載される主題が、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブル家庭用電化製品、ミニコンピュータ、メインフレームコンピュータ、ハンドヘルドコンピュータ、携帯情報端末、電子書籍リーダー、携帯電話デバイス、特殊目的のハードウェアデバイス、ネットワーク機器などを含む、本明細書に記載されるものを超える他のコンピュータシステム構成で実践されるか、またはそれらと併用され得ることも理解するであろう。本明細書に記載される実施形態はまた、タスクが、通信ネットワークを通じて結合される遠隔処理デバイスによって実施される分散型コンピューティング環境で実践され得る。分散型コンピューティング環境では、プログラムモジュールは、ローカルおよび遠隔メモリ記憶デバイスの両方に位置することができる。
【００１２】
本明細書内では、この一部を形成し、かつ図解、特定の実施形態、または実施例として示す添付の図面に対して参照が行われる。本明細書の図面は、一定の比率の縮尺で描かれない。同様の番号は、いくつかの図を通して同様の要素を表す。
【００１３】
大量のデータの管理は、共通のコンピューティング問題である。この問題に対する手法は、大きいデータのセットをより小さいセットに分割することに関係し、これは、比較的安価なコンピューティングデバイスによって管理され得る。各コンピューティングデバイスはまた、それに割り当てられたデータのセットで動作するクエリに応答することに関与し得る。各コンピューティングデバイスによって管理されたデータが共通のレイアウト、またはスキーマを共有する場合、同じクエリまたは意味的に均等な形態のクエリは、コンピューティングデバイスのいずれかまたはすべてに適用され得る。加えて、クエリを解決するための同じ順序のステップは、コンピューティングデバイスのすべてで使用するために選択され得る。実行計画と呼ばれ得るこの順序は、クエリを満たすのに必要とされる動作のセットを記述する。順序は、個々のコンピューティングデバイスへのその影響に基づいて選択され得る。しかしながら、全体的なデータ管理システムの性能は、順序が全体的なデータ管理システムへのその影響（すなわち、応答時間、ワーキングセット、ＣＰＵサイクルなどの様々な係数に関するコスト）に基づいて、かついずれか１つのコンピューティングデバイスへのその順序の影響だけでなく選択される場合に改善され得る。
【００１４】
大きいデータ管理システムを設計するとき、１つもしくは２つのより大きく、より高価なデバイスを使用するのではなく、多くのより小さいコンピューティングデバイス間の作業負荷を分割することが多くの場合に望ましい。より小さいコンピューティングシステムは各々、それがシステム全体の断片を表すことにより、シャードと呼ばれ得る。シャードは、ドメインと呼ばれ得るものに分類され、これは、作業負荷を集合的に管理するように組織化されたシャードの群である。シャードは、コモディティハードウェアコンピュータ、仮想マシン、コンピューティングクラスタ、およびコンピューティング機器などの多種多様なコンピューティング環境で実装され得る。これらのコンピューティングデバイスまたは環境のいずれかは、便宜上、コンピューティングノードと呼ばれ得る。
【００１５】
典型的に、各シャードは、独自の専用のプロセッサ、メモリ、および記憶デバイスにアクセスできるデータベースシステム等の完全に独立した実行エンジンを動作する。このタイプの独立したアーキテクチャを利用するシステムは、良好な拡張性を有し、重要な構成要素を共有するシステムと比較してより弾力性がある。独立したアーキテクチャは、ドメイン内の個々のシャードが機能することを停止したとしても、システム全体が動作し続けることを可能にする。しかしながら、当業者であれば、純粋な独立したアーキテクチャからの逸脱が時々望ましいときがあり、または必要であることを理解するであろう。例えば、より大きいシステムを構成するシャードはしばしば、共通のネットワーク基盤を共有する。ネットワークはこの場合、単一障害点を表すが、それらはしばしば、記憶サブシステム等のエラーを起こしやすい構成要素と比較して比較的堅牢である。したがって、共通のネットワークの使用は、独立したアーキテクチャの利点の大部分を保持しながら、シャード間の通信を可能にする。
【００１６】
シャードベースのアーキテクチャを用いてデータ管理システムを構築するために多くの可能な手法が利用され得る。１つ手法では、データ表は、行によって区画され、各行の範囲は、特定のシャードに割り当てられる。シャードは、すべての要求を処理して、区画に割り当てられた値の範囲内に入る値を有するデータを取り出すか、または記憶する。この手法は、水平な区画と呼ばれる。一例として、顧客情報を含む表を考慮されたい。顧客の表は、顧客の苗字に基づいて水平に区画され得る。２シャードドメインでは、苗字が「Ａ」〜「Ｍ」で始まる顧客は、第１のシャードに割り当てられてもよく、苗字が「Ｎ」〜「Ｚ」で始まる顧客は、第２のシャードに割り当てられてもよい。
【００１７】
いくつかの場合、ドメインによって維持されるすべての表は、水平に区画される。しかしながら、多くの他の構成が可能である。いくつかの表は、水平に区画され得るが、他の表は、シャード間で複製される。他の場合、水平に区画された表は、ハードウェア障害に対する保護の手段として複製される。
【００１８】
表が水平に区画されるとき、各シャードは、同一のスキーマを有するが異なるデータのセットを含む表を提供する。換言すれば、各シャードで提供された水平に区画された表は、同じ列のレイアウトを共有するが、異なるデータの行を含む。各シャード上の表が共通のスキーマを共有するため、クエリは、クエリが最終的に実行する１つまたは複数のシャードのどれかに関係なく書き込まれ得る。
【００１９】
共通のスキーマを活用するために、必要とされるデータを含む１つまたは複数のシャードにクエリを経路指定するための手段が提供され、複数のシャードは、要求が２つ以上の水平な区画に及ぶデータに関係する場合に関係し得る。正しいシャードにクエリを経路指定する手法の３つの非限定的な例は、以下の通りである。第１の手法は、クエリを適切なシャードに経路指定する集中型ホストに関係する。集中型システムがクエリを受信するとき、これは、クエリ内に潜在的に関係する区画の範囲を決定する。これは次に、これらの区画を提供し、結果をアセンブルし、かつそれらをクライアントに転送するシャードにクエリを転送することができる。第２の手法では、任意のシャードが要求を受信し、先程記載した同様の様式でそれを処理することができる。アプリケーションは最初に、要求されたデータを含む可能性が最も高い区画を提供するシャードにこの要求を送信する。第３の手法では、アプリケーションは、シャードおよび区画方式の両方を十分に認識し、別個のクエリを各々要求されたシャードに直接送信する。
【００２０】
データ管理システムがクエリを実行するとき、これは、表走査、インデックス走査、およびハッシュ表索引等の一連のステップを実施することができ、これは、クエリに対する結果を生成するために必要とされる内部動作である。集合的に、これらのステップは、クエリを実施するためにデータ管理システムによって取られる経路を記述する。より一般的に、それらは、クエリを実施するために実行エンジンによって取られる命令のセットであり、実行計画という用語によって本明細書に、または計画という用語によって簡潔さのために言及される。データベースにおいて、実行計画は、例えば、アクセス経路またはクエリ計画と呼ばれる。多くの場合、同じクエリのための多くの異なる可能な実行計画がある。各実行計画は、同じ結果を生成することができるが、それらの性能特性は、大きく異なり得る。クエリという用語は、実施されるデータの要求またはコマンドを指すことに留意されたい。さらに、単一のクエリは、多くの異なる形態を有することができ、これらのすべては、同じ実行計画を用いて実行され得る。例えば、同じクエリは、異なる言語、様々なテキスト形式を用いて表されてもよく、あるいは、よくあることだが、コマンドが実行されるまで供給されないパラメータ化された値を含んでもよい。これらの場合のすべてに対して、同じ実行計画は、あらゆる形態のクエリを実行するために使用され得る。
【００２１】
実行計画はまた、状態機械またはワークフロープロセッサ等の他のタイプの実行エンジンによって使用される。例えば、状態機械は、各関連したコストを持つ一連の可能な状態遷移を含むことができる。様々な経路は、状態「Ａ」から状態「Ｚ」に移動するときに横断されてもよく、これらの各々は、異なるコストを有することができる。
【００２２】
特定のシャードでクエリを実行するための好ましい計画を決定するために、クエリオプティマイザとして既知の構成要素は、以下の各々可能な実行計画の予測されたコストを評価する。実行計画における各ステップは、予測（すなわち、推定）コストと関連付けられ、ステップを実行するために必要な時間、または消費するコンピューティングリソースなどの要素を考慮する。実行計画を実施する総予測コストは、その構成要素のステップのコストに基づいて計算され得る。ブランチおよびループは、実行される特定のブランチの可能性を考慮し、かつそれに応じてコスト係数を調整することによって構成され得る。典型的に、総予測コストは、無名スカラー値または時間ベースの推定値として表される。予測コストという用語はまた、推定コストと呼ばれてもよく、必ずしも実際に生じるコストの正確な予測ではないことに留意されたい。
【００２３】
予測コストが既知であると、最適化された実行計画は、最も安価な総コストで実行計画を選択することによって選ばれ得る。コストに加えて他の要素も考慮され得る。例えば、全体的な計画があまり効率的ではない場合であっても、初期の結果のセットを迅速に返す計画を選択することが場合によっては望ましい。
【００２４】
コスト計算の正確性は、様々な統計値を使用することによって改善され得る。これらは、表における行の数、または列における固有値の数などの値を含むことができる。統計値はまた、同じ実行計画の事前の実行に関連した測定値を含むことができる。データは、所定の実行計画を実行するのに費やした総時間など、一般的な性質であってもよく、または表走査を実施することに関係するディスク読み出しの数など、より詳細であり得るくてもよい。さらに、統計値は、実行計画のどのブランチが実際には最も一般に実行されるか反映し、コスト予測の精度を改善することができる。
【００２５】
しかしながら、この手法の有効性は、シャードベースのシステムに限定される。各シャードは独立しており、独自のクエリオプティマイザおよび統計値のセットを有する。したがって、所定のシャードでは、クエリオプティマイザは、局所的に最適化されるが必ずしも大域的に最適化されない実行計画を生成する。大域的に最適化された計画は、各シャードでの所定の実行計画のコスト等の係数、およびそれが各シャードで実行される相対頻度を考慮し全体的なシステム性能を最大化する。しかしながら、局所的に生成された計画の予測コストは、それらが生成されたシステムの特性を反映するだけであるため、誤解を招く恐れがあり得る。
【００２６】
大域的に最適化された実行計画を識別する１つの一般的な手法は、ドメイン内の各シャードで局所的に最適化された計画を生成することと、次に、大域的に最適化されると決定するように各計画のコストを比較することとに関係する。様々な手法は、各計画の予測コストの直接比較を実施すること、または本明細書に開示される比較のための他の実施形態など、コストを比較するために使用され得る。様々な手法はまた、各シャードが局所的に最適化された実行計画を生成するときに、計画に関する情報がどのように共有されるか、および大域的に最適化された計画が他のシャードによってどのように利用されるかなど、大域的に最適化された実行計画を決定する他の態様に関して利用され得る。
【００２７】
一実施形態では、シャードは、リーダーとして指定され、その局所的に最適化された実行計画に関する情報をブロードキャストする。別のシャードがブロードキャスト計画を独自の計画と比較し、独自の計画が優れていると気付く場合、これは、リーダーとして独自の計画を指定し、独自の計画に関する情報をブロードキャストすることができる。このプロセスは、シャードが現在のリーダーの計画より優れている計画を提供することができなくなるまで続く。このプロセスの最後の先導的計画は、大域的に最適化されると見なされる。
【００２８】
図２は、大域的最適化プロセスの一実施形態を示す。一連の動作として示されるが、当業者であれば、様々な実施形態が示される動作を追加、削除、再整理、または修正し得ることを理解するであろう。動作２００では、シャードは、リーダーとして現在指定された実行計画に関する情報を受信する。この情報は、図４によって記載されるデータ構造に類似し得る。
【００２９】
動作２０２では、シャードは最初に、先導的計画を独自の局所的に生成された計画と比較するべきであるかを決定する。いくつかの場合、先導的計画のための情報が受信されるときに局所的計画が生成されていない。このような場合、いくつかの手法が取られ得る。様々な非限定的な例は、新しい計画を直ちに生成すること、または比較なしに先導的計画を受諾することを含む。いくつかの実施形態では、シャードは、いくつかの後の時点で独自の計画を生成し、次いでそれを現在の先導的計画と比較しながら、最初に先導的計画を利用し始めることができる。あるいは、シャードは、比較のための実行計画を決して生成しないように構成されてもよい。
【００３０】
比較が実施されるべきであると動作２０２が決定する場合、シャードは、現在の先導的計画に対応するクエリのための独自の計画を生成するか、または取り出す。動作２０４では、２つの計画は次に、本明細書に記載される実行計画を比較するための実施形態を含む様々な手段のうちの１つを用いて比較される。動作２０６で局所的計画が優れている場合、シャードは、動作２１０で独自の局所的に生成された計画を使用し始めるか、またはそれを使用し続ける。この計画は、動作２１２でリーダーとして指定され、この計画に関する情報は、動作２１４で他のシャードにブロードキャストされる。動作２０６に戻ると、局所的に生成された計画が優れていなかった場合、シャードは、動作２０８で独自の計画ではなく先導的計画を採用する。
【００３１】
比較が実施されるべきではないと動作２０２が決定する場合、シャードは、直ちに先導的計画を使用し始める。この手法は、局所的計画が生成される間にクエリ実行を停止する必要なく、シャードが既存の計画を使用することを可能にするため、有利であり得る。シャードは次に、シャードがそうでなければ動作していないときなど、後の時点で独自の計画を生成することができる。
【００３２】
別の実施形態では、リーダーは、シャードによって生成された実行計画を連続的に評価することによって選択され得る。最初にリーダーとして指定されたシャードは、リーダーの実行計画を独自の計画と比較する第２のシャードに直接、実行計画情報を送信することができる。その計画が優れていると第２のシャードが決定する場合、それは、それ自体をリーダーとして指定し、計画に関する情報を第３のシャードに送信する。そうでなければ、第２のシャードは、元の実行計画情報を第３のシャードに転送する。このプロセスは、各シャードによって保持された実行計画が評価されるまで続き、この順序における最後のシャードは、最終の先導的計画を大域的に最適化された計画として指定する。
【００３３】
図３は、順次評価による大域的最適化の一実施形態を示す。第１のシャードは、生成された第１の計画が大域的に最適化された計画であると仮定することにより、動作３００で局所的に最適化された実行計画を生成し、かつ計画に関する情報を第２のシャードに送信する。第２のシャードは、動作３０２で独自の計画を生成するか、または対応するクエリのための予め生成された計画を取り出す。動作３０４では、コスト係数は、計画の推定コスト間の確実な比較を可能にするように決定され得る。外部から受信され、かつ局所的に生成された計画は次に、動作３０４で比較される。第２のシャードは次に、動作３０６で好ましい計画を次のシャードに転送し、このプロセスは、３０８ですべてのシャードが実行計画を評価することができ、かつ大域的に最適化された計画が決定されるまで繰り返す。動作３１０では、シャードは、大域的に最適化された計画を利用して取得および開始する。
【００３４】
さらなる実施形態は、投票プロセスによる大域的クエリ最適化を実施する。各シャードは、様々な係数に基づいて多くの投票を割り当てられてもよく、リーダーとして選択される独自の計画のためにこれらの投票を行ってもよい。シャードに利用可能な投票の数に影響を与え得る係数としては、シャードの実行計画のコスト、それぞれのクエリが実行される頻度、およびシャードのハードウェアの性能特性が挙げられる。
【００３５】
図４は、投票プロセスによって大域的に最適化されたクエリを選択するためのシステムを示す。各シャード４００は、様々なサブモジュールが統合され得るフロントエンドモジュール４０２を含む。当業者であれば、モジュールという用語がメモリ内に記憶され、かつプロセッサによって実行された回路またはソフトウェア命令等の手段を用いることにより実装された機能性の抽象的な単位を指し得ることを理解するであろう。モジュールは、別のプロセス、プログラム、または回路に統合され得る。モジュールはまた、機能性のサブユニットとして別のモジュールに組み込まれ得る。
【００３６】
一実施形態では、投票計算器モジュール４０４は、フロントエンドモジュール４０２に統合される。投票計算器モジュール４０４は、統計モジュール４０８を参照することによって利用可能な投票の数を決定し、これは次に、データベース４１０およびシャードのオペレーティングシステム４１２から統計値を取得することができる。一実施形態では、投票の数は、クエリのコスト、シャードのハードウェアの性能特性、シャードで記憶されたデータの量およびタイプ、ならびにクエリがシャードで実行される相対的頻度のうちの１つ以上を参照してクエリごとで決定される。
【００３７】
投票調整器モジュール４２０は、投票プロセスを開始する。図４に別々に示されるが、投票調整器モジュールは、フロントエンドモジュール４０２等の任意のモジュールに統合され得る。そうだとしたら、各シャードは、投票調整器モジュール４２０を含み得るが、１つのみが任意の所定の時間でアクティブである。
【００３８】
投票プロセスが開始すると、各投票モジュール４０６は、投票計算器モジュール４０４から利用可能な投票の数を取得する。投票モジュール４０６は次に、投票情報を投票調整器モジュール４２０に送信する。投票情報は、投票が成功すれば、他のシャードが実行計画をその後要求することを可能にするのに十分な情報を含む。この情報は、シャード識別子、実行計画識別子、およびその実行計画に対して行われる投票の数を示す値を含むことができる。前述のように、投票モジュール４０６が行い得る投票の数は、投票計算器モジュール４０４によって決定された量によって限定される。
【００３９】
各投票モジュール４０６がその投票を行うと、投票調整器モジュール４２０は、大部分の投票でクエリ計画を選択する。いくつかの実施形態では、２つ以上の投票モジュール４０６は、同じ実行計画に対する投票を行うことができる。そうだとしたら、それらの投票は、ともに追加され、その値は、獲得計画を決定するために使用され得る。
【００４０】
獲得計画を決定した後、投票調整器モジュール４２０は、各シャードに結果を通知し、計画情報モジュール４３０を介して計画情報を取得し、かつこの情報を各シャードに転送することによって、計画を用いて開始するためにシャードに十分な情報を提供する。他の実施形態は、シャードに好ましい計画を通知し、かつ好ましい計画の使用を開始するための異なる手段を利用することができる。
【００４１】
大域的に最適化された実行計画はまた、中央権限によって決定され得る。一実施形態では、各シャードは、その実行計画に関する情報を、各計画を評価および比較する中央権限に送信する。中央権限は、大域的に最適化された計画を決定し、かつその計画に関する情報を各シャードにブロードキャストする。
【００４２】
図５は、中央権限を利用することによって大域的に最適化された実行計画を決定する一実施形態を示す。シャード５００は、最適化情報５２０を中央権限５１０に送信する。最適化情報は、クエリ計画情報、クエリ統計値、およびハードウェア特性情報のうちの１つ以上を含むことができる。実行計画情報は、図６に示されるものに類似するデータ構造によって表され得る。中央権限５１０は次に、本明細書に記載されるように、実行計画のコストを比較するための様々な実施形態に従って、各計画のコストを比較し、最も安価な計画を選択することができる。
【００４３】
最適化情報５２０のうちのいくつかは、コスト比較より前の時間に送信され得る。中央権限５１０は、各シャード５００からの係数を積極的に取り出すことができる。あるいは、各シャード５００は、様々なトリガー係数に基づいて最適化情報５２０の態様を送信することができる。様々な実施形態では、関連する要素は、例えば、定期的に、または情報が大幅に変更したときに送信され得る。
【００４４】
様々な実施形態では、通信機構は、実行計画に関する情報を分布させるために利用されなければならない。大域的に最適化された計画の選択が進行中である間、計画に関する限定された量の情報を送信することが好ましくてもよい。したがって、送信された情報は、計画の間の比較に必要とされるものに限定され得る。ブロードキャストまたは２地点間通信など、情報を送信するために様々な手段が利用され得る。大域的に最適化された計画が選択された後、計画を利用されることをできるように、より完全な情報が必要とされ得る。他の手段の中でも、ブロードキャストおよび２地点間通信の両方は、この情報を通信するために利用され得る。しかしながら、比較的より大量のデータが関係していることにより、２地点間通信が好ましくてもよい。
【００４５】
図６は、実行計画を比較するのに有用な情報を含むデータ構造６００の一実施形態を示す。様々な実施形態は、シャード間の計画情報を送信するために、この構造または類似の構造を利用することができる。当業者であれば、データ構造を含む要素が単に例示であることを認識するであろう。代替の実施形態は、本明細書に記載される要素を削除、置換、または追加することができる。
【００４６】
ソース識別子６０２は、実行計画情報のソースを識別し、これは、計画が生成されたシャードであり得る。識別子は、大域的に一意の識別子、ユニフォームリソースロケータ、またはインターネットプロトコルアドレス等のソースを識別するのに役立つ任意のタイプの値であり得る。一実施形態では、送信者が好ましい計画を有すると受信シャードが決定すると、これは、６０２によって識別されたソースからの計画に関する追加情報を要求することができる。
【００４７】
実行計画識別子６０４は、実行計画を識別する。これは、大域的に一意の識別子等の実行クエリ計画を識別するのに役立つ任意のタイプの値であってもよく、４０２によって識別されたソースから識別された実行計画に関する完全な情報を取得する要求で使用され得る。
【００４８】
クエリ識別子６０６は、計画が適用されるクエリを識別するのに役立つ。これは、大域的に一意の識別子またはクエリ自体のテキストなど、クエリを識別するのに役立つ任意のタイプの値であってもよい。
【００４９】
ドメイン識別子６０８は、シャードが属するドメインを示す。これに関して、ドメインは、大域的に最適化されたクエリを決定することに関与する一群のシャードを指す。典型的に、ドメインは、所定の表に対して水平な区画のすべてに対応するが、他の配列が有利であり得る。ドメインを構成するシャードは、区画された表を管理することに関係するシャードのすべてを必ずしも含まない。
【００５０】
コスト表示器６１０は、計画のコストの測定値を提供する。コスト表示器は、単純なスカラー値、スカラー値の１つ以上のベクトル、またはコスト情報を伝達する他の手段であってもよい。一実施形態では、コスト表示器は、実行計画を含むステップのセットにおけるステップに対応する値のベクトルである。
【００５１】
図７は、より完全な実行計画情報を送信するためのデータ構造７００の一実施形態を示す。この構造は、シャードが対応するクエリを実行するように実行計画を使用し始めることを可能にするのに十分な情報を含むことを意図する。一般的に、この情報は、計画を比較するのに必要とされる情報より送信するのにコストがかかる。したがって、これは、最適化されると決定された後のみ、実行計画に関する詳細な情報を送信することが好ましくてもよい。
【００５２】
データ構造７００は、実行計画のソースの識別子７０２を含むことができ、これは、大域的に一意の識別子、ユニフォームリソースロケータ、またはインターネットプロトコルアドレス等のソースを識別するのに役立つ任意のタイプの値であり得る。第２の識別子７０４は、計画自体を識別し、大域的に一意の識別子等の計画を識別するのに役立つ任意のタイプの値であり得る。第３の値７０６は、計画が適用されるクエリを識別する。これは、大域的に一意の識別子またはクエリ自体のテキストなど、クエリを識別するのに役立つ任意のタイプの値であってもよい。
【００５３】
加えて、データ構造は、実行計画をシャードのクエリオプティマイザにロードするのに十分な実行計画を詳細に表すメタデータ７０８を含むことができる。これは、実行計画詳細７１０を含むことができる。いくつかの実施形態では、メタデータは、アプリケーションプログラミングインターフェースを介してデータベースに提供され得る。データベースは、プログラミングインターフェースが呼び出された後、供給された実行計画を用いて対応するクエリを処理する。
【００５４】
２つの実行計画の予測コストを比較するために様々な手段が利用され得る。いくつかの状況では、調整せずにクエリオプティマイザによって提供されたコスト統計を直接比較することが有利であり得る。しかしながら、様々な係数は、未調整コスト比較を誤解させる場合がある。例えば、シャードのうちの１つでの比較的高速のＣＰＵ性能は、関連した実行計画がより遅いプロセッサを有するドメイン内のシャードで成績が悪い場合であっても、シャードのクエリオプティマイザによって生成されたコスト推定値を減少させることができる。
【００５５】
一実施形態では、各実行計画のコスト統計は、実行計画を生成したシャードの性能特性に基づいて調整される。スカラーコスト統計は、他のシャードとの比較に好適な調整されたコスト統計を生成するために調整係数を乗じ得る。調整係数は、シャードの全体的な性能特性に基づいてもよい。ＣＰＵ速度、メモリ容量、記憶デバイス読み出し性能、記憶デバイス書き込み性能、記憶デバイスシーク時間、行カウント、およびデータの重複など、多数の性能およびデータベース測定基準が利用され得る。
【００５６】
図８は、コスト比較をすることができる一実施形態を示す。各シャード８００は、関連した未調整コスト８０２で実行計画を生成する。各シャードは、クエリ統計８０６と性能特性８０８とのいくつかの組み合わせに基づいて調整係数８０４を計算する。技術者による手動調整などの他の係数もまた、計算に使用され得る。典型的に、未調整コスト８０２は、調整されたコスト８１０を生成するために調整係数８０４を乗じるが、他の数学または論理演算が調整されたコスト８１０を生成するために利用され得る。各実行計画からの調整されたコスト８１０は次に、結果８２２を生成するために比較関数８２０によって比較される。
【００５７】
図９は、アクセス計画の個々の構成要素のコストが関係のある性能特性に基づいて調整される一実施形態を示す。このように、コスト調整は、コスト計算に影響を与える可能性がより高い特性に重みをつけることによってより正確に行われ得る。例えば、完全な表走査は、ＣＰＵ速度によるものよりシャードのディスクドライブの性能によって影響を与えられる可能性がより高い場合がある。したがって、表走査のコスト係数は、ＣＰＵの速度ではなくディスク性能に基づいて主に調整され得る。
【００５８】
実行計画９００は、様々な動作タイプ９０２〜９１４を含む。各動作タイプは、そのタイプのすべての動作の総コストを反映する関連した未調整コストを有する。各未調整コストは、関連したコスト調整係数９３０の使用によって調整され、関係のある統計値および性能特性９２０を参照して決定される。決定に使用された統計値のセットおよび性能特性は、調整係数が関連付けられる動作タイプによって異なり得る。例えば、ハッシュアクセス動作タイプ９１０と関連付けられる調整係数９３０は、ＣＰＵ速度９２２のみに、または、主に二次的考察としてワーキングセット９２６とともにＣＰＵ速度９２２に基づいて調整され得る。多くの他のタイプの測定基準も考慮され得る。物理的メモリまたはＣＰＵ速度の量などの比較的静的測定値に加えて、動的性能測定基準が収集され、かつ使用され得る。様々な非限定的な例は、ワーキングセット、ＣＰＵ使用率、平均ディスク待ち行列の長さなどである。実行エンジンによって収集された性能測定基準も考慮され得る。データベースにおいて、様々な非限定的な例としては、キャッシュコヒーレンス測定値、平均ユーザセッション数、および様々なイベントログエントリが挙げられる。
【００５９】
様々な実施形態では、最適化された実行計画は、定期的に再計算される。再計算は、ドメイン内のシャードで条件を変更することにより望ましくありうる。例えば、動作中、シャードは、追加のデータを記憶し、場合により、シャードのドメインにわたって変更されたデータの分布をもたらすことができる。そうだとしたら、かつて大域的に最適化された実行計画であったものは、非効率になり得、かつ大域的に最適化された実行計画の新しい決定が望ましくなる。
【００６０】
大域的に最適化された実行計画の新しい決定は、最初に利用されたものに類似の様式で進行し得る。一実施形態では、各シャードは、独自の局所的に最適化された実行計画を再計算し、かつ大域的に最適化された計画は、本明細書に記載される様々な実施形態に従って選択される。しかしながら、いくつかの場合では、局所的に最適化された計画のサブセットのみを再計算することが望ましくてもよい。一実施形態では、各シャードは、表の大きさ等のいくつかの特性のセットが閾値を超えて変化した場合にのみ、新しい局所的に最適化された計画を決定することができる。
【００６１】
大域的に最適化された実行計画の再計算は、様々なイベントまたは条件によって引き起こされ得る。例えば、これは、１週間に１回など、定期的に引き起こされ得る。あるいは、これは、シャードのうちの１つ以上が動作していないときに適時的に行われてもよい。一実施形態では、シャードがそうでなければ動作していないとき、これは、その局所的に最適化された実行計画を再計算し、局所的に最適化された計画のコストが大幅に変更した場合にのみ、大域的に最適化された計画の再計算を引き起こす。大域的に最適化された計画の再計算のための他のトリガーイベントは、シャードで記憶されたデータの量が大幅に変更したとき、またはシャードのハードウェア構成が変更したときを含む。
【００６２】
シャードベースのアーキテクチャの１つの利点は、追加の容量が必要とされるときに新しいシャードが追加され得ることである。しかしながら、統計値のキャッシュを蓄積し、新しい実行計画を生成する間、新しいシャードは、最適に満たずに実施することができる、。大域的に最適化されると既に決定された実行計画で自動的に投入されることが新しいシャードに有利である。その後、新しいシャードは、局所的に最適化された実行計画を計算することができ、大域的に最適化された実行計画を決定するために本明細書に記載される実施形態は次に、新しいシャードと併せて実施され得る。
【００６３】
いくつかの例では、クライアントアプリケーションは、システム内のシャードにわたって概ね均等に実行されるクエリを発行する。これは、アプリケーションが各シャードに割り当てられた水平な区画にわたって均等に分布されるデータを要求するときに生じる傾向がある。他の場合では、クライアントアプリケーションは、単一区画に向かって大きく歪んだクエリを発行することができる。後者の場合では、全体的なシステム性能は、個々のアプリケーションがその代わりに、実行されたクエリのための大域的に最適化された実行計画をオーバーライドすることを可能にすることによって改善され得る。
【００６４】
他の実施形態では、システムは、クライアントアプリケーションにヒントを供給することができる。ヒントは、実行計画の生成およびクエリ自体の実行に影響を与える提案を含むことができる。例えば、ヒントは、特定のクエリが実行されるとき、完全な表走査がインデックス走査より好ましいことを提案することができる。多くの他のタイプのヒントが可能であり、かつ企図される。クライアントアプリケーションに供給されるヒントは、様々な手段によって決定され得る。一実施形態では、潜在的なヒントは、コスト削減に基づいて評価される。ドメインにわたって繰り返されたクエリ実行のコストを最適化するヒントが、クライアントアプリケーションに利用可能にされる。クライアントは次に、それがクエリを実行するときに供給されたヒントを含むことができる。シャードがクエリを受信すると、これは、ヒントを処理し、ドメインの最適化された性能と一致する様式でクエリを実行する。当業者であれば、先程記載された実施形態が本出願に記載される他の実施形態に加えて、またはその代わりに実践され得ることを認識するであろう。
【００６５】
クライアントアプリケーションは、様々な方法でヒントを受信することができる。ブロードキャストシステムは、１つ以上の関係のあるクライアントアプリケーションにヒントを送信するために利用され得る。この手法は、新しい、または異なるヒントが生成されるときに更新をリブロードキャストすることができる利点を有する。あるいは、各アプリケーションは利用可能なヒントを直接要求することができる。特定のハードウェアおよびソフトウェア環境に好適な追加の実施形態も企図される。
【００６６】
さらなる実施形態では、ヒントは、シャードベースのシステムから技師および他の技術スタッフに供給され得る。一実施形態では、シャードは、その計画が現在選択された大域的に最適化された計画より大幅に安価であることを示すヒントを供給し、大域的に最適化された計画の再計算またはそのオーバーライドが望ましくてもよいことを提案することができる。ヒントは、様々な方法でユーザに送信され得る。非限定的な例としては、対象とするユーザにアクセス可能なハードドライブに記憶されること、電子メールまたはメッセージングを介して送信されること、または後の処理のために列を成して配置されることが挙げられる。
【００６７】
他の実施形態では、システムは、クライアントアプリケーションプログラムの最適化を可能にするソフトウェア技術スタッフによる使用のためにヒントを供給する。ヒントは、技師がクライアントアプリケーションからシャードベースのシステムに送信されたクエリを手動で修正することを提案することができる。例えば、ヒントは、大域的に最適化された実行計画の決定に従って、インデックス走査が特定のクエリに対する完全な表走査より好ましいことを提案することができる。ソフトウェア技師は次に、アプリケーションを修正し、所望の大域的に最適化された計画に適合する可能性がより高いクエリをそれに発行させ得る。他の実施形態では、ヒントはまた、クエリを実行する他の態様を変更するために使用され得る。例えば、ヒントは、クエリが特定のシャードで実行されるべきであるか、または特定のシャードが回避されるべきであるかを、直接的または間接的に示すことができる。ヒントはまた、クエリが複数のシャードにわたって実行を必要とすることを示し、クエリの再構築が望ましいことを人員に提案してもよい。
【００６８】
図１０は、この手法の一実施形態を示す。一連の動作として示されるが、当業者であれば、動作の順序が異なる場合があり、かつ動作が追加、修正、または削除され得ることを理解するであろう。
【００６９】
動作１０００では、シャードベースのシステムは、クライアントアプリケーションからのクエリを受信および処理する。大域的に最適化された実行計画は次に、動作１００２で生成される。しかしながら、シャードにクエリを直接採用させるのではなく、システムは、動作１００４で大域的に最適化された実行計画に関する情報を技術スタッフに送信することができる。この情報は、技師がアプリケーションに所望の修正を行うことを可能にするのに十分な実行計画の記述または説明を含むことができる。例えば、これは、最適化された実行計画の命令のセットおよび関連したコストの記述を含むことができる。
【００７０】
動作１００６では、システムは、動作１００４で提供された情報に従って修正されたクエリを受信する。新しいクエリ計画は次に、動作１００８で修正されたクエリに対して生成される。クエリに行われた修正により、新しい実行計画は、所望の大域的に最適化された計画と一致する様式で生成される。さらに説明するために、ヒントは、未修正計画がクエリオプティマイザによって処理されるときにそれがインデックス走査をもたらす場合であっても、大域的に最適化された実行計画がインデックス走査の代わりに完全な表走査を使用することを示すことができる。修正されたクエリは、完全な表走査が好ましいことをクエリオプティマイザに示す命令を含む。したがって、クエリオプティマイザは、完全な表走査を用いて実行計画を生成し、結果として得られたクエリは、所望の大域的に最適化された計画と一致する。新しいクエリが生成された後、クエリは、動作１０１０で、その計画を用いて実行され得る。
【００７１】
例示の目的のために、本明細書に記載される実施形態のうちのいくつかは、水平に区画されたデータを有するデータ管理システムを指す。しかしながら、当業者であれば、本開示の態様が従来のデータベースに関係しないシステムに適用され得ることを理解するであろう。例としては、これらに限定されないが、状態機械およびワークフローエンジンが挙げられる。図１１は、本明細書に記載される大域的最適化技術が適用され得る一実施形態を示す。第１および第２のコンピューティングノード１１００は、共通のコマンド１１２０を受信および処理することができる。コマンドは、それがドメイン内の複数のコンピューティングノードで実行され得、かつ総コストが推定され得る一連のステップに分解され得るならば、任意のタイプであり得る。状態機械およびワークフローエンジンは、これらの基準に適合するコマンドを処理するシステムの例である。双方とも関連した遷移を有する状態のセットからなる。クエリを実施することは、現在の状態からコマンドが実行された状態への遷移のセットを含む。コマンドの完全な状態に達することができるあらゆるシャードは、コマンドを処理することができ、そのようにするコストは、その状態に達するために必要とされるすべての遷移の推定コストに基づいて推定され得る。実行エンジンは、例えば、クエリオプティマイザによって最適化されるか、またはそうでなければ選択された好ましい計画の後に、所望の遷移のセットを生じさせることによってクエリを実施することができる。各シャードによって管理されたデータは、シャードのドメインがセット全体を集合的に管理するように、区画されたデータセットの区画を管理することができる。区画は、データのうちのいくつかまたはさらにはすべてがシャード間で複製されるように重複であり得る。データセットは、任意のタイプのデータを含み、これらに限定されないが、表、ベクトル、配列、グラフなどを含むことができる。
【００７２】
ステップの順序および予測コストは、局所的オプティマイザ１１０２によって決定される。比較モジュール１１３０は、実行統計、相対的ハードウェア性能特性、および各システムが共通のコマンドを実行する相対的頻度を参照して、２つの計画の予測コストを比較する。比較の結果は、好ましい実行計画１１４０であり、これは、好ましい実行計画１１４０と実行エンジン１１０４との間の連結矢印によって示されるように、実行エンジン１１０４によって利用され得る。ヒントをアプリケーションまたは技術支援スタッフに供給することなどとともに、好ましい計画を使用するための他の様々な実施形態も利用され得る。
【００７３】
前節に記載されるプロセス、方法、およびアルゴリズムの各々は、１つ以上のコンピュータまたはコンピュータプロセッサによって実行されたコードモジュールで具現化され、それによって完全または部分的に自動化され得る。コードモジュールは、ハードドライブ、ソリッドステートメモリ、光ディスクなど、任意のタイプの非一時的コンピュータ可読媒体またはコンピュータ記憶デバイスで記憶され得る。プロセスおよびアルゴリズムは、アプリケーション特有の回路に部分的または全体に実装され得る。開示されるプロセスおよびプロセスのステップの結果は、例えば、揮発性または不揮発性ストレージなど、任意のタイプの非一時的コンピュータストレージ内に持続的または別の方法で記憶され得る。
【００７４】
加えて、前述の実施形態のうちの１つ以上は、以下の付記を考慮して理解され得る。
１．第１の実行エンジンを動作させるように構成された第１のコンピューティングノードであって、第１の実行エンジンが、区画されたデータセットの第１の区画を含み、
第１のコンピューティングノードが、第１の実行エンジンでクエリを実行する第１の計画を決定するように動作可能な第１のクエリオプティマイザを動作させるように構成され、クエリが、区画されたデータセットに方向付けられる、第１のコンピューティングノードと、
第２の実行エンジンを動作させるように構成された第２のコンピューティングノードであって、第２の実行エンジンが、区画されたデータセットの第２の区画を含み、
第２のコンピューティングノードが、第２の実行エンジンでクエリを実行する第２の計画を決定するように動作可能な第２のクエリオプティマイザを動作させるように構成される、第２のコンピューティングノードと、
クエリを実行する第１の計画またはクエリを実行する第２の計画が、第１および第２の実行エンジンでクエリを実行するために使用されるべきであるかを決定するように構成されたオプティマイザと、を備える、システム。
２．実行エンジンは、データベースである、付記１に記載のシステム。
３．オプティマイザは、クエリを実行する第１または第２の計画が、クエリを実行する第１の計画を実行する第１のコスト、およびクエリを実行する第２の計画を使用する第２のコストを比較することによって使用されるべきであるかを決定するように構成される、付記１に記載のシステム。
４．オプティマイザは、クエリを実行する第１または第２の計画が第１および第２のコンピューティングノードの特性に基づいて、第１および第２のコストを調整することによって使用されるべきであるかを決定するように構成される、付記３に記載のシステム。
５．第２のコンピューティングノードは、クエリを実行する第１の計画を示す情報を受信するように構成される、付記１に記載のシステム。
６．第２のコンピューティングノードは、オプティマイザの決定に基づいて、クエリを実行する第１の計画を用いてクエリを実行するように構成される、付記１に記載のシステム。
７．クエリは、パラメータ化されたクエリである、付記１に記載のシステム。
８．オプティマイザは、第１の実行計画または第２の実行計画が、クエリの以前の実行および収集された性能測定基準から決定された統計値のうちの１つ以上に基づいて、クエリを実行するために使用されるべきであるかを決定するように構成される、付記１に記載のシステム。
９．データベースクエリを実行するための方法であって、
第１のコンピューティングノードでデータベースクエリを実行するための第１の命令のセットであって、第１のコンピューティングノードによって決定される様式でデータベースクエリを実施する、第１の命令のセットを実行する第１の推定コストを示す情報を受信することと、
第２のコンピューティングノードでデータベースクエリを実行するための第２の命令のセットであって、第２のコンピューティングノードによって決定される様式でデータベースクエリを実施する、第２の命令のセットを実行する第２の推定コストを示す情報を受信することと、
第１および第２の推定コストを比較することによって、第１および第２のコンピューティングノードのうちの少なくとも１つでデータベースクエリを実施するために第１または第２の命令のセットを使用するかを決定することと、を含む、方法。
１０．第１および第２の推定コストを比較することは、第１および第２のコンピューティングノードの性能特性に対して調整することをさらに含む、付記９に記載の方法。
１１．性能特性は、プロセッサ速度、記憶デバイス速度、利用可能なメモリ、ワーキングセット、ＣＰＵ使用率、平均ディスク待ち行列の長さ、キャッシュコヒーレンス測定値、平均ユーザセッション数、およびイベントログエントリのうちの１つ以上を含む、付記１０に記載の方法。
１２．第１および第２の推定コストを比較することは、第１および第２コンピューティングノードによって管理されたデータの特性に対して調整することを含む、付記９に記載の方法。
１３．データの特性は、多くのデータの行およびデータの繰り返しの頻度のうちの１つ以上を含む、付記１２に記載の方法。
１４．第１および第２の推定コストを比較することは、少なくとも１つの命令の推定コストに対する第１または第２のコンピューティングノードの特性に基づいて、第１または第２の命令のセットのうちの少なくとも１つの命令の推定コストを調整することを含む、付記９に記載の方法。
１５．第１のコンピューティングノードは、第１の命令のセットを実行する推定コストを示す情報を第２のコンピューティングノードに送信する、付記９に記載の方法。
１６．第１または第２の命令のセットを使用するかを決定することは、第１または第２のコンピューティングノードのうちの少なくとも１つによって実施される、付記９に記載の方法。
１７．クエリは、区画された表に方向付けられ、クエリオプティマイザは、第１の命令セットを決定する、付記９に記載の方法。
１８．コストは、計算能力、ＣＰＵ速度、メモリ容量、キャッシュ容量、記憶デバイス読み出し性能、記憶デバイス書き込み性能、記憶デバイス書き込み性能、記憶デバイスシーク時間、行カウント、およびデータの重複のうちの少なくとも１つの関数である、付記９に記載の方法。
１９．第１または第２の命令のセットを使用するかを決定することは、トリガーイベント後に実施される、付記９に記載の方法。
２０．トリガーイベントは、周期的イベント、ハードウェアコンポーネントの変更、ハードウェアの構成に対する変更、およびシステムに記憶されたデータの変更のうちの１つ以上を含む、付記１９に記載の方法。
２１．非一時的コンピュータ可読記憶媒体であって、コンピューティングデバイスによる実行時に、このコンピューティングデバイスに、
クエリを実施する第１のコストであって、第１のコンピューティングノード内で第１の命令セットを実施する推定コストの決定を含む、第１のコストの推定値を受信することと、
クエリを実施する第２のコストを推定することであって、第２の推定コストが、第２のコンピューティングノードで第２の命令セットを実施する推定コストの決定を含む、推定することと、
第１および第２のコンピューティングノードの相対的特性に対して調整した後、第１のコストを第２のコストと比較し、第１の命令セットが第１および第２のコンピューティングノードでクエリを実施するために好ましいと決定することと、を少なくとも行わせるコンピュータ命令をその上に記憶させた、非一時的コンピュータ可読記憶媒体。
２２．コンピューティングデバイスによる実行時に、このコンピューティングデバイスに、
第２のコンピューティングノードでの実行時に、クエリが第１の命令セットを用いて実施されるように、第１の命令セットをクエリと関連付けること、を少なくとも行わせる命令を非一時的コンピュータ可読記憶媒体上に記憶される、付記２１に記載の非一時的コンピュータ可読記憶媒体。
２３．コンピューティングデバイスによる実行時に、このデバイスに、
第３のコンピューティングノードでの実行時に、クエリが第１の命令セットを用いて実施されるように、第１の命令セットをクエリと関連付けること、を少なくとも行わせる命令を非一時的コンピュータ可読記憶媒体上に記憶される、付記２１に記載の非一時的コンピュータ可読記憶媒体。
２４．非一時的コンピュータ可読記憶媒体であって、コンピューティングデバイスによる実行時に、このコンピューティングデバイスに、
クエリオプティマイザから、第１のコンピューティングノードでクエリを実行するための第１の計画を取得することと、
クエリオプティマイザから、第２のコンピューティングノードでクエリを実行するための第２の計画を取得することと、
クエリを実行するための第１および第２の計画を実行する予測コストを比較することと、
この比較に基づいて、クエリを実行するための第１または第２の計画のうちのどちらが好ましいかを決定することと、
クエリを実行するための好ましい第１または第２の計画を示す情報を送信することと、を少なくとも行わせる命令をその上に記憶させた、非一時的コンピュータ可読記憶媒体。
２５．情報は、クライアントアプリケーションに送信される、付記２４に記載の非一時的コンピュータ可読記憶媒体。
２６．情報は、ユーザに送信され、この送信は、記憶デバイス、待ち行列、またはメッセージングシステムのうちの１つ以上を含む、付記２４に記載の非一時的コンピュータ可読記憶媒体。
２７．情報は、クエリを実行するための好ましい第１または第２の計画と一致するクエリを実行するために、クエリオプティマイザに計画を生成させるようにクエリを修正するための提案を含む、付記２４に記載の非一時的コンピュータ可読記憶媒体。
２８．情報は、クエリを特定のコンピューティングデバイスに経路指定する提案を含む、付記２４に記載の非一時的コンピュータ可読記憶媒体。
【００７５】
上述される様々な特徴およびプロセスは、互いに独立して使用されてもよく、または様々な方法で組み合わされてもよい。すべての可能な組み合わせおよび部分的組み合わせは、本開示の範囲内に入ることを意図する。加えて、ある特定の方法またはプロセスブロックは、いくつかの実装形態で省略されてもよい。本明細書に記載される方法およびプロセスはまた、任意の特定の順序に限定されず、それに関するブロックまたは状態は、適切な他の順序で実施され得る。例えば、記載されるブロックまたは状態は、具体的に開示されるもの以外の順序で実施されてもよく、または複数のブロックもしくは状態は、単一のブロックもしくは状態で組み合わせられてもよい。例示的なブロックまたは状態は、連続して、並行して、またはいくつかの他の様式で実施されてもよい。ブロックまたは状態は、開示される例示的な実施形態に追加され、またはそれから削除されてもよい。本明細書に記載される例示的なシステムおよび構成要素は、記載されるものとは異なって構成されてもよい。例えば、要素は、開示される例示的な実施形態と比較して、それに追加され、それから削除され、または再配列されてもよい。
【００７６】
様々な項目は、メモリ内またはメモリ上に記憶されるように図解され、かつこれらの項目またはこれらの部分は、メモリ管理およびデータ整合性のためにメモリと他の記憶デバイスとの間で転送され得ることも理解される。あるいは、他の実施形態では、ソフトウェアモジュールおよび／またはシステムのうちのいくつかまたはすべては、別のデバイス上のメモリ内で実行し、コンピュータ間通信を介して図解されるコンピューティングシステムと通信する。さらに、いくつか実施形態では、システムおよび／またはモジュールのうちのいくつかのまたはすべては、これらに限定されないが、１つ以上の特定用途向け集積回路（ＡＳＩＣ）、標準集積回路、コントローラ（例えば、適切な命令を実行し、かつマイクロコントローラおよび／または埋込み型コントローラを含むことによる）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、結合プログラマブル論理デバイス（ＣＰＬＤ）などを含む、少なくとも部分的にファームウェアおよび／またはハードウェア内など、他の方法で実装または提供されてもよい。モジュール、システム、およびデータ構造のうちのいくつかまたはすべてはまた、ハードディスク、メモリ、ネットワーク、または適切なドライブによって、もしくは適切な接続を介して読み出される携帯用媒体物品など、コンピュータ可読媒体に記憶（例えば、ソフトウェア命令または構造化データとして）されてもよい。システム、モジュール、データ構造はまた、無線ベースおよび有線／ケーブルベースの媒体を含む様々なコンピュータ可読伝送媒体上で生成されたデータ信号として伝送されてもよく、様々な形態を（例えば、単一もしくは多重化アナログ信号の一部として、または複数の離散デジタルパケットもしくはフレームとして）取ってもよい。このようなコンピュータプログラム製品はまた、他の実施形態で他の形態を取ってもよい。したがって、本発明は、他のコンピュータシステム構成で実践されてもよい。
【００７７】
本明細書に使用される条件付き用語、数ある中でも、例えば、「することができる（ｃａｎ）」、「することができる（ｃｏｕｌｄ）」、「してもよい（ｍｉｇｈｔ）」、「してもよい（ｍａｙ）」などは、別の方法で具体的に記述されないか、または使用されるように文脈内に別の方法で理解されない限り、ある特定の実施形態がある特定の特徴、要素、および／またはステップを含むが、他の実施形態はこれらを含まないことを伝えることを一般的に意図する。したがって、このような条件付き用語は、特徴、要素、および／またはステップが１つ以上の実施形態に何らかの形で必要とされるか、あるいは、これらの特徴、要素、および／もしくはステップが任意の特定の実施形態内に含まれるか、またはそれで実施されるかをオーサ入力もしくはプロンプティングの有無にかかわらず、１つ以上の実施形態が決定する論理を必然的に含むことを意味することを一般的に意図しない。用語「備える」、「含む」、「有する」などは、同義語であり、開放型様式で包括的に使用され、追加の要素、特徴、行為、動作などを排除しない。また、用語「または」は、使用時に、例えば、要素の一覧を結びつけるために、用語「または」は、一覧における１つ、いくつか、またはすべてを意味するように、その包括的意味で（かつその排他的意味ではなく）使用される。
【００７８】
ある特定の例示的な実施形態が記載されたが、これらの実施形態は、単に例示として提示され、本明細書に開示される本発明の範囲を限定することを意図しない。したがって、前述の説明には、任意の特定の特徴、特性、ステップ、モジュール、もしくはブロックが必要であり、または不可欠であることを意味することを意図することはない。実際には、本明細書に記載される新規の方法およびシステムは、様々な他の形態で具現化されてもよく、さらに、本明細書に記載される方法およびシステムの形態で様々な省略、置換、および変更は、本明細書に開示される本発明の趣旨から逸脱することなく行われてもよい。添付の特許請求の範囲およびその均等物は、本明細書に開示される本発明のうちのいくつかの範囲および趣旨内に入るようにこのような形態または修正を包含することを意図する。
【図１】
2018077868.tif 000003
【図２】
2018077868.tif 000004
【図３】
2018077868.tif 000005
【図４】
2018077868.tif 000006
【図５】
2018077868.tif 000007
【図６】
2018077868.tif 000008
【図７】
2018077868.tif 000009
【図８】
2018077868.tif 000010
【図９】
2018077868.tif 000011
【図１０】
2018077868.tif 000012
【図１１】
2018077868.tif 000013