AlloyDB Omni のカラム型エンジンの概要

このページでは、AlloyDB Omni 列エンジンについて説明し、コンテナと Kubernetes クラスタのインストールでエンジンを使用する方法について説明します。このページは、PostgreSQL に精通していることを前提としています。

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

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

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

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

特定のクエリで列エンジンを使用するには、クエリで参照されるすべての列(結合、スキャンなど)が列ストアに存在している必要があります。

デフォルトでは、列エンジンはインスタンスのメモリの 1 GB を使用するように設定されています。ワークロード、メモリ使用量、読み取りプールが構成されているかどうかに応じて、プライマリ インスタンスでの列エンジンのメモリ割り当てを減らし、読み取りプール インスタンスにメモリを割り当てることができます。

列エンジンによるメモリ使用量を表示してモニタリングするには、列ストアのメモリ使用量を表示するをご覧ください。列ストアで使用されるメモリサイズを変更するには、列ストアのサイズを構成するをご覧ください。インスタンスに推奨されるカラム型エンジンのメモリサイズを確認するには、列ストアのメモリサイズの推奨事項をご覧ください。

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

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

オペレーション クエリパターン
テーブル スキャン WHERE 句などの選択フィルタ。
大規模なテーブルまたはマテリアライズド ビューの少数の列。
LIKESUBSTRTRIM などの式。
集計関数 SUMMINMAXAVGCOUNT などの式のみ。
列スキャンのクエリの開始時。
グループ化なしまたは列でグループ化。
ORDER-BY 演算子が列スキャンのクエリの先頭にある場合のみ。
SORT 演算子がカラム型スキャンのクエリの先頭にあり、テーブルまたはマテリアライズド ビューのベース列のみを並べ替える場合に限られます。
LIMIT 演算子が列スキャンのクエリの先頭にあり、SORT 演算子または GROUP BY 演算子の前にのみ適用されます。
INNER HASH JOIN 使用されるキーが列で、結合修飾子が使用されていない場合のみ。
選択結合 結合が列スキャンのクエリの先頭にある場合のみ。

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

カラム型エンジンを使用する

AlloyDB Omni インスタンスでカラム型エンジンを使用する手順は、次のとおりです。

  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
  • uuid
  • varchar

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

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

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

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

  • 外部テーブル

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

カラム型エンジンの制限事項

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

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

次のステップ