Optimizing query performance#

Postgres Analytics AcceleratorPGAAは、分析ワークロードをSeafowlと、大規模向けに設計されたベクトル化実行エンジンであるApache Sparkにオフロードすることにより、高いパフォーマンスを実現します。 PGAAが実行パスを選択する方法を理解することにより、クエリを「高速パス」に維持して、最大の高速化を実現できます。

スキャンタイプを理解する#

分析テーブルを照会すると、PGAAは2つの異なる実行パスを介してデータの取得と処理を管理します。

DirectScan Seafowlは、オブジェクトストレージからデータを直接読み取り、ソースですべてのフィルタと集計を適用し、最終的な結果セットのみをPostgresに返します。これにより、ベクトル化された加速を完全に利用し、ネットワークトラフィックを最小限に抑えることにより、パフォーマンスを最大化します。

CompatScan クエリにSeafowlがネイティブで処理できないSQL機能またはカスタムファンクションが含まれている場合、システムはハイブリッドモードにフォールバックします。このシナリオでは、Seafowlは引き続きデータソースとして機能しますオブジェクトストレージからデータをストリーミングし、基本的なフィルタリングを実行しますが、Postgresは最終的な複雑な処理のオーケストレーターとして機能します。

CompatScanでは、ワークロードは次のように分割されます。

  • Seafowlはファイルを読み取り、許可されたプッシュダウンを処理します結合またはグループバイなど。

  • PostgresはSeafowlから最適化されたストリームを受け取り、特殊な機能、最終的な並べ替え、またはベクトル化エンジンがまだサポートしていない複雑なロジックを実行します。

DirectScanは最大速度の目標ですが、 CompatScanは信頼できるフォールバックとして機能し、一部のパフォーマンスを犠牲にしてPostgres機能の完全な互換性を保証します。

クエリプランの分析#

PGAAがクエリーを実行している方法を確認するには、 EXPLAIN コマンドを使用します。出力により、どのエンジンが重い作業を実行しているかがわかります。

  • DirectScan SeafowlDirectScan またはSparkDirectScan ノードを探します。これは、Seafowlが操作全体フィルタリング、結合、および集計を処理し、最終結果のみをPostgresに返すことを示しています。

  • CompatScan SeafowlCompatScan またはSparkCompatScan ノードが表示される場合、クエリは「ハイブリッド」モードで実行されています。 Postgresは最終的な実行をオーケストレーションして、完全な機能の互換性を保証しますが、プッシュダウン設定が有効になっている場合、リモートエンジンはクエリの一部を高速化できます。

DirectScanフォールバックの管理#

クエリがより遅いCompatScanパスにフォールバックする場合は、次の手順に従ってトラブルシューティングを行ってください。

  1. 現在のセッションでDirectScanが許可されていることを確認します。

SHOW pgaa.enable_direct_scan;
-- If off, enable it:
SET pgaa.enable_direct_scan=on;
  1. 強制エラー報告 障害動作を変更します フォールバックの原因を明らかにできます。

SET pgaa.direct_scan_fail_behavior = error;

Postgresは、互換性のないSQL構文またはデータ型を識別する明示的なエラーをスローします。

  1. クエリが複雑な場合は、句を1つずつ削除して、ハイブリッドモードを強制する特定の「互換性トリガー」を分離します。

Icebergのメンテナンスの実行#

ハイブリッドモードでも、リソースを大量に使用する操作をオフロードすることにより、高いパフォーマンスを維持できます。次の設定はデフォルトで有効になっており、パフォーマンスのセーフティネットとして機能します。

pgaa.enable_join_pushdown システムがリモート実行者SeafowlまたはSparkへの参加をオフロードしようとすることを承認します。データが存在する場所でデータを結合することにより、大規模な生データセットをPostgresメモリにプルすることを回避し、ネットワークトラフィックを大幅に削減します。

pgaa.enable_groupby_pushdown 集約SUM 、COUNT 、AVG およびGROUP BY 句のオフロードを承認します。ソースで10億行を10のグループに集約すると、データ転送が数桁削減され、帯域幅とPostgres CPUの両方が節約されます。

サポートされているオプションと例の完全なリストについては、 pgaa.execute_compaction() のファンクションリファレンスセクションを参照してください。