Monitoring and maintaining analytical tables#

Postgres Analytics AcceleratorPGAAは、Postgresプロンプトから直接ストレージ使用率、テーブルフォーマット、およびデータレイクテーブルのメタデータの状態を監査するのに役立つビルトイン機能を提供します。

テーブル統計の分析#

数百の標準のPostgresテーブルがある環境では、PGAAによって管理されているテーブルを特定することが困難になる場合があります。 pgaa.list_analytics_tables() ファンクションは、すべてのレイクハウス統合テーブルのグローバル概要を提供します。

SELECT * FROM pgaa.list_analytics_tables();

ファンクション出力は、次の洞察を提供します。

  • IDとフォーマット スキーマ、テーブル名、およびストレージフォーマットIceberg、Delta、またはParquetなどを表示します。

  • ストレージの場所 データファイルが存在する場所への正確なパス。

  • カタログのメタデータ 外部カタログを使用する場合、このファンクション出力には外部カタログサービス名、名前空間、およびリモートテーブル名が表示されます。

  • レプリケーションステータス データ移動の現在の状態を表示しますPGDレプリケーションシナリオの場合のみ。

  • ストレージメトリック

    • object_storage_snapshot_size_bytes 最新のライブスナップショットのサイズ。これは、SELECT * 中にスキャンされたデータの実際の量を表します。

    • object_storage_total_size_bytes 現在のバージョンで使用されていないメタデータ、マニフェスト、および履歴データファイルを含むバケット内の合計フットプリント。

    • object_storage_total_size_bytes メタデータを含むバケット内の合計フットプリント、マニフェスト、および履歴データファイルは使用されません。

pgaa.lakehouse_table_stats() ファンクションは、テーブルの物理的特性に関する特定の情報を提供します。これは、キャパシティプランニングとクエリパフォーマンスの微調整に重要です。

SELECT * FROM pgaa.lakehouse_table_stats(my_schema.my_table::regclass);

このファンクションは、基になるオブジェクトストレージを照会して、特定のマッピングの「内部」で何が起こっているのかを確認します。それはあなたに役立ちます

  • ライブデータとデッドデータを区別する 古いトランザクションログまたは圧縮されていない小さなファイルによってストレージが「無駄」になっている量を正確に特定します。

  • 成長の監視 新しいデータが外部ソースから取り込まれ、スナップショットサイズが時間の経過とともにどのように進化するかを追跡します。

  • キャッシュ認識 このファンクションの結果は、 pgaa.lakehouse_table_stats_cache_ttl_s 構成パラメーターによって制御されます。絶対的な最新の統計が必要であるのに表示されない場合は、キャッシュTTLが0に設定されていることを確認します。

latest_snapshot_size とtotal_size を比較することは、パフォーマンスとコストのバランスを保つために重要です。スナップショットのサイズは、「ライブ」データ、クエリー中にスキャンされる実際のボリュームを表しますが、合計サイズには、履歴バージョン、トランザクションログ、非圧縮行などのバケットフットプリント全体が含まれます。

IcebergやDelta Lakeのような形式では、合計サイズがスナップショットのサイズを超えて、タイムトラベルとロールバックをサポートします。これらの値の大きなギャップは、履歴オーバーヘッドの蓄積を示し、 VACUUM またはコンパクションを実行する信号として機能します。これらのメトリックを監視することは、無駄のない高パフォーマンスのデータレイクを維持するのに役立ちます。

テーブルパフォーマンスの最適化#

分析パフォーマンスは、頻繁なデータの更新により何千もの小さなファイルが作成され、メタデータのオーバーヘッドが増加する「小さいファイル問題」によって大きな影響を受けます。

pgaa.launch_taskを使用したテーブルメンテナンスの実行#

DeltaテーブルとIcebergテーブルのメンテナンスは、pgaa.launch_task() ファンクションを使用してネイティブバックグラウンドワーカーによって非同期に処理されます。これにより、アクティブなSQLセッションをブロックせずに、負荷の高い操作をトリガーできます。

