Postgres Analytics Accelerator(PGAA)1.11.0
日本語訳|Postgres Analytics Accelerator 1.11.0
※GoogleのAutoML Translationを使用して翻訳しております。
![]() |
![]() |
英語原文|Postgres Analytics Accelerator 1.11.0
![]() |
![]() |
概要
1. PGAAとは何か
Postgres Analytics Accelerator(PGAA) は、EnterpriseDB(EDB)が開発した、PostgreSQLを高速な分析用エンジンへと拡張する拡張機能(エクステンション)です。
トランザクション処理(OLTP)を行う運用データベースとモダンなデータレイクの架け橋となり、Postgres環境から離れることなく、Apache Iceberg、Delta Lake、Parquet などのオープンなテーブル/ファイルフォーマットに保存された大規模データに対して、直接クエリの実行や書き込みを行うことができます。個別のETLパイプラインや別基盤へのデータ移動は不要です。
- 互換性: PostgreSQL 16、17、18、EDB Postgres Extended Server(PGE)、EDB Postgres Advanced Server(EPAS)、Postgres Distributed(PGD 6.1以降)、WarehousePG(7.4以降)に対応。
- 想定ユースケース: 大規模分析処理(OLAP)、ハイブリッドトランザクション/分析処理(HTAP)、階層化ストレージのライフサイクル管理、標準SQLによるペタバイト規模データレイクへの直接クエリ。
2. PGAAの仕組み・アーキテクチャ
PGAAはコンピュート(計算処理)とストレージを分離し、Postgresのクエリプランナと最適化された外部/組み込み分析エンジンを連携させて動作します。
- カスタムテーブルアクセスメソッド(TAM): Postgresのアクセスメソッド機構(USING pgaa)を利用し、オブジェクトストレージ上のリモートデータをPostgresプランナからネイティブなローカルテーブルのように扱えるようにします。
- ストレージ抽象化レイヤー(PGFS): Postgres File System(pgfs)がAWS S3、Google Cloud Storage(GCS)、Azure Blob Storage(ADLS Gen2)、ローカルストレージへの接続、認証(IAMロール、HMACキー)、コネクションプーリング、リトライ処理を一元管理します。
- カタログ統合: Apache Iceberg RESTカタログ(Lakekeeper、Apache Polaris、Tabular、MinIO AIStorなど)やAWS S3 Tablesと連携し、スキーマの自動解決やクレデンシャル管理、パーティションの追跡を行います。
- 2つのクエリ実行エンジン:
- Seafowl(デフォルト): Apache DataFusion をベースとした組み込みのステートレス・ベクトル型クエリエンジン。Postgresと並行して動作(WarehousePGではsystemdサービスとして動作)し、Apache Arrow Flight RPCを用いてカラムナーデータを極小のオーバーヘッドでPostgresプロセスに転送します。
- Apache Spark Connect(オプション): リモートのApache Sparkクラスタへクエリをオフロードし、分散処理や NVIDIA RAPIDS によるGPUアクセラレーションを活用できます。
- 2つのクエリ実行モード:
- DirectScan(高速パス): フィルタリング、集約、結合、ソートなどの処理をすべて分析エンジン(SeafowlまたはSpark)に丸ごとオフロードし、最終結果のみをPostgresに返します。
- CompatScan(ハイブリッド・フォールバック): ローカルのヒープテーブルとの結合や、Seafowlがネイティブ対応していない構文・関数が含まれる場合に選択されます。Seafowlがストレージ層でフィルタリングや射影を行った後、中間ストリームをPostgresに返し、残りの処理をPostgres側で完結させます。
- 多層キャッシュ構成: ローカルSSD上のオブジェクトストアキャッシュ(Parquetデータブロック)、ETag条件付きリクエストによるメタデータキャッシュ、テーブル統計情報キャッシュを備えています。
- 書き込みおよびレプリケーション:
- CTAS: CREATE TABLE AS SELECT を用いて、クエリ結果をIcebergやDelta Lake形式で直接オブジェクトストレージに出力。
- PGD連携: AutoPartitionによる自動データ階層化(最新のホットデータはローカルヒープ、古いコールドデータはPGAAに自動退避)や、Iceberg Merge-on-Read(MoR)を活用した準リアルタイムのレプリケーション(HTAPテーブル)を実現します。
3. PGAAのメリット
- ベクトル化処理による圧倒的な高速性: 従来の行単位(row-by-row)処理ではなく、カラムナー形式とSIMD命令を活用したバッチ(ベクトル)処理を行うため、複雑な集約や結合を極めて高速に処理できます。
- OLTPとOLAPの統合(HTAP): 単一のPostgresセッションから、最新のトランザクションデータと過去の大規模データレイクの双方に対して透過的にクエリを実行できます。
- ストレージコストの大幅削減: アクセス頻度の低い過去データや監査ログをローカルの高価なSSDから安価なクラウドオブジェクトストレージへオフロードしつつ、即座にクエリ可能な状態を維持できます。
- オープン規格とベンダーロックインの回避: Apache Iceberg、Delta Lake、Parquetといった標準フォーマットを採用しているため、TrinoやSparkなどの外部エコシステムとデータを相互利用できます。
- インデックス作成やVACUUM運用の不要化: オブジェクトストレージ上のデータはメタデータによるデータスキッピング(最小/最大値、パーティション枝刈り)を利用するため、手動のB-Treeインデックス作成や定期的なVACUUM、DBチューニングが不要です。
- 柔軟なスケーラビリティ: 単一ノードでの運用から、WarehousePG によるMPP並列クラスタ、さらには Spark + NVIDIA RAPIDS による大規模GPUクラスタまでワークロードに応じて柔軟に拡張できます。
4. バージョン 1.11.0 の新機能・変更点
新機能
- WarehousePGでのCTAS対応: WarehousePG環境で CREATE TABLE AS SELECT(CTAS)が利用可能になりました。単一のライター(WarehousePG 7.5超ではコーディネーター、7.5以前では指定された1台のセグメント)が結果を出力します。
- WarehousePG上でのバックグラウンドワーカー対応: PGAAのメンテナスワーカーおよびメタストア同期ワーカーがWarehousePGのコーディネーター上で実行可能になり、pgaa.attach_catalog() によるIcebergカタログの自動同期に対応しました。
- CompatScanプッシュダウンの拡張: ハイブリッド実行モード(CompatScan)において、行全体参照(whole-row references)、ORDER BY / LIMIT / OFFSET(バウンデッドTop-N)、DISTINCT、ウィンドウ関数、Semi/Anti結合 のプッシュダウンに対応しました(各種GUCパラメータで制御可能)。
- Icebergテーブルのメタデータキャッシュ: SeafowlのRESTカタログクライアントにメタデータキャッシュが実装され、ETagを用いた条件付きリクエストで再検証を行うことで、クエリプランニングのレイテンシを大幅に短縮しました。
- Icebergマニフェストの並行数制御: pgaa.autostart_seafowl_concurrent_manifest_ops パラメータが追加され、マニフェスト読み込みの並行数を制限できるようになりました。これにより、大量のマニフェスト処理時におけるメモリ消費スパイクやオブジェクトストレージへのリクエスト集中を抑制できます。
- メタデータに基づくプランナ統計情報の生成: ANALYZE 統計情報が存在しないテーブルに対して、Iceberg、Delta Lake、Parquetのメタデータから行数やカーディナリティ、min/maxヒストグラムなどのプランナ統計情報を自動合成する機能が追加されました(pgaa.enable_metadata_stats で制御)。
バグ修正
- AWS Athena マニフェスト読み込みの互換性問題を修正。
- 非パーティション列および非パーティションテーブルにおける、Iceberg統計情報ベースのデータファイルプルーニング(枝刈り)が正常に機能するよう修正。
- to_char および to_number 関数がPostgresのフォーマットセマンティクスに厳密に準拠するよう修正。
- WarehousePGにおいて、ANALYZE がPGAAテーブルの reltuples = 0 と記録してしまい、不正確なクエリプランが生成される不具合を修正。
インフラおよびその他の変更(Infrastructure & other changes)
- 基盤の実行エンジンである Apache DataFusion をバージョン 55 にアップグレード。
- Icebergのマニフェストおよびマニフェストリスト(.avro ファイル)のオブジェクト全体キャッシュに対応し、クエリプランニング時の不要な再読み込みを削減。





