このページでは、AlloyDB for PostgreSQL が提供する列エンジンの概要と、その使用方法について説明します。
AlloyDB カラム型エンジンは、次のコンポーネントを提供することで、スキャン、結合、集計の SQL クエリ処理を高速化します。
選択した列のテーブルデータとマテリアライズド ビュー データが含まれ、列指向形式に再編成された列ストア。
クエリで列ストアを使用することをサポートする、カラム型クエリ プランナーと実行エンジン。
列エンジンは、プライマリ インスタンス、読み取りプール インスタンス、またはその両方で使用できます。自動列化を使用してワークロードを分析し、パフォーマンスの向上が最も大きい列を列ストアに自動的に入力することもできます。
特定のクエリでカラム型エンジンを使用するには、結合やスキャンなど、そのクエリ フラグメント内のすべての列が列ストアに存在している必要があります。
デフォルトでは、列エンジンはインスタンスのメモリの 30% を使用するように設定されています。ワークロード、メモリ使用量、読み取りプールが構成されているかどうかに応じて、プライマリ インスタンスの列エンジンのメモリ割り当てを減らし、読み取りプール インスタンスにメモリを割り当てることができます。列エンジンによるメモリ使用量を表示してモニタリングするには、列ストアのメモリ使用量を表示するをご覧ください。列ストアで使用されるメモリサイズを変更するには、列ストアのサイズを構成するをご覧ください。インスタンスに推奨されるカラム型エンジンのメモリサイズを確認するには、列ストアのメモリサイズの推奨事項をご覧ください。
カラム型エンジンのメリットを享受できるクエリタイプ
特定のクエリでは、カラム型エンジンのメリットを享受できます。列エンジンから最も大きなメリットを得られるオペレーションとそのクエリパターンのリストは次のとおりです。
テーブル スキャン
WHERE
句などの選択フィルタがあります。- 大規模なテーブルまたはマテリアライズド ビューから少数の列を使用します。
LIKE
、SUBSTR
、TRIM などの式を使用します。
集計関数
- 使用できる式は、
SUM
、MIN
、MAX
、AVG
、COUNT
のみです。 - 列スキャンのクエリの先頭にあります。
- グループ化されていないか、列ごとにグループ化されています。
- 使用できる式は、
ORDER-BY
とSORT
:ORDER-BY
またはSORT
が、カラム型エンジンからアクセスされた列のスキャン結果にある場合のみ。LIMIT
: 演算子が列スキャンのクエリの先頭にあり、SORT
演算子またはGROUP BY
演算子の前にのみ使用できます。INNER HASH JOIN
: 使用されるキーが列で、結合修飾子が使用されていない場合にのみ使用します。選択結合: 結合が列スキャンのクエリの先頭にある場合のみ。
カラム型エンジンで最も適切に機能するクエリ、クエリでカラム型エンジンが使用されたかどうか、使用方法の詳細については、EXPLAIN
を使用してカラム型エンジンの使用を確認するをご覧ください。
カラム型エンジンの使用方法
AlloyDB インスタンスでカラム型エンジンを使用するには、次の概要の手順を実施します。
インスタンスでエンジンを有効にする。
エンジンの有効化は 1 回限りの操作であり、再起動が必要です。
列ストアに列を追加します。
列ストアに列を追加するには、次のいずれかの方法を使用します。
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_relations の
invalid_block_count
列とtotal_block_count
列を比較して、テーブルまたはビューが影響を受けているかどうかを確認できます。テーブルまたはビューの変更が頻繁または大量に発生する場合、invalid_block_count
は高くなります。