Cascades クエリ オプティマイザーの詳細な説明

データベース内クエリ オプティマイザーはデータベースの中核コンポーネントであり、SQL クエリのパフォーマンスを決定します。 Cascades オプティマイザーは、volcano オプティマイザー ジェネレーターに基づく Goetz の最適化から生まれた検索フレームワークです。

この技術投稿では、カスケード クエリ オプティマイザーについて説明します。まず、SQL クエリ オプティマイザーが紹介され、次にクエリ最適化の基本原理が分析され、最後に Cascades クエリ オプティマイザーが紹介されます。

1. SQLクエリオプティマイザー

ユーザーがデータベースと対話するときは、宣言的な SQL ステートメントを入力するだけで済みます。データベース オプティマイザーは、さまざまなルールを通じてユーザーが入力した SQL ステートメントを最適化し、最適な実行プランを生成し、それを実行のためにエグゼキュータに配信する役割を果たします。オプティマイザは SQL クエリにとって非常に重要です。

図 1 に示すように、SQL ステートメントは構文解析と字句解析を通じて抽象構文ツリー (AST) を生成し、ルールベースのクエリ最適化 (ルールベース オプティマイザー) を受けます。 および Cost-Based Optimizer** は、実行可能な計画を生成します。

図1

  • ルールベースの最適化アルゴリズム: ルールベースの最適化手法の重要なポイントは、構造の一致と置換です。ルールを適用するアルゴリズムは一般に、まず関係代数構造上のローカル構造の一部を照合し、次に構造の特性に応じて変換または置換操作を実行する必要があります。

  • コストベースの最適化アルゴリズム: 現段階での主流の手法は、コスト (Cost) 推定手法に基づいています。特定の関係代数で表される実行計画が与えられた場合、この計画の実行コストを推定し、最終的に推定コストが最も低い計画を選択します。コストベースの手法と呼ばれていますが、このタイプのアルゴリズムでは、解決策を探索するためにルールの組み合わせが必要になることがよくあります。コストベースの手法では、ルールと変換を継続的に適用することで実際に新しい実行計画を取得し、計画のコスト上の利点と欠点を比較して最終的な選択を行います。

2. クエリ最適化の基本原則

オプティマイザは通常、統計情報収集コスト モデルの 3 つのコンポーネントで構成されます。 、計画の列挙

図 2 に示すように、コスト モデルは収集された統計情報を使用し、さまざまなコスト式を構築して特定のクエリ プランのコストを見積もり、オプティマイザが多くの代替案の中から最もコストの低いプランを見つけられるようにします。

図2

SQL ステートメント クエリの最適化は、リレーショナル代数モデルに基づいています。

  • SQL クエリはリレーショナル代数に変換できます。

  • 関係代数はローカルで等価な変換を実行でき、変換の前後で返される結果は変わりませんが、実行コストが異なります。

  • 実行コストが最も低いリレーショナル代数表現を見つけることで、SQL クエリをより効率的なソリューションに最適化できます。

実行コストが最も低いリレーショナル代数表現の検索は、動的プログラミングに基づくボトムアップ と < に分けられます。 a i= 3>カスケード/火山に基づくトップダウン2 つの学校。

  • ボトムアップ検索: リーフ ノードから開始して最小コストを計算し、計算されたサブツリー コストを使用して親ツリーのコストを計算します。最適な解決策; < /span>

  • トップダウン検索: 関係演算子ツリーの最上位から開始し、深さ優先で下方向にトラバースし、トラバース プロセス中に枝刈りを実行します。

ボトムアップ オプティマイザーは、最適な計画を最初から構築します。このタイプのアプローチでは、通常、最適化に動的プログラミング戦略が使用されます。このアプローチを使用するオプティマイザーには、IBM System R などがあります。トップダウンの最適化戦略のオプティマイザーには、Volcano フレームワークと Cascades フレームワークに基づくオプティマイザーが含まれます。

3. カスケードクエリオプティマイザー

Cascades クエリ オプティマイザーはトップダウンの検索戦略を採用し、メモ構造を使用して検索プロセス中に検索ステータスを保存します。

