データベンド結合再順序戦略

著者: 王暁東

データベンド研究開発エンジニア

https://github.com/xudong963

結合順序の重要性

結合順序とは、SQL クエリを実行するときに複数のテーブルが結合される順序を決定することを指します。これはデータベース クエリの最適化の重要な側面であり、クエリのパフォーマンスと効率に重要な影響を及ぼします。結合順序が異なると、パフォーマンスに桁違いの影響を与える可能性があります。

オプティマイザーは、結合順序のコアプロセスを最適化します。

  1. 結合プランの列挙
  2. 統計情報に基づいた結果のサイズの推定(カーディナリティの推定)
  3. 2の結果をコストモデルに取り込み、列挙計画のコスト(コストモデル)を計算します。

この記事では、結合計画列挙の最初のステップである結合再順序付けアルゴリズムのみを取り上げます。

結合再順序アルゴリズム

貪欲なヒューリスティックアルゴリズム

結合する必要があるテーブルが多すぎる場合 (通常は 10 個以上)、貪欲アルゴリズムが適しており、その利点は適切な結合順序を迅速に見つけられることです。

中心となるアイデア: 1 つのテーブルから N 個のテーブルに拡張し、毎回現在のコストを最小化するテーブルを選択し、それを結合ツリーに追加して、左の深さのツリーを構築します。

貪欲アルゴリズムには多くの拡張機能もあり、主な拡張ポイントは局所最適性を回避し、茂みのあるツリーを生成する方法です

列挙アルゴリズム (トップダウンおよびボトムアップ)

2つの主流

  • ルール変換に基づくトップダウン列挙は、トップダウン カスケード フレームワークと組み合わせて記憶された方法で実装できます。
  • DPhyp アルゴリズムの代表的な DP ベースのボトムアップ列挙には、茂みのあるツリーを効率的に生成できるという利点があります。

通常の状況では、データベース システムはグリーディと列挙を効果的に組み合わせて、任意の数のテーブル結合が適切な時間内に効果的な結合順序を取得できるようにします。

データベンド結合の再注文の現状

データベンド オプティマイザーはルールに基づいて最適化を行い、各ルールはパターンを通じてプラン内のサブツリーと一致します。これは主に、カスケード フレームワークに基づくヒューリスティック最適化とコスト最適化の 2 つの段階に分かれており、2 つの段階は一連のルールを共有します。

ヒューリスティックなフェーズの最適化が完了すると、最適化されたプランに対して DPhyp アルゴリズムが実行され、最適な結合順序の取得が試行されます。Dphyp の最適化が失敗した場合は、CBO で最適な左深ツリーが見つかります (これは CBO では試行されません)。 CBO。ブッシュ ツリーの最適化。Dphyp が最適化に失敗した場合、CBO でブッシュ ツリーの最適化を実行しようとすると、tpcds などの検索スペースが爆発する可能性が高いためです 64)

Databend は現在、貪欲アルゴリズムをサポートしていません (ロードマップの次の段階では、極端なケースを処理するための関連サポートが提供されます)。最初に dphyp アルゴリズムを使用して最適なソリューションを取得します。dphyp が失敗した場合 (クエリには次のようなパターンがあります) dphyper アルゴリズムには適していません)、左の深さのツリーは、カスケード フレームワークのルール変換に基づくトップダウン列挙を使用して取得されます。テーブルの数が多すぎる場合 (10 を超える場合など)、検索の一部が行われます。スペースはトレードオフのために dphyp アルゴリズムで放棄されます。

Dphyp のコア定義とアルゴリズム

ハイパーグラフ

ハイパーグラフは、ノード セット V とハイパーエッジ セット E で構成されるタプル H = (V,E) です。ここで、

  1. V は空ではないノード セットです。
  2. E はハイパーエッジ集合です。ハイパーエッジは V の空でない部分集合 (u ⊂ V) と (v ⊂ V) の順序のないペア (u, v) であり、追加条件 u∩v = ∅ を満たします。

ハイパーグラフを使用すると、複数のノード間の接続を記述することができます。

上の図では、結合条件がR1.a + R2.b + R3.c = R4.d + R5.e + R6.fハイパーエッジであるため、{R1, R2, R3} — {R4, R5, R6}

csg-cmp-ペア

csg: 接続されたサブグラフ (接続されたサブグラフ)

cmp:connected-complement (接続された相補ペア)

2 つの csg 間に交差がなく、ハイパーエッジ接続がある場合、そのうちの 1 つはもう 1 つの cmp であり、2 つは csg-cmp-pair を構成します。アルゴリズムの核心は、すべての csg-cmp-pair を列挙することです。重複のない再帰によって、最小のコストを持つすべてのポイントを含む csg-cmp-pair を見つけます。

アルゴリズム

アルゴリズムの核心: ハイパーグラフ内のノードは順序付けされています。ノードは後ろから前へ (徐々に) 反復されます。各ノードは、接続されている可能性のあるサブグラフとその接続を見つけるために、それ自体とその後のノード (より大きなシーケンス番号を持つ) のみを考慮します。相補グラフは csg-cmp-pair を形成し、そのコストが計算および更新されます。最小のノードまで反復した後、すべての点を含む csg-cmp-pair が取得され、アルゴリズムが終了します。

アルゴリズム処理

  1. EmitCsg: {v} の相補的に接続された部分グラフを見つけます
    • a. 見つかった場合は、EmitCsgCmp
    • b. EnumerateCmpRec: 拡張された相補接続サブグラフ
      • 拡張された相補的に接続されたサブグラフが {v} と csg-cmp-pair を形成できる場合、EmitCsgCmp
      • b に戻って展開を続けます
  2. EnumerateCsgRec: 拡張子 {v}
    • a. 展開された {v'} を取得し、{v'} で 1 を実行します。
    • b. 2 に戻って展開を続けます

コアコードとデータ構造の定義については、以下を参照してください。

( https://github.com/datafuselabs/databend/blob/main/src/query/sql/src/planner/optimizer/hyper_dp/dphyp.rs )

私達と接続

Databend は、リアルタイム分析も実行できる、オブジェクト ストレージに基づくオープン ソースの柔軟で低コストの新しいデータ ウェアハウスです。私たちは、新世代のオープンソース データ クラウドを作成するために、クラウド ネイティブ データ ウェアハウス ソリューションを一緒に検討していただけることを楽しみにしています。

オープンソース フレームワーク NanUI の作者がスチールの販売に切り替えたため、プロジェクトは中断されました。Apple App Store の無料リストのナンバー 1 はポルノ ソフトウェア TypeScript です。人気が出てきたばかりなのに、なぜ大手はそれを放棄し始めるのでしょうか。 ? TIOBE 10月リスト:Javaが最大の下落、C#はJavaに迫る Rust 1.73.0リリース AIガールフレンドにイギリス女王暗殺を勧められた男性に懲役9年の実刑判決 Qt 6.6正式リリース ロイター:RISC-Vテクノロジーが中米テクノロジー戦争の鍵となる 新たな戦場 RISC-V: 単一の企業や国に支配されない レノボ、Android PC の発売を計画
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/5489811/blog/10116908