SELECT pgaa.launch_task(
    table_name => my_delta_table::regclass,
    task_type => compaction, -- or z-order, vacuum, purge
    options => {"target_size": "128MB"}
);

注釈

Delta Lakeは使用可能なすべてのタスクタイプをサポートしていますが、Icebergテーブルは現在`compaction` オペレーションのみをサポートしています。さらに、Icebergコンパクションは、 dry_run を除き、Delta Lakeで使用可能な詳細な構成キーをサポートしていません。

サポートされているタスクタイプは次のとおりです。

  • コンパクション 小さなファイルをより大きな最適化されたブロック target_size で定義にマージして、分析スキャンを高速化します。

  • Z-オーダーデルタのみ 複数の列にわたってデータを再編成して、関連する値が物理的に近くに保存されます。これにより、エンジンがクエリフィルタと一致しないファイル全体を無視するデータスキップが有効になります。

  • バキュームDeltaのみ アクティブなスナップショットに関連付けられなくなり、指定された保持期間より古いデータファイルを削除します。これにより、オブジェクトストレージ領域が再利用されます。

  • パージデルタのみ 特定のストレージパスからデータを明示的に削除する管理ツール、失敗したエクスポートの手動クリーンアップに役立ちます。

例

  • Delta Lakeテーブルに対するコンパクションを使用して、小さなファイルをより大きな256MBブロックにマージして、スキャンパフォーマンスを高速化します。

SELECT pgaa.launch_task(
    table_name => lakehouse.sales_data::regclass,
    task_type  => compaction,
    options    => {"target_size": "256MB"}
);
  • zオーダーを使用してデータを物理的に再編成して、customer_id およびregion の同様の値を持つ行が一緒に保存され、エンジンが無関係なファイルをスキップできるようにします。

SELECT pgaa.launch_task(
    table_name => lakehouse.sales_data::regclass,
    task_type  => z-order,
    options    => {"columns": ["customer_id", "region"]}
);
  • バキュームを使用して、アクティブテーブル状態の一部でなくなり、7日より古いファイルを削除して、記憶領域を再利用します。

SELECT pgaa.launch_task(
    table_name => lakehouse.sales_data::regclass,
    task_type  => vacuum,
    options    => {"retention_period": "7 days"}
);

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

高度なメンテナンス#

ネイティブバックグラウンドワーカーでまだサポートされていない複雑なメンテナンス操作の場合、次の機能を使用します。

pgaa.spark_sql()

構成済みのSpark Connectエンドポイントを介して、Postgresで使用できないIceberg圧縮ルーチンまたはSparkファンクションを実行します。使用可能なプロシージャーのリストについては、 Spark procedures を参照してください。

SELECT pgaa.spark_sql(query, catalog_name);

注釈

このファンクションを使用するには、pgaa.spark_connect_url 構成パラメーターを設定して、使用可能なSpark Connectサービスをポイントする必要があります。

pgaa.execute_compaction()非推奨

pgaa.execute_compaction() ファンクションは、断片化したデータファイルをより大きくて効率的なParquetファイルに統合し、分析IcebergまたはDeltaテーブルのパフォーマンスとストレージ効率を向上させます。

SELECT pgaa.execute_compaction(my_iceberg_table::regclass);

注釈

ファンクション`pgaa.execute_compaction()` は非推奨で、pgaa.launch_task() を優先します。

例

  • 標準のテーブル圧縮を使用して、断片化したデータファイルをより大きなファイルにマージし、Icebergマニフェストを更新します。

SELECT pgaa.execute_compaction(lakehouse.inventory_iceberg::regclass);
  • pgaa.spark_sql() を使用して、 rewrite_data_files Sparkタスクを介してメタデータのオーバーヘッドを削減します。

SELECT pgaa.spark_sql($$
        CALL preexisting.system.rewrite_data_files(
          table => "preexisting"."ns-1"."table-1",
          strategy => sort,
          sort_order => value DESC,
          options => map(rewrite-all, true)
        )
    $$);

サポートされているオプションと例の完全なリストについては、 Functions を参照してください。