すべてのプロダクト
Search
ドキュメントセンター

PolarDB:マテリアライズドビュー作成におけるノード間並列高速化

最終更新日:Jan 14, 2026

このトピックでは、マテリアライズドビュー作成におけるノード間並列高速化機能について説明します。

適用範囲

この機能は、以下のバージョンの PolarDB for PostgreSQL で利用できます。

  • マイナーエンジンバージョンが 2.0.14.6.6.0 以降の PostgreSQL 14

  • マイナーエンジンバージョンが 2.0.11.9.30.0 以降の PostgreSQL 11

説明

コンソールで、または SHOW polardb_version; ステートメントを実行して、マイナーエンジンバージョン番号を表示できます。マイナーエンジンバージョンが要件を満たしていない場合は、マイナーエンジンバージョンをアップグレードしてください。

背景情報

マテリアライズドビューは、クエリ結果を含むデータベースオブジェクトです。通常のビューとは異なり、マテリアライズドビューは、その定義と作成時のデータのコピーの両方を格納します。マテリアライズドビュー内のデータがビュー定義内のデータと一致しない場合は、マテリアライズドビューをリフレッシュして一貫性を維持できます。マテリアライズドビューは、本質的に、後で再利用するためにその定義内のクエリを事前に計算します。

  • CREATE TABLE AS 構文は、クエリの結果から新しいテーブルを作成します。新しいテーブルのスキーマは、クエリの出力列と同じです。

  • SELECT INTO 構文は、新しいテーブルを作成し、クライアントにデータを返す代わりにクエリ結果を書き込みます。新しいテーブルのスキーマは、クエリの出力列と同じです。

仕組み

PostgreSQL カーネルは、マテリアライズドビューの作成とリフレッシュ、および CREATE TABLE ASSELECT INTO 構文を使用するステートメントを処理するために同じロジックを使用します。これは、これらの操作がすべてデータベースレベルで同様のステップを実行するためです。このプロセスは、主に次の 2 つのステップで構成されます。

  1. データスキャン:ビュー、CREATE TABLE AS ステートメント、または SELECT INTO ステートメントで定義されたクエリを実行して、一致するデータをスキャンします。

  2. データ書き込み:スキャンしたデータを新しいマテリアライズドビューまたはテーブルに書き込みます。

PolarDB for PostgreSQL は、データスキャンステップの最適化として ePQ 並列スキャンを導入しています。大量のデータをスキャンする必要がある場合、この最適化により、データ定義言語 (DDL) ステートメントのパフォーマンスが大幅に向上し、実行時間が短縮されます。

  • ePQ 並列スキャン:ePQ 機能は、複数のコンピュートノードの I/O 帯域幅とコンピューティングリソースを使用して、ビュー定義内のクエリを並列で実行します。これにより、コンピューティングリソースと帯域幅の両方の使用率が向上します。

  • バッチ書き込み:スキャンされた各タプルをテーブルまたはマテリアライズドビューに個別に書き込む代わりに、タプルはメモリに蓄積され、単一のバッチで書き込まれます。これにより、先行書き込みログ (WAL) の記録のオーバーヘッドが削減され、ページロックの頻度が低下します。

使用方法

polar_px_enable_create_table_as パラメーターを設定して、CREATE TABLE AS ステートメントのクエリプロセスを高速化するために ePQ 並列スキャンを有効または無効にすることができます。有効な値は次のとおりです。

  • ON (デフォルト):CREATE TABLE AS ステートメントに対して ePQ 並列スキャンを有効にします。

  • OFF:CREATE TABLE AS ステートメントに対して ePQ 並列スキャンを無効にします。

SET polar_px_enable_create_table_as = ON;
説明
  • このパラメーターは、ePQ 機能が有効になっている (polar_enable_px パラメーターが ON に設定されている) 場合にのみ有効です。

  • ePQ 機能の制限により、この最適化は CREATE TABLE AS ... WITH OIDS 構文をサポートしていません。この構文を使用するステートメントの場合、システムは組み込みの PostgreSQL オプティマイザーにフォールバックして実行計画を生成します。その後、クエリは PostgreSQL エグゼキュータによってシングルノードで実行されます。