AlloyDB カラム型エンジンについて

このページでは、AlloyDB for PostgreSQL が提供する列エンジンの概要と、その使用方法について説明します。

AlloyDB カラム型エンジンは、次のコンポーネントを提供することで、スキャン、結合、集計の SQL クエリ処理を高速化します。

  • 選択した列のテーブルデータとマテリアライズド ビュー データが含まれ、列指向形式に再編成された列ストア。

  • クエリで列ストアを使用することをサポートする、カラム型クエリ プランナーと実行エンジン。

列エンジンは、プライマリ インスタンス、読み取りプール インスタンス、またはその両方で使用できます。自動列化を使用してワークロードを分析し、パフォーマンスの向上が最も大きい列を列ストアに自動的に入力することもできます。

特定のクエリでカラム型エンジンを使用するには、結合やスキャンなど、そのクエリ フラグメント内のすべての列が列ストアに存在している必要があります。

デフォルトでは、列エンジンはインスタンスのメモリの 30% を使用するように設定されています。ワークロード、メモリ使用量、読み取りプールが構成されているかどうかに応じて、プライマリ インスタンスの列エンジンのメモリ割り当てを減らし、読み取りプール インスタンスにメモリを割り当てることができます。列エンジンによるメモリ使用量を表示してモニタリングするには、列ストアのメモリ使用量を表示するをご覧ください。列ストアで使用されるメモリサイズを変更するには、列ストアのサイズを構成するをご覧ください。インスタンスに推奨されるカラム型エンジンのメモリサイズを確認するには、列ストアのメモリサイズの推奨事項をご覧ください。

カラム型エンジンのメリットを享受できるクエリタイプ

特定のクエリでは、カラム型エンジンのメリットを享受できます。列エンジンから最も大きなメリットを得られるオペレーションとそのクエリパターンのリストは次のとおりです。

  • テーブル スキャン

    • WHERE 句などの選択フィルタがあります。
    • 大規模なテーブルまたはマテリアライズド ビューから少数の列を使用します。
    • LIKESUBSTR、TRIM などの式を使用します。
  • 集計関数

    • 使用できる式は、SUMMINMAXAVGCOUNT のみです。
    • 列スキャンのクエリの先頭にあります。
    • グループ化されていないか、列ごとにグループ化されています。
  • ORDER-BYSORT: ORDER-BY または SORT が、カラム型エンジンからアクセスされた列のスキャン結果にある場合のみ。

  • LIMIT: 演算子が列スキャンのクエリの先頭にあり、SORT 演算子または GROUP BY 演算子の前にのみ使用できます。

  • INNER HASH JOIN: 使用されるキーが列で、結合修飾子が使用されていない場合にのみ使用します。

  • 選択結合: 結合が列スキャンのクエリの先頭にある場合のみ。

カラム型エンジンで最も適切に機能するクエリ、クエリでカラム型エンジンが使用されたかどうか、使用方法の詳細については、EXPLAIN を使用してカラム型エンジンの使用を確認するをご覧ください。

カラム型エンジンの使用方法

AlloyDB インスタンスでカラム型エンジンを使用するには、次の概要の手順を実施します。

  1. インスタンスでエンジンを有効にする

    エンジンの有効化は 1 回限りの操作であり、再起動が必要です。

  2. 列ストアに列を追加します。

    列ストアに列を追加するには、次のいずれかの方法を使用します。

    • 自動列化を使用します。ワークロードを分析して列を自動的に追加します。

    • インスタンス内のデータベースのワークロードに関する知識に基づいて、列を手動で追加します。

  3. g_columnar_relations ビューを使用して、列ストアの内容を追跡できます。列を追加した後、EXPLAIN ステートメントを使用して、SQL クエリでの列エンジンの使用状況を確認できます。

カラム型エンジンの使用方法の詳細については、カラム型エンジンを構成するをご覧ください。

列ストアに追加できるデータ

列ストアに列を追加するときに使用できるデータ型とデータソースには、いくつかの制限があります。

サポートされるデータタイプ

列エンジンは、次の組み込みデータ型を持つ列のみをサポートします。

  • array
  • bigint
  • boolean
  • bytea
  • char
  • date
  • decimal
  • double precision
  • enum
  • float4
  • float8
  • integer
  • json
  • jsonb
  • numeric
  • real
  • serial
  • short
  • smallint
  • text
  • timestamp
  • timestamptz
  • uuid
  • varchar

列エンジンは、サポートされていないデータ型の列を手動で列ストアに追加しようとする試みを無視します。

サポートされていないデータソース

列エンジンでは、次の属性をデータソースとするテーブルまたはマテリアライズド ビューはサポートされていません。

  • リーフ以外のパーティション分割テーブル

  • 外部テーブル

  • 行数が 5,000 行未満のテーブルまたはビュー

Columnar Engine の制限事項

  • インデックスのある列に対して分析クエリを実行している場合、AlloyDB オプティマイザーは行ストアを使用することを選択することがあります。
  • 列ストアに手動で追加された列は自動的に削除されません。手動で追加した列を強制的に削除するには、インスタンスで google_columnar_engine_drop() を使用します。
  • 自動列化では、クエリの使用状況に基づいて列が動的に追加または削除される場合があります。
  • 列形式エンジンでサポートされているデータ型は限られています。サポートされているデータ型については、サポートされているデータ型をご覧ください。
  • 行の更新が頻繁に行われると、列データが無効になります。カラムストア内のテーブルまたはマテリアライズド ビューを検証するには、更新頻度を減らすか、カラムエンジンの更新をより頻繁にスケジュールします。

    g_columnar_relationsinvalid_block_count 列と total_block_count 列を比較して、テーブルまたはビューが影響を受けているかどうかを確認できます。テーブルまたはビューの変更が頻繁または大量に発生する場合、invalid_block_count は高くなります。

次のステップ