(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023070105
(43)【公開日】2023-05-18
(54)【発明の名称】クエリパイプライン実行のスケジューリング
(51)【国際特許分類】
G06F 16/2453 20190101AFI20230511BHJP
【FI】
G06F16/2453
【審査請求】未請求
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022171471
(22)【出願日】2022-10-26
(31)【優先権主張番号】63/263,703
(32)【優先日】2021-11-08
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/674,313
(32)【優先日】2022-02-17
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】300015447
【氏名又は名称】エスアーペー エスエー
【住所又は居所原語表記】Dietmar-Hopp-Allee 16, 69190 Walldorf, Germany
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】フロリアン・ウォルフ
(72)【発明者】
【氏名】ルーカス・ランドグラフ
(72)【発明者】
【氏名】アレクサンダー・ベーム
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175GC01
(57)【要約】
【課題】クエリ処理中のメモリ消費を削減するシステムを提供する。
【解決手段】システムは、複数のクエリ実行パイプライン、推定実行コスト、および推定中間結果基数に関連付けられたクエリ実行計画の受信と、複数のクエリ実行パイプラインの1つまたは複数の先行関係の決定と、推定実行コスト、推定中間結果基数、および1つまたは複数の先行関係に基づく複数のクエリ実行パイプラインの実行順序の決定と、複数のクエリ実行パイプラインの実行順序およびクエリ実行計画のクエリ実行エンジンへの提供とを含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
システムであって、
プロセッサ実行可能プログラムコードを記憶したメモリと、
処理ユニットと
を備え、
前記処理ユニットは、前記プロセッサ実行可能プログラムコードを実行して、前記システムに、
複数のクエリ実行パイプライン、推定実行コスト、および推定中間結果基数に関連付けられたクエリ実行計画を受信することと、
前記複数のクエリ実行パイプラインの1つまたは複数の先行関係を決定することと、
前記推定実行コスト、前記推定中間結果基数、および前記1つまたは複数の先行関係に基づいて前記複数のクエリ実行パイプラインの実行順序を決定することと、
前記複数のクエリ実行パイプラインの前記実行順序および前記クエリ実行計画をクエリ実行エンジンに提供することと
を行わせる、システム。
【請求項2】
前記実行順序の決定が、
前記1つまたは複数の先行関係に基づく前記複数のクエリ実行パイプラインの複数の実行順序の決定と、
前記推定実行コストおよび前記推定中間結果基数に基づく前記複数の実行順序の各々のメモリコストの決定と、
前記複数の実行順序の各々の前記メモリコストに基づく前記複数の実行順序からの前記実行順序の決定と
を含む、請求項1に記載のシステム。
【請求項3】
前記複数の実行順序からの前記実行順序の決定が、
前記複数の実行順序のうちの、最低メモリコストを有する実行順序の決定を含む、請求項2に記載のシステム。
【請求項4】
前記1つまたは複数の先行関係に基づく前記複数のクエリ実行パイプラインの前記複数の実行順序の決定が、
しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの実行順序の決定を含み、
決定された前記複数の実行順序が、しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの前記実行順序を含まない、請求項2に記載のシステム。
【請求項5】
前記実行順序の決定が、
前記1つまたは複数の先行関係に基づく、前記複数のクエリ実行パイプラインの各々に対する当該クエリ実行パイプラインが属する最長パイプラインパスの決定と、
前記複数のクエリ実行パイプラインの各々が属する前記最長パイプラインパスに基づく前記実行順序の決定と
を含む、請求項1に記載のシステム。
【請求項6】
前記実行順序の決定が、
前記複数のクエリ実行パイプラインの各々が属する前記最長パイプラインパスに基づく第1の実行順序の決定と、
前記1つまたは複数の先行関係に基づく前記複数のクエリ実行パイプラインの複数の実行順序の決定と、
前記推定実行コストおよび前記推定中間結果基数に基づく前記第1の実行順序のメモリコストの決定と、
前記推定実行コストおよび前記推定中間結果基数に基づく前記複数の実行順序の各々のメモリコストの決定であって、前記複数の実行順序のうちの1つの実行順序のメモリコストの決定が、前記複数の実行順序のうちの前記1つの実行順序の前記メモリコストが前記第1の実行順序の前記メモリコストを超えた場合に終了する、決定と、
前記複数の実行順序の各々の前記メモリコストに基づく前記複数の実行順序からの前記実行順序の決定と
を含む、請求項5に記載のシステム。
【請求項7】
前記1つまたは複数の先行関係に基づく前記複数のクエリ実行パイプラインの前記複数の実行順序の決定が、
しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの実行順序の決定を含み、
決定された前記複数の実行順序が、しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの前記実行順序を含まない、請求項6に記載のシステム。
【請求項8】
コンピュータによって実施される方法であって、
複数のクエリ実行パイプライン、推定実行コスト、および推定中間結果基数に関連付けられたクエリ実行計画を受信するステップと、
前記複数のクエリ実行パイプラインの1つまたは複数の先行関係を決定するステップと、
前記推定実行コスト、前記推定中間結果基数、および前記1つまたは複数の先行関係に基づいて前記複数のクエリ実行パイプラインの実行順序を決定するステップと、
前記複数のクエリ実行パイプラインの前記実行順序および前記クエリ実行計画をクエリ実行エンジンに提供するステップと
を含む方法。
【請求項9】
実行順序を決定する前記ステップが、
前記1つまたは複数の先行関係に基づいて前記複数のクエリ実行パイプラインの複数の実行順序を決定するステップと、
前記推定実行コストおよび前記推定中間結果基数に基づいて前記複数の実行順序の各々のメモリコストを決定するステップと、
前記複数の実行順序の各々の前記メモリコストに基づいて前記複数の実行順序から前記実行順序を決定するステップと
を含む、請求項8に記載の方法。
【請求項10】
前記複数の実行順序から前記実行順序を決定する前記ステップが、
前記複数の実行順序のうちの、最低メモリコストを有する実行順序を決定するステップを含む、請求項9に記載の方法。
【請求項11】
前記1つまたは複数の先行関係に基づいて前記複数のクエリ実行パイプラインの複数の実行順序を決定する前記ステップが、
しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの実行順序を決定するステップを含み、
決定された前記複数の実行順序が、しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの前記実行順序を含まない、請求項9に記載の方法。
【請求項12】
実行順序を決定する前記ステップが、
前記1つまたは複数の先行関係に基づいて、前記複数のクエリ実行パイプラインの各々に対して当該クエリ実行パイプラインが属する最長パイプラインパスを決定するステップと、
前記複数のクエリ実行パイプラインの各々が属する前記最長パイプラインパスに基づいて前記実行順序を決定するステップと
を含む、請求項8に記載の方法。
【請求項13】
実行順序を決定する前記ステップが、
前記複数のクエリ実行パイプラインの各々が属する前記最長パイプラインパスに基づいて第1の実行順序を決定するステップと、
前記1つまたは複数の先行関係に基づいて前記複数のクエリ実行パイプラインの複数の実行順序を決定するステップと、
前記推定実行コストおよび前記推定中間結果基数に基づいて前記第1の実行順序のメモリコストを決定するステップと、
前記推定実行コストおよび前記推定中間結果基数に基づいて前記複数の実行順序の各々のメモリコストを決定するステップであって、前記複数の実行順序のうちの1つの実行順序のメモリコストの決定が、前記複数の実行順序のうちの前記1つの実行順序の前記メモリコストが前記第1の実行順序の前記メモリコストを超えた場合に終了する、ステップと、
前記複数の実行順序の各々の前記メモリコストに基づいて前記複数の実行順序から前記実行順序を決定するステップと
を含む、請求項12に記載の方法。
【請求項14】
前記1つまたは複数の先行関係に基づいて前記複数のクエリ実行パイプラインの複数の実行順序を決定する前記ステップが、
しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの実行順序を決定するステップを含み、
決定された前記複数の実行順序が、しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの前記実行順序を含まない、請求項13に記載の方法。
【請求項15】
プロセッサ実行可能プログラムコードを記憶した非一時的記憶媒体であって、
前記プロセッサ実行可能プログラムコードが、コンピューティングシステムによって実行可能であり、前記コンピューティングシステムに、
複数のクエリ実行パイプライン、推定実行コスト、および推定中間結果基数に関連付けられたクエリ実行計画を受信することと、
前記複数のクエリ実行パイプラインの1つまたは複数の先行関係を決定することと、
前記推定実行コスト、前記推定中間結果基数、および前記1つまたは複数の先行関係に基づいて前記複数のクエリ実行パイプラインの実行順序を決定することと、
前記複数のクエリ実行パイプラインの前記実行順序および前記クエリ実行計画をクエリ実行エンジンに提供することと
を行わせる、非一時的記憶媒体。
【請求項16】
前記実行順序の決定が、
前記1つまたは複数の先行関係に基づく前記複数のクエリ実行パイプラインの複数の実行順序の決定と、
前記推定実行コストおよび前記推定中間結果基数に基づく前記複数の実行順序の各々のメモリコストの決定と、
前記複数の実行順序の各々の前記メモリコストに基づく前記複数の実行順序からの前記実行順序の決定と
を含む、請求項15に記載の記憶媒体。
【請求項17】
前記1つまたは複数の先行関係に基づく前記複数のクエリ実行パイプラインの前記複数の実行順序の決定が、
しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの実行順序の決定を含み、
決定された前記複数の実行順序が、しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの前記実行順序を含まない、請求項16に記載の記憶媒体。
【請求項18】
前記実行順序の決定が、
前記1つまたは複数の先行関係に基づく、前記複数のクエリ実行パイプラインの各々に対する当該クエリ実行パイプラインが属する最長パイプラインパスの決定と、
前記複数のクエリ実行パイプラインの各々が属する前記最長パイプラインパスに基づく前記実行順序の決定と
を含む、請求項15に記載の記憶媒体。
【請求項19】
前記実行順序の決定が、
前記複数のクエリ実行パイプラインの各々が属する前記最長パイプラインパスに基づく第1の実行順序の決定と、
前記1つまたは複数の先行関係に基づく前記複数のクエリ実行パイプラインの複数の実行順序の決定と、
前記推定実行コストおよび前記推定中間結果基数に基づく前記第1の実行順序のメモリコストの決定と、
前記推定実行コストおよび前記推定中間結果基数に基づく前記複数の実行順序の各々のメモリコストの決定であって、前記複数の実行順序のうちの1つの実行順序のメモリコストの決定が、前記複数の実行順序のうちの前記1つの実行順序の前記メモリコストが前記第1の実行順序の前記メモリコストを超えた場合に終了する、決定と、
前記複数の実行順序の各々の前記メモリコストに基づく前記複数の実行順序からの前記実行順序の決定と
を含む、請求項18に記載の記憶媒体。
【請求項20】
前記1つまたは複数の先行関係に基づく前記複数のクエリ実行パイプラインの前記複数の実行順序の決定が、
しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの実行順序の決定を含み、
決定された前記複数の実行順序が、しきい値未満のメモリコストを有する前記複数のクエリ実行パイプラインの前記実行順序を含まない、請求項19に記載の記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2021年11月8日出願の米国仮出願第63/263,703号の優先権を主張するものであり、その内容が全ての目的で参照により本明細書に組み込まれる。
【背景技術】
【0002】
従来のデータベースシステムにおいて、クエリオプティマイザが、データベースクエリを受け取り、それに基づいてクエリ実行計画を生成する。より詳細には、クエリオプティマイザは、受け取ったクエリに基づいていくつかの候補実行計画を決定し、各実行計画のコストを見積もり、そして実行コストが最低の計画を選択する。実行エンジンが、データベースに選択されたクエリ実行計画を実行し、そして対応する結果セットを返す。
【0003】
クエリ実行計画は、パイプラインベースのクエリ実行モデルに準拠してよい。そのようなモデルによれば、クエリ実行計画は、多重の実行パイプラインから成る。実行パイプラインは、入力として、前に実行された実行パイプラインのベーステーブルまたは結果セットをとり、そして別の結果セットを構築するためにベーステーブル/結果セットへ単項演算子または探索(例えば、ハッシュ結合)の混合を行う。したがって、実行パイプラインは、所与の実行パイプラインの実行が1つまたは複数の他の実行パイプラインの先行する実行を必要とし得るという点で相互依存している。
【0004】
データサイズ、クエリ作業負荷およびクエリ複雑性の増加のために、特にクラウドシナリオでは、クエリ処理中のメモリ消費の最適化が重要である。例えば、現代のクラウドベースのシステムは、膨大なテーブルを参照する多数の複雑なオンライン分析処理(OLAP)クエリに直面している。それらのクエリは、典型的に上記したように実行パイプラインを使用して実行される。その上、メインメモリデータベースシステムにおける既存のハードウェア資源の最適使用が低運用コストならびに高スループットに至り得る。
【発明の概要】
【課題を解決するための手段】
【0005】
特にパイプラインベースのクエリ実行計画の場合、クエリ処理中のメモリ消費を削減するシステムが所望される。
【図面の簡単な説明】
【0006】
【
図1】一部の実施形態に係るクエリ実行計画のためのパイプライン実行順序を決定するシステムのブロック図である。
【
図2】一部の実施形態に係るクエリ実行計画を例示する図である。
【
図3】一部の実施形態に係るクエリ実行計画のためのパイプライン実行順序を決定するフロー図から成る。
【
図4】一部の実施形態に係るクエリ実行計画のパイプライン特化の図である。
【
図5】一部の実施形態に係る候補パイプライン実行順序のそれぞれのメモリコストに基づいてクエリ実行計画のためのパイプライン実行順序を決定するフロー図から成る。
【
図6】一部の実施形態に係るクエリ実行計画の実行パイプラインに関連付けられた先行関係およびメタデータを例示するグラフである。
【
図7】一部の実施形態に係るパイプラインメモリコストの決定のための論理エンティティを例示するクエリ実行計画サブツリーの一般図である。
【
図8】一部の実施形態に係る実行パイプライン深さに基づいてクエリ実行計画のためのパイプライン実行順序を決定するフロー図から成る。
【
図9】一部の実施形態に係るクエリ実行計画のパイプライン特化の図である。
【
図10】一部の実施形態に係るクエリ実行計画の実行パイプラインに関連付けられた先行関係およびメタデータを例示するグラフである。
【
図11】一部の実施形態に係るデータベースノードのブロック図である。
【
図12】一部の実施形態に係るクラウドベースのアーキテクチャの図である。
【発明を実施するための形態】
【0007】
以下の説明は、当業者が記載される実施形態を製作および使用することを可能にするために提供され、かつ一部の実施形態を実施するために企図される最良の形態を説明する。しかしながら、当業者にとって様々な変更が直ちに明らかであろう。
【0008】
上述したように、クエリオプティマイザによって出力されるクエリ実行計画がいくつかの実行パイプラインを含んでよい。パイプラインは、クエリ実行計画に準拠しつつも様々な順序で実行され得るが、各実行順序は、同じ結果セットを生成しかつ同じ実行コストに関連付けられる。本発明者らは、異なるパイプライン実行順序がメモリを異なって消費し(すなわち、異なるメモリ消費プロファイルを呈し)得ることを発見した。したがって、メモリ消費を削減する目的で、クエリ実行計画の実行パイプラインを、クエリ実行計画に同じく準拠する別の実行順序でよりもむしろクエリ実行計画に準拠する特定の実行順序で実行することが望ましくてよい。
【0009】
本発明者らは、所与のクエリ実行計画に準拠するいくつかのパイプライン実行順序から、それらの相対メモリ消費プロファイルに基づいて一パイプライン実行順序を選択するシステムおよび方法も発見した。同システムおよび方法は、クエリ最適化後かつ計画実行前の履行のためにデータベース管理システムへ効率的に組み込まれ得る。この点で、一部の実施形態は、クエリ実行計画ならびに様々な推定コストおよび基数を含む、クエリオプティマイザによって出力される様々なデータ構造を活用する。
【0010】
図1は、一部の実施形態に係るシステム100のブロック図である。システム100の各例示される要素は、公知であるまたは公知となるコンピューティングハードウェアおよび/またはソフトウェアの任意の適切な組合せを使用して実装されてよい。システム100は、独立または分散(すなわち、マルチノード)データベースシステムのコンポーネントを備えてよい。一部の実施形態において、システム100の2つ以上の要素が単一のコンピューティングデバイスによって実装される。システム100の1つまたは複数の要素がクラウドサービス(例えば、サービスとしてのソフトウェア、サービスとしてのプラットフォーム)として実装されてよい。
【0011】
クエリオプティマイザ110がクライアントからクエリを受信し、そしてデータベースストレージ120のテーブル124にクエリを実行するためのクエリ実行計画を決定する。実施形態は、いかなる特定のクライアントにもまたはいかなる特定の照会言語にも限定されない。クエリオプティマイザ110は、そのため公知であるまたは公知となる任意の適切なクエリプロセッサを備えてよい。当技術分野で公知であるように、クエリオプティマイザ110は、いくつかの代替のクエリ実行計画を生成し、そしてデータベースストレージ120のメタデータ122に基づいてそれぞれの実行コストを算出してよい。メタデータ122は、テーブル124の構造および関係(例えば、データベーススキーマ)ならびにテーブル124のデータを表現する統計を定義してよい。これらの統計は、システム100の統計サーバ(図示せず)によって定期的にリフレッシュされてよい。
【0012】
クエリオプティマイザ110は、クエリ実行計画の1つを選択し、そして選択したクエリ実行計画をパイプライン順序付けコンポーネント130に提供する。クエリ実行計画は、実行パイプライン、パイプラインブレーカ、入力テーブルおよび中間結果の基数推定値、ならびにクエリ実行計画のサブツリーのための実行コストを特定する。クエリ実行計画は、一部の実施形態において他のデータも含んでよい。
【0013】
図2は、一部の実施形態に係るクエリオプティマイザから受け取られるクエリ実行計画の要素の表現200を例示する。クエリ実行計画は、入力テーブルR、S、T、UおよびV、ならびにハッシュ結合として表現される物理演算子202~208を含む。実施形態は、ハッシュ結合に限定されない。
【0014】
各ハッシュ結合は、クエリ実行計画によって定義されるように、ビルド側およびプローブ側を含む。表現200によれば、ビルド側がハッシュ結合の右側である一方で、プローブ側はハッシュ結合の左側に描かれる。ハッシュ結合は、ビルド側のパイプラインブレーカとして本明細書で定義され、そのためハッシュ結合の右側に入るパイプラインを終了させる。例えば、ハッシュ結合202は、テーブルTから始まるパイプラインのパイプラインブレーカであり、ハッシュ結合204は、テーブルVから始まるパイプラインのパイプラインブレーカであり、ハッシュ結合206は、テーブルSから始まるパイプラインのパイプラインブレーカであり、そしてハッシュ結合208は、テーブルUから始まるパイプラインのパイプラインブレーカである。
【0015】
実行パイプラインは、そのため他の実行パイプラインのパイプラインブレーカによって生成される中間結果に依存してよい。例えば、ハッシュ結合202および204によって生成される中間結果は、それらがハッシュ結合208によって消費されるまでメモリに残らなければならない。一旦パイプラインが新しい中間結果(または最終結果)を生み出すと、それによって参照される全ての中間結果、例えば現在のパイプラインが探索したハッシュテーブルをメモリから解放できる。
【0016】
中間結果が異なるサイズ(例えば、レコード数*レコード幅)を有し、かつメモリに維持される中間結果の数が実行中に変化するので、クエリ実行計画の実行中の全メモリ使用量は時間に伴って変動する。本発明者らは、個々のパイプラインの実行の順序が、中間結果が生成され、記憶され、そして後に実行されるパイプラインによって消費される順序および時間を左右するため、メモリ使用量に有意に影響を与え得ることに注目した。
【0017】
したがって、パイプライン順序付けコンポーネント130は、最も望ましいメモリ使用量になる個々のパイプラインの実行の順序(すなわち、パイプライン実行順序)を決定する。一部の実施形態によれば、パイプライン順序付けコンポーネント130は、クエリオプティマイザ110によって提供されるクエリ実行計画に準拠する全ての可能なパイプライン実行順序を決定する。クエリ実行計画と共に提供されるデータを使用して、各パイプライン実行順序に対して、順序付けコンポーネント130は、メモリサイズおよび実行順序に従う実行中にパイプラインブレーカによって生成される中間結果の生存時間に基づいて、時間に伴うメモリ使用状況、またはメモリプロファイルを推定する。最少消費メモリプロファイルに関連付けられたパイプライン実行順序が、次いでクエリ実行計画を実行するためのパイプライン実行順序として選択されてよい。
【0018】
パイプライン順序付けコンポーネント130は、次いでクエリ実行計画および選択したパイプライン実行順序を実行エンジン140に提供する。実行エンジン140は、テーブル124のデータに基づいて結果セット150を生成するために、当技術分野で公知であるように、かつ選択されたパイプライン実行順序に従ってクエリ実行計画を実行する。
【0019】
図3は、一部の実施形態に係るプロセス300のフロー図から成る。一部の実施形態において、システム100の様々なハードウェア要素が、プロセス300を行うためにプログラムコードを実行する。プロセス300および本明細書で言及される全ての他のプロセスは、ハードディスクドライブ、揮発性または不揮発性ランダムアクセスメモリ、DVD-ROM、フラッシュドライブおよび磁気テープなどの、非一時的コンピュータ可読記憶媒体の1つまたは複数から読まれるプロセッサ実行可能プログラムコードに具現化されてよく、かつハードウェアプロセッサ、プロセッサコアおよびプロセッサスレッドを含むがこれらに限定されない、1つまたは複数の処理ユニットによって実行されてよい。一部の実施形態において、一部の実施形態に従うプロセスの実装のためのプログラムコードの代わりに、またはそれと組み合わせて、ハードワイヤード回路網が使用されてよい。実施形態は、そのためハードウェアおよびソフトウェアのいかなる具体的な組合せにも限定されない。
【0020】
プロセス300に先立ち、クエリが受け取られ、それに基づいてクエリ実行計画が生成される。クエリは、任意の形態のクエリプロセッサによって任意のクライアントアプリケーションから受け取られてよい。一部の実施形態によれば、クエリは、構造化照会言語(SQL)サーバのクエリオプティマイザによって受信される。クエリは、そのためSQLクエリを含んでよいが、しかし実施形態はそれに限定されない。
【0021】
クエリオプティマイザ110などのクエリオプティマイザが、当技術分野で公知であるように受け取ったクエリに基づいてクエリ実行計画を生成する。クエリ実行計画の生成は、クエリ実行計画に関連付けられる実行コストの推定を含んでよい。コストは、照会されるべきデータベーステーブルならびにテーブルの構造および内容を記述するメタデータに基づいて推定されてよい。
【0022】
クエリ実行計画は、プロセス300のS310で受け取られる。クエリ実行計画は、実行パイプラインのツリー、ツリーおよびツリーのサブツリーの実行コスト、ならびに実行パイプラインのパイプラインブレーカによって生成される中間結果の推定基数を含む。クエリ実行計画はシステム100のパイプライン順序付けコンポーネント130によって受け取られてよいが、しかし実施形態はそれに限定されない。例えば、本明細書でパイプライン順序付けコンポーネント130に帰される機能は、全体的または部分的にクエリオプティマイザ110によって行われてよい。
【0023】
用語「ツリー」は、表現200によって例示されるように、実行パイプラインを、最終クエリ結果を生成するパイプラインブレーカから様々なパイプラインブレーカを介して外へかつ下へ分岐すると見なすことができることを示すために本明細書で使用される。クエリ実行計画は、各パイプラインブレーカへの入力を記述し、かつどちらの入力がビルド側から成りどちらの入力がプローブ側から成るかを識別する。クエリ実行計画のパイプラインブレーカ、それらの入力およびビルド/プローブ側情報は、
図2に図示されるようにクエリ実行計画の表現を生成するのに十分である。
【0024】
図4は、
図2に図示されるクエリ実行計画のパイプライン特化の図である。各パイプラインは、
図4の場合、パイプラインの入力テーブルの名前に対応する丸囲み文字によって標識される。
図400は、各パイプラインブレーカによって生成される中間結果の推定基数(すなわち、レコード数)を特定する。
【0025】
本明細書で定義されるように、各パイプラインブレーカは、そのビルド側パイプラインを終了させる。例えば、パイプラインTは、プローブ側パイプラインSとのハッシュ結合で終了し、推定20レコードを含むハッシュテーブルに終わる。パイプラインSは、プローブ側パイプラインRとのハッシュ結合で終了し、推定50レコードを含むハッシュテーブルに終わる。
【0026】
プロセス300に戻り、実行パイプラインの先行関係がS320で決定される。先行関係は、クエリ実行計画に従ってどのパイプラインがどの他のパイプラインの前に実行されなければならないかを定義する。先行関係は、クエリ実行計画のツリーから導出されてよい。
図4を参照して、パイプラインTがパイプラインSの前に実行されなければならず、そしてパイプラインSはパイプラインRの前に実行されなければならない。同様に、パイプラインVがパイプラインUの前に実行されなければならず、そしてパイプラインUはパイプラインRの前に実行されなければならない。しかしながら、パイプラインU、VとパイプラインS、Tとの間に先行関係は存在しない。先行関係は、一部の実施形態に従ってクエリ実行計画と一緒にクエリオプティマイザによって直接提供されてよい。
【0027】
次に、S330で、実行パイプラインの実行順序が決定される。パイプライン実行順序は、先行関係、実行コストおよび中間結果基数に基づいて決定される。例えば、クエリ実行計画に準拠する全ての可能なパイプライン実行順序が最初に決定される。本例では、可能なパイプライン実行順序は、(V, U, T, S, R)、(V, T, S, U, R)、(V, T, U, S, R)、(T, S, V, U, R)、(T, V, S, U, R)および(T, V, U, S, R)である。
【0028】
各パイプライン実行順序に対して、S310で受け取られた実行コストおよび中間結果基数に基づいてメモリ使用状況の指標が決定される。この決定は、メモリサイズおよび各実行順序に従う実行中にパイプラインブレーカによって生成される中間結果の生存時間の決定を含んでよい。指標に基づいてパイプライン実行順序が決定される。例えば、決定されるパイプライン実行順序は、最も良好なメモリ使用状況に関連付けられたものでよい。一部の実施形態に従うS330の更なる詳細が以下に記載されることになる。
【0029】
クエリ実行計画および決定されたパイプライン実行順序は、S340で実行エンジンに提供される。実行エンジンは、次いで当技術分野で公知であるように結果セットを生成するためにパイプライン実行順序に従ってクエリ実行計画を実行してよい。そのような実行のメモリ使用状況は、異なる(例えば、ランダムに選択された)パイプライン実行順序に従うクエリ実行計画の実行から生じたであろうものより望ましいと推測される。
【0030】
図5は、一部の実施形態に係る候補パイプライン実行順序のそれぞれのメモリコストに基づいてクエリ実行計画のためのパイプライン実行順序を決定するフロー図から成る。したがって、プロセス500は、プロセス300のS330の実装を含んでよい。
【0031】
S510で、クエリ実行計画の先行関係を満たす全てのパイプライン実行順序が決定される。
図6は、上記した実行パイプラインの先行関係を例示するグラフである。前述したように、
図6のグラフを満たすパイプライン実行順序は、(V, U, T, S, R)、(V, T, S, U, R)、(V, T, U, S, R)、(T, S, V, U, R)、(T, V, S, U, R)および(T, V, U, S, R)である。これらのパイプライン実行順序の1つに従うクエリ実行計画の実行は、パイプライン実行順序の異なる1つに従う実行とは異なる時点においてクエリ実行計画の中間結果の作成および消費になり得、それによって異なるメモリ消費プロファイルになる。
【0032】
図6は、各パイプラインに対して、その関連するパイプラインブレーカの基数fも示す。この値は、クエリオプティマイザから受け取られかつ/またはそれに基づいて決定されてよい。上記したように、クエリオプティマイザは、クエリ実行計画の各中間結果の推定基数を提供する。各中間結果がパイプラインブレーカに対応するので、パイプラインブレーカの基数はその対応する中間結果の基数であると判定される。
【0033】
S520で、S510で決定されたパイプライン実行順序の各々に対して、各パイプラインブレーカの生存時間が決定される。パイプラインブレーカの生存時間は、その対応するパイプラインの実行コストに基づいて決定されてよい。
【0034】
図7は、以下の実行コスト、ブレーカ生存時間およびメモリサイズの説明において参照される論理エンティティを例示する。一部の実施形態によれば、クエリ実行計画はサブツリーs
iを含み、各々推定実行コストc
iを伴う。サブツリーおよび推定実行コストは、当技術分野で公知であるようにクエリオプティマイザによって提供される。サブツリーs
iの中間結果は、基数f
iおよび行(すなわち、レコード)サイズw
iを呈し、そしてパイプラインp
iの端を画定する、対応するパイプラインブレーカb
iへ書き込まれる。
【0035】
サブツリー全体s
iの実行コストc
iに対比して、実行コストe
iは、パイプラインp
iだけを実行するコストである。クエリオプティマイザによって提供されるサブツリーs
iの推定実行コストc
iが、パイプラインブレーカb
iへサブツリーs
iの結果を書き込むコストを含まないので、この書き込むコストは実行コストσ
iとして
図7に表現される。l
iは、パイプラインブレーカb
iの生存時間を表現する。
【0036】
一部の実施形態によれば、パイプラインブレーカbiの生存時間liは、対応するパイプラインpiの実行時間を概算することによってS520で概算される。次に、パイプラインpiの実行時間は、パイプラインの実行コストeiによって概算できる。パイプラインpiの実行コストeiは、パイプラインpiに対応するサブツリーsiの推定実行コストciから、siの全てのサブツリーsjの推定実行コストcjを減算することによって導出されてよく、ここでsjは、パイプラインブレーカbjがパイプラインpiによって消費されるサブツリーだけを含む。パイプラインブレーカbiへサブツリーsiおよびパイプラインpiの結果を書き込むコストを考慮するために、結果の差にパイプライン実行時間σiが加算される。したがって、以下に示されるようになる。
【0037】
【0038】
一部の実施形態はCoutコスト関数を活用しており、これは、ベーステーブルスキャンを含む、全ての演算子の出力基数の合計である。Coutコスト関数がハッシュ結合のコストにおけるビルドコストおよびプローブコストを区別しないので、例えば、ハッシュテーブルをパイプラインブレーカへ書き込むコストσiは、Coutが結果の基数を既に含むため、0に設定される。
【0039】
パイプラインブレーカb
iの生存時間は、そのそれぞれのパイプラインp
iの実行時間e
iに加えて、パイプラインブレーカb
iが消費されるために実行されなければならない他のパイプラインの実行時間から成る。上述したパイプライン実行順序例(V, T, S, U, R)に関しては、パイプラインVのパイプラインブレーカの生存時間は、パイプラインV、T、SおよびUの実行時間の合計である。パイプライン実行順序O=(p
1,…,p
i,…,p
j,…,p
k,…,p
n)、対応するパイプライン実行コストベクトル
【数2】
、および先行関係p
i<p
kが与えられると、パイプラインp
iのパイプラインブレーカb
iの生存時間l
iは、以下として計算されてよい。
【0040】
【0041】
したがって、パイプライン実行順序O=(p
1,…,p
i,…,p
n)に対するパイプライン生存時間ベクトル
【数4】
は、
【数5】
として定義されてよい。
【0042】
各パイプライン実行順序のメモリコストがS530で決定される。パイプライン実行順序のメモリコストは、パイプライン実行順序の各実行パイプラインの決定された生存時間および中間結果基数に基づいて決定されてよい。第1に、パイプラインブレーカb
iのメモリサイズm
iが、その対応する基数f
iおよび行サイズw
iの積としてm
i=w
i・f
iであるように概算される。ハッシュ結合の例を参照して、この概算は、パイプラインブレーカが、ハッシュテーブル実装に関係なく高密度ハッシュテーブルから成るという仮定に基づく。所与のパイプライン実行順序O=(p
0,…,p
i,…,p
n)に対するパイプラインブレーカメモリサイズのベクトル
【数6】
が
【数7】
として表現される。
【0043】
一部の実施形態によれば、S530で決定されるメモリコストはメモリ積算メトリックである。メモリ積算メトリックは、パイプラインブレーカメモリコストのベクトル
【数8】
にパイプラインブレーカ生存時間の転置ベクトル
【数9】
を乗算することによって算出される:
【0044】
【0045】
そのため、メモリ積算量MIは、全てのパイプラインブレーカbiにわたる、それらの生存時間liが乗算されるそれらのメモリサイズmiの合計である。パイプラインブレーカのメモリ消費は、それが作成される前は0であり、それぞれのパイプラインが動作し始めるや否やbiが破壊されるまでmiであり、その後0である。
【0046】
S540で、メモリコストが最低のパイプライン実行順序が決定される。この決定されたパイプライン実行順序は、対応するクエリ実行計画と一緒に、次いで決定されたパイプライン実行順序でのクエリ実行計画の実行パイプラインの実行のために実行エンジンに提供されてよい。
【0047】
一部の実施形態によれば、S510での先行関係を満たす全てのパイプライン実行順序の決定は、パイプラインブレーカが小メモリコストに関連付けられるパイプラインを無視する。そのようなパイプラインブレーカは、短生存時間、小メモリサイズまたは両方に関連付けられる。そのようなパイプラインを無視することによって、S510で決定されるパイプライン実行順序の数は有意に削減されてよく、プロセス500の全体的な高速実行に至る。
【0048】
例えば、パイプラインVが小メモリコストに関連付けられ、そのためS510で無視されるように選択されると仮定される。
図6のグラフの依存関係を満たすパイプライン実行順序は、そのためS510で(U, T, S, R)、(T, S, U, R)および(T, U, S, R)として決定され、これはS510の上記の例で決定されたものの半分のパイプライン実行順序である。一旦これらの3つのパイプライン実行順序のうち最低メモリコストに関連付けられるパイプライン実行順序がS540で決定されると、決定されたパイプライン実行順序に、クエリ実行計画の依存関係に準拠する順序内の位置において、パイプラインVが追加される。
【0049】
図8は、一部の実施形態に係るプロセス800のフロー図である。プロセス800は、所与のクエリ実行計画に準拠する複数のパイプライン実行順序から一パイプライン実行順序を決定するために実行されてよい。プロセス800の一部の実施形態は、パイプライン実行順序を決定するために、クエリオプティマイザによって提供される中間結果の基数または実行コストを活用しない。
【0050】
むしろ、プロセス800は、低いとはいえ、必ずしも対象のクエリ実行計画に準拠する全てのパイプライン実行順序の最低メモリコストではない、メモリコストを有するパイプライン実行順序を決定すると意図される発見的アルゴリズムである。パイプライン実行順序の準最適選択と引きかえに、プロセス800は、
図5のプロセス500より非常に迅速に実行され得る。プロセス800の発見的手法は、相互依存するパイプラインの最深の第1の実行が近最適パイプライン実行順序を与えるであろうという観察に基づく。言い換えれば、開始ノードから結果ノードへの長さの順のサブツリーの実行が「最善推測」パイプライン実行順序である。
【0051】
図9は、プロセス800の一部の実施形態を説明する目的のクエリ実行計画のパイプライン特化の図である。
図9のクエリ実行計画は、9つのベーステーブルおよび8つの中間ハッシュテーブルを含む。
図10は、クエリ実行計画のパイプラインを依存関係グラフにおけるノードとして表現する。
【0052】
プロセス800のS810で、実行パイプラインの各サブツリーの長さが決定される。
図10の例に関して、S810で決定されるサブツリーおよび対応する長さは次の通りである:(E, D, B, A, R; 5)、(C, B, A, R; 4)、(U, T, S, R; 4)。
【0053】
次に、S820で、各実行パイプラインに対して、実行パイプラインが属する最長サブツリーに基づいて実行優先度が決定される。本例を続けると、実行パイプラインE、D、B、A、Rに優先度5が割り当てられ、実行パイプラインCに優先度4が割り当てられ、そして実行パイプラインU、TおよびSに優先度4が割り当てられる。実行パイプラインCに優先度4が割り当てられ、かつ実行パイプラインU、TおよびSにも優先度4が割り当てられるので、実行パイプラインCか実行パイプラインU、TおよびSかの優先度をインクリメントし、かつ全てのより高優先度のパイプラインの優先度を同様にインクリメントすることによって、潜在的な順序付け衝突が対処されてよい。本例では、
図10の点線ボックスによって示されるように、実行パイプラインCの優先度が、より高優先度の実行パイプラインB、AおよびRへのその関係により、4から5にインクリメントされる。それに応じて、より高優先度の実行パイプラインE、D、B、AおよびRの優先度も5から6にインクリメントされる。
【0054】
割り当てられた優先度に基づいてパイプライン実行順序がS830で決定される。パイプライン実行順序の決定は、主にクエリ実行計画の依存関係に基づく。しかしながら、上述したように、或る実行点において、依存関係に準拠しつつも、2つ以上のパイプラインが次の実行すべきパイプラインとして選択されてよい。S830の一部の実施形態において、選択される次のパイプラインは、2つ以上のパイプラインのうち最高優先度が割り当てられたパイプラインである。
【0055】
本例を参照すると、実行パイプラインE、CおよびUのいずれがパイプライン実行順序における最初のパイプラインでもよい。しかしながら、3つのパイプラインのうち実行パイプラインEに最高優先度が割り当てられているので、実行パイプラインEが選択される。次の実行パイプラインは、依存関係グラフに基づいて、D、CまたはUでよい。3つのパイプラインのうち実行パイプラインDに最高優先度が割り当てられているので、実行パイプラインDが次の実行パイプラインとして選択される。この実行点において、パイプラインCまたはUだけが実行できる(例えば、パイプラインBは、それがパイプラインCによって生成される中間結果を必要とするので実行できない)。パイプラインCが、そのより高い割当て優先度により次の実行のために選択される。同論理が残りの実行パイプラインに対して上記したように続き、(E, D, C, B, A, U, T, S, R)と決定される決定パイプライン実行順序に至る。
【0056】
一部の実施形態によれば、プロセス800は、比較的迅速にパイプライン実行順序を決定するために実行され、そしてこの決定されたパイプライン実行順序のメモリコストが上記したように決定される。次に、プロセス500が上記したように実行される(パイプライン無視変形例の有無は問わない)。しかしながら、特定のパイプライン実行順序のメモリコストの決定中にS530で決定される下位結果がプロセス800を介して決定されたパイプライン実行順序のメモリコストを超えた場合、その特定のパイプライン実行順序パイプラインのメモリコストの決定は打ち切られる。
【0057】
図11は、一部の実施形態に係るクエリ実行計画のためのパイプライン実行順序を決定し得るデータベースアーキテクチャのブロック図である。実施形態は、
図11のアーキテクチャに限定されない。
【0058】
サーバノード1110が、クライアントアプリケーション1130および1140の1つからクエリを受信し、そしてそれに対してサーバノード1110内に記憶されたデータに基づいて結果を返してよい。ノード1110は、アプリケーションサーバ1115およびクエリプロセッサ1120を提供するためにプログラムコードを実行する。アプリケーションサーバ1115は、サーバアプリケーションを実行するためのサービスを提供する。例えば、アプリケーションサーバ1115上で実行するウェブアプリケーションが、
図11に図示されるようにクライアントアプリケーション1140からハイパーテキスト転送プロトコル(HTTP)要求を受信してよい。
【0059】
クエリプロセッサ1120は、記憶データおよびデータを処理するためのエンジンを含んでよい。クエリプロセッサ1120は、構造化照会言語(SQL)および多次元式(MDX)文を処理することも担ってよく、かつクライアントアプリケーション1130から直接そのような文を受信してよい。
【0060】
クエリプロセッサ1120は、クエリ実行計画を決定する際に使用するためのクエリオプティマイザ1122、本明細書に記載されるようにクエリ実行計画のためのパイプライン実行順序を決定するためのパイプライン順序付けコンポーネント1123、および決定されたパイプライン実行順序を使用してストレージ1125のテーブル1126に対してクエリ実行計画を実行するための実行エンジン1124を含む。クエリプロセッサ1120は、クエリ実行計画コストを推定するために使用される統計を決定するために一部の実施形態において統計サーバ(図示せず)も含んでよい。
【0061】
一部の実施形態において、ストレージ1125のデータは、従来の表形式データ、行記憶データ、列記憶データおよびオブジェクトベースのデータの1つまたは複数を含んでよい。その上、データは、その高速検索および読出を可能にするために索引が付されかつ/または選択的に索引に複製されてよい。サーバノード1110は、互いからプログラム的に分離される複数の論理データベースシステムを提供することによって複数の無関係なクライアントを別々にサポートするためにマルチテナンシーをサポートしてよい。
【0062】
メタデータ1128は、テーブル1126が確認するデータベーススキーマを記述するデータを含む。メタデータ1128は、そのためテーブル1126の列およびプロパティ、各テーブル1126の各列のプロパティ、列間の相互関係、ならびに任意の他の適切な情報を記述してよい。一例では、メタデータ1128は、テーブル1126の1つまたは複数の列を辞書圧縮されたとして識別し、そして列辞書および各辞書圧縮列に関連付けられた辞書索引を見つけるための情報を含んでよい。
【0063】
サーバノード1110は、ストレージ1125を、全データベースが揮発性(例えば、非ディスクベースの)メモリ(例えば、ランダムアクセスメモリ)に記憶される、「インメモリ」データベースとして実装してよい。全データベースは、固定ディスク(図示せず)に永続かつ/またはバックアップされてよい。実施形態はインメモリ実装に限定されない。例えば、データは、ランダムアクセスメモリ(例えば、最近使用されたデータを記憶するためのキャッシュメモリ)および1つまたは複数の固定ディスク(例えば、全データベースのそれらのそれぞれの部分を記憶するための永続メモリ)に記憶されてよい。
【0064】
図12は、一部の実施形態に係るクラウドベースのデータベース展開を例示する。例示されるコンポーネントは、セルフサービスかつ即時のプロビジョニング、オートスケーリング、セキュリティ、コンプライアンスおよびアイデンティティ管理機能を提供する1つまたは複数のパブリッククラウドに常駐してよい。
【0065】
ユーザデバイス1210は、データベースシステム1230によって管理されかつ分散ファイルストレージ1235に永続されるデータを作成、読出し、更新および削除するために、例えばユーザデバイス1210上で実行するウェブブラウザを介して、アプリケーションサーバ1220上で実行するアプリケーションと対話してよい。データベースシステム1230は、データを記憶してよく、かつデータにクエリ実行計画を実行するためのパイプライン実行順序を決定するために本明細書に記載されるようにプロセスを実行してよい。アプリケーションサーバ1220および/またはデータベースシステム1230は、パブリッククラウドプロバイダによって割り振られる、仮想マシンなどの、クラウドベースの計算資源を備えてよい。そのため、アプリケーションサーバ1220およびデータベースシステム1230は、需要ベースの弾力性を呈してよい。
【0066】
以上の図は、一部の実施形態に係るプロセスを説明するための論理アーキテクチャを表現しており、実際の実装では、他の方式で配置されるより多くのまたは異なるコンポーネントを含んでよい。他の実施形態と併せて他のトポロジが使用されてよい。その上、本明細書に記載される各コンポーネントまたはデバイスは、任意の数の他のパブリックおよび/またはプライベートネットワークを介して通信状態にある任意の数のデバイスによって実装されてよい。そのようなコンピューティングデバイスの2つ以上が互いから離れて位置してよく、かつネットワークおよび/または専用接続の任意の公知の方式を介して互いと通信してよい。各コンポーネントまたはデバイスは、本明細書に記載される機能ならびに任意の他の機能を提供するのに適切な任意の数のハードウェアおよび/またはソフトウェア要素を備えてよい。例えば、本明細書に記載される実装に使用されるいかなるコンピューティングデバイスも、本明細書に記載されるようにコンピューティングデバイスが動作するようにプログラムコードを実行するプログラマブルプロセッサを含んでよい。
【0067】
本明細書に述べられる全てのシステムおよびプロセスは、1つまたは複数の非一時的コンピュータ可読記憶媒体に記憶されるプログラムコードに具現化されてよい。そのような記憶媒体は、例えばDVD-ROM、フラッシュドライブ、磁気テープ、およびソリッドステートランダムアクセスメモリ(RAM)またはリードオンリメモリ(ROM)記憶ユニットを含んでよい。実施形態は、そのためハードウェアおよびソフトウェアのいかなる特定の組合せにも限定されない。
【0068】
互いと通信するとして本明細書に記載される要素は、共有メモリ通信、ローカルエリアネットワーク、ワイドエリアネットワーク、電話回線網、セルラネットワーク、光ファイバネットワーク、衛星ネットワーク、赤外線ネットワーク、無線周波数ネットワーク、およびデバイス間で情報を伝送するために使用され得る任意の他の種類のネットワークを含むがこれらに限定されない、データを転送するための任意の数の異なるシステムを通じて通信することが直接的または間接的に可能である。その上、システム間の通信は、非同期転送モード(ATM)、インターネットプロトコル(IP)、ハイパーテキスト転送プロトコル(HTTP)およびワイヤレスアプリケーションプロトコル(WAP)などの、公知であるまたは公知となる任意の1つまたは複数の伝送プロトコルを通じて進行してよい。
【0069】
本明細書に記載される実施形態は専ら例示の目的である。当業者は、上記したものへの変更および改変により他の実施形態が実施され得ると認識するであろう。
【符号の説明】
【0070】
100 システム
110 クエリオプティマイザ
120 データベースストレージ
122 メタデータ
124 テーブル
130 パイプライン順序付けコンポーネント
140 実行エンジン
150 結果セット
202,204,206,208 ハッシュ結合
1110 サーバノード
1115 アプリケーションサーバ
1120 クエリプロセッサ
1122 クエリオプティマイザ
1123 パイプライン順序付けコンポーネント
1124 実行エンジン
1125 ストレージ
1126 テーブル
1128 メタデータ
1130,1140 クライアントアプリケーション
1210 ユーザデバイス
1220 アプリケーションサーバ
1230 データベースシステム
1235 分散ファイルストレージ
【外国語明細書】