カスケードの主要コンポーネントは次のもので構成されます。

  • : 式は論理演算子または物理演算子を表します。スキャン演算子や結合演算子など。

  • グループ: 同等の式のセットを表します。つまり、同じグループ内の式は論理的に同等です。 Expression の各子ノードはグループによって表されます。論理演算子は複数の物理演算子に対応する場合があります。たとえば、論理演算子 Join(a,b) の場合、対応する物理演算子には {HJ(a, b)、HJ(b, a)、MJ(a, b)、 MJ(b, a)、NLJ(a, b)、NLJ(b, a)}。これらの論理的に同等の物理演算子をグループと呼びます。注: HJ は HashJoin 演算子を表し、MJ は MergeJoin 演算子を表し、NLJ は NestLoopJoin 演算子を表します。

  • メモ: Cascades フレームワークは列挙にトップダウン アプローチを使用するため、列挙プロセス中に多数の反復プランが生成される可能性があります。列挙の繰り返しを防ぐために、Cascades フレームワークはメモ データ構造を使用します。 Memo はツリー状 (実際にはグラフ) のデータ構造を使用します。各ノードはグループに対応し、各グループのメンバーはリンクされたリストによって編成されます。

  • 変換ルール: これは式とグループに作用する同等の変更ルールで、オプティマイザの検索スペースを拡張するために使用されます。

Cascades は、まず演算子ツリー全体をノードごとにメモ データ構造にコピーします。メモは一連のグループで構成されます。各演算子はグループに配置されます。子ノードを持つ演算子の場合、元の演算子のペアは直接参照になります。グループ。

画像3

図 3 に示すように、構文ツリーを生成するメモの初期構造が生成されます。メモ構造内の丸いボックスは演算子を表します。丸いボックスの右下隅はその子のグループへの参照、左下隅は一意の識別子です。初期のメモ構造を生成した後、変換ルールを使用して、論理的に等価な変換を実行できます。ルールは次のとおりです。

  • 論理演算子の場合、関係代数に基づくすべての同等の式は、join(A,B) -> join(B,A); のように同じグループに格納されます。

  • グループ内では、論理演算子の場合、結合 -> ハッシュ結合、マージ結合、NestLoop 結合などの 1 つ以上の物理演算子が生成されます。

  • グループ内では、オペレーターの入力 (サブプランとしても理解できます) は、複数のグループの式から取得できます。

図 4 は部分的に拡張されたメモ構造を示しており、図 1 の初期メモと比較すると、同等の論理演算子と対応する物理演算子が同じグループ内に追加されています。

図4

探索プロセス中に、オプティマイザはコスト モデル Coster を使用して、統計情報を利用してサブステップのコストを計算します。各メモ グループを走査した後、オプティマイザは各完全な計画の合計コストを合計し、最終的にMemos.プランの中で最も料金が安いプランです。

図5

図 5 には 3 つのグループがあり、Join(a, b)、GET(a)、GET(b) の 3 つの論理演算子に対応します。グループ 1 (グループ 2) には、GET(a) (GET(b)) に対応するすべての物理演算子が含まれています。各物理演算子のコストを推定し、保持する最適な演算子を選択できます。

列挙プロセス中に式が繰り返し列挙されるのを防ぐために、Memo 構造にはハッシュ テーブル (exprHT) も含まれており、この式をハッシュ テーブルのキーとして使用して、式がすでに存在するかどうかを迅速に検索します。 。

Cascades は、最適化にトップダウンのアプローチを使用し、プラン ツリーのルート ノードを入力として受け取り、各ノードまたは式グループを再帰的に最適化します。図に示すように、最適化プロセス全体はグループ 0 から開始され、実際には 2 つの子ノード (グループ 1 とグループ 2) の最適化を再帰的に完了する必要があります。

したがって、実際の最適化完了順序は、グループ 1 -> グループ 2 -> グループ 0 となります。各グループを最適化する場合は、各グループ メンバーを順番に最適化し、各グループ メンバーを最適化する場合は、各子ノードを再帰的に最適化します。現在のグループ内の各式 e のコストcost(e)を順番に推定し、最も低いコストの結果を選択して、それをbestHTに保存します。最適化の最後に、Join(a,b) に対応するメモ構造体をクエリして、最小の実行プランを取得します。

SenseTime 創設者、Tang Xiaoou 氏が 55 歳で死去 2023 年、PHP は停滞 Wi-Fi 7 が完全に利用可能になる2024 年初頭にデビュー、Wi-Fi 6 の 5 倍高速 Hongmeng システムが独立しつつあり、多くの大学が「Hongmeng クラス」を設立 Zhihui Jun の新興企業が借り換え、金額は 6 億元を超え、事前評価額は 35 億元 Quark Browser PC 版が内部テストを開始 AI コード アシスタントは人気があり、プログラミング言語のランキングはすべてです できることは何もありません Mate 60 Pro の 5G モデムと無線周波数技術ははるかに先を行っています MariaDB が SkySQL を分割し、確立されました独立した企業として<​​/span> Xiaomi、Yu Chengdong 氏の Huawei からの「キールピボット」盗作声明に対応
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/5148943/blog/10320570