2024 Postgres Conference カンファレンス丨Tuoshupai の有益なスピーチの本質を 1 つの記事で詳しく説明

4 月 17 日から 19 日まで、世界最大級の PostgreSQL カンファレンス 2024 が米国サンノゼで盛大に開催されました。このカンファレンスには、Ops、Dev、Essentials、Google Cloud の 4 つのトラックが含まれていました。データベースの管理とアプリケーション、ユーザーの例と経験などのトピックが開始され、Google、AWS、EDB、Yugabyte、DBeaver などの企業から上級講師がカンファレンスに招待されました。国際的なテクノロジーコミュニティに強い影響力を持つTuoshupaiは、カンファレンスのスポンサーとしてこのイベントに招待され、技術的な講演を行った。

カンファレンスでは、PieCloudDB の技術専門家である Richard Guo 氏が新しい PostgreSQL コントリビューターとして招待され、「PostgreSQL のクエリ プランナーの概要」という技術講演を行い、PieCloudDB データベース オプティマイザーの構築経験を組み合わせて説明しました。開発者の観点から見た PostgreSQL オプティマイザーの仕組みと、クエリ ツリーをプラン ツリーに変換するプロセスについて詳しく紹介します。リチャードのスピーチは聴衆から肯定的なフィードバックを受け取り、深い交流とコミュニケーションにつながりました。

データベース管理システム (DBMS) では、SQL クエリ処理は複雑かつ重要なプロセスです。 PostgreSQL の場合、SQL ステートメントは受信から実行まで次の 5 つの主要なステップを経る必要があります。

  • パーサー:構文エラーのチェックとパーサー ツリーの生成を担当します。
  • 分析 (アナライザー):解析ツリーに基づいて意味分析を実行し、クエリ ツリーを生成します。
  • リライター:システムに存在するルールに従ってクエリ ツリーを書き換えます。
  • 計画/最適化 (Planner):クエリ ツリーに基づいて最も実行効率の高い計画ツリーを生成します。
  • Executor:プラン ツリー内の順序でテーブルとインデックスにアクセスし、対応するクエリを実行します。

通常、同じクエリ ステートメントは複数の方法で実行できます。データベースの重要なコンポーネントであるクエリ オプティマイザーの役割は、考えられるすべての実行モードからコストが最も低いクエリ プランを見つけて、それを実行可能なプラン ツリーに変換することです。

以下では、プロセス全体の中で最も重要かつ複雑なフェーズでもある PostgreSQL クエリ処理の計画/最適化フェーズに焦点を当てます。このプロセスは一般に、前処理段階、スキャン/接続の最適化段階、スキャン/接続外の最適化段階、および後処理段階の 4 つの段階に分かれています。

1. 前処理段階

前処理フェーズの初期段階では、通常、定数式 (関数、ブール、CASE など) を簡素化し、単純な SQL 関数をインライン化することによって、クエリは可能な限り簡素化されます。同時に、IN、EXISTS、およびその他のタイプのサブクエリをセミ結合に変換し、サブクエリを促進し、外部結合を削除する (内部結合またはアンチ結合に変換する) ことによって、結合ツリーが簡素化されます。

これらの方法に加えて、後続の前処理段階で次のようなさまざまな最適化方法が使用されます。

  • WHERE 制約と JOIN/ON 制約を配布する
  • 同等のクラスを構築する
  • 結合順序の制限に関する情報を収集する
  • 無駄な接続を排除する
  • ...

2. スキャン/接続の最適化フェーズ

スキャン/接続の最適化フェーズでは、主にクエリ ステートメントの FROM 部分と WHERE 部分が処理され、ORDER BY 情報も考慮されます。この部分はすべてコストによって決まります。

この段階では、まずベース テーブルのスキャンパスを決定し、スキャンパスのコストを推定し、次に動的プログラミングと遺伝的アルゴリズムを使用して接続シーケンス空間全体を検索し、接続パスを生成します。接続順序空間を探索する際には、外部結合による接続順序の制限も考慮する必要があります。

動的プログラミングでは、接続検索は次のように進行します。

  • まず各実表のスキャンパスを生成します。
  • 2 つのテーブルの可能なすべての結合に対する結合パスを生成します。
  • 3 つのテーブルの可能なすべての結合の結合パスを生成します。
  • 4 つのテーブルの可能なすべての結合に対する結合パスを生成します。
  • ...
  • すべての実表が接続されるまで

ただし、このプロセスのコストは非常に高くなります。n 個のテーブルの接続には、n! 通りの異なる接続順序が存在します。したがって、結合条件のないテーブルでは、複雑さを軽減するために大きな問題を複数のサブ問題に分解しないように、いくつかのヒューリスティック手法が使用されます。

3. スキャン/接続を超えた最適化フェーズ

この段階で、オプティマイザは GROUP BY、集計、ウィンドウ関数、DISTINCT を優先し、次に収集 (UNION/INTERSECT/EXCEPT) 操作を処理し、最後に ORDER BY を処理します。上記の各手順では、1 つ以上のパスが生成され、オプティマイザーはコストに基づいてこれらのパスをフィルターし、フィルターされたパスに LockRows、Limit、および ModifyTable ノードを追加します。

4. 後処理段階

この段階で、オプティマイザは最小コストのパスをプラン ツリーに変換し、プラン ツリーの詳細をいくつか調整する必要があります。

  • サブクエリの範囲テーブルをフラット化する
  • 上位プラン ノードの変数を OUTER_VAR または INNER_VAR の形式に変更して、サブプランの出力を指すようにします。
  • 不要なSubqueryScan、Append、MergeAppend等のノードを削除します。

このステップを完了すると、オプティマイザは完全なプラン ツリーを取得し、そのプラン ツリーを実行のためにエグゼキュータに渡し、最終的にクエリ結果を取得できます。

中国に本拠を置くハイテクイノベーション企業として、Tuoshupai は近年、コードの寄稿、講演、カンファレンスのスポンサーシップと参加、生態学的協力などの形式を通じて、国際的なオープンソーステクノロジーとエコシステムに深く関わってきました。将来的に、Tuoshupai は引き続き国際的な視野を広げ、世界的な技術革新の波に積極的に統合し、国際的な影響力を拡大し、国際的な技術主導型企業を構築していきます。

私はオープンソース紅蒙を諦めることにしました 、オープンソース紅蒙の父である王成露氏:オープンソース紅蒙は 中国の基本ソフトウェア分野における唯一の建築革新産業ソフトウェアイベントです - OGG 1.0がリリースされ、ファーウェイがすべてのソースコードを提供します。 Google Readerが「コードクソ山」に殺される Fedora Linux 40が正式リリース 元Microsoft開発者:Windows 11のパフォーマンスは「ばかばかしいほど悪い」 馬化騰氏と周宏毅氏が「恨みを晴らす」ために握手 有名ゲーム会社が新たな規制を発行:従業員の結婚祝いは10万元を超えてはならない Ubuntu 24.04 LTSが正式リリース Pinduoduoが不正競争の罪で判決 賠償金500万元
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/5944765/blog/11059181