このページでは、クエリ パフォーマンスを向上させるために、カラム型エンジンのコンテンツを手動で管理する方法について説明します。テーブル、マテリアライズド ビュー、ScaNN インデックスを追加および削除する方法について説明します。
テーブル、マテリアライズド ビュー、ScaNN インデックスを管理する
ワークロードに基づいて、カラム型ストアに列を手動で追加することや、テーブルまたはマテリアライズド ビューの一部またはすべての列をカラム型ストアから削除できます。クエリ評価では、保存されているカラム形式のデータが自動的に使用され、クエリに回答します。
同様に、ScaNN インデックスをカラム型エンジンに手動で追加して、ベクトル検索を高速化することもできます。これにより、ベクトル エンベディングの大規模なデータセットで効率的な最近傍探索が可能になります。
カラムストアに追加するテーブル、マテリアライズド ビュー、列を選択する場合は、カラムストアのサイズとワークロードの形状の両方を考慮してください。選択に適した候補としては、頻繁にスキャンされる大規模なテーブルやビューがあります。これらのテーブルまたはビュー内で、OLAP ワークロードで使用されている大規模で一意でないインデックスを特定します。これらのインデックスの列をカラムストアに追加し、インデックスを削除することで、プライマリ インスタンスでのメンテナンスに関連するパフォーマンス コストを排除できます。
次のいずれかの方法で、カラム型エンジンのコンテンツを管理します。
テーブル、列、マテリアライズド ビューをカラムストアに追加する際に使用できるデータ型とデータソースについては、カラムストアに追加できるデータをご覧ください。
始める前に
- 使用している Google Cloud プロジェクトに、次のいずれかの IAM ロールが必要です。
roles/alloydb.admin
(AlloyDB 管理者の IAM 事前定義ロール)roles/owner
(オーナーの IAM 基本ロール)roles/editor
(編集者の IAM 基本ロール)
これらのロールが付与されていない場合は、アクセス権を付与するよう組織管理者に依頼してください。
データベース フラグを更新してカラムストアのコンテンツを管理する
google_columnar_engine.relations
データベース フラグを更新することで、カラムストアのコンテンツを手動で管理できます。このフラグには、カラムストアのすべてのデータソースを表す単一の値があります。再起動中、このフラグで指定された列がカラムストアに自動的に入力されます。
このフラグは、自動的なカラム化と組み合わせて使用できます。google_columnar_engine.relations
フラグで指定した列を入力した後に、カラム型エンジンで使用可能なメモリがある場合、自動的なカラム化により、必要に応じてカラムストアに列が追加されます。
Google Cloud CLI または Google Cloud コンソールを使用してインスタンスのデータベース フラグを設定する方法については、インスタンスのデータベース フラグを構成するをご覧ください。
フラグを使用して列を追加する
カラムストアに列を追加するには、インスタンスの google_columnar_engine.relations
フラグを定義します。値は、カンマ区切りのアイテムリストに設定します。各アイテムには、特定のテーブルから含める列のリストを指定します。形式は次のとおりです。
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST)
次のように置き換えます。
DATABASE_NAME: カラムストアに追加する列を含むデータベース。
SCHEMA_NAME: カラムストアに追加するテーブルまたはマテリアライズド ビューを識別するスキーマ。例:
public
TABLE_NAME: カラムストアに追加する列を含むテーブルまたはマテリアライズド ビュー。
COLUMN_LIST: カラムストアに追加するカラムのカンマ区切りリスト。
1 つのテーブルまたは 1 つのマテリアライズド ビューのすべての列を追加するには、列リストを省略します。
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME
インスタンスにデータベース フラグを設定する方法については、インスタンスのデータベース フラグを構成するをご覧ください。
google_columnar_engine.relations
を使用する場合の Google Cloud CLI CLI 構文
Google Cloud CLI を使用して google_columnar_engine.relations
フラグを設定する場合は、代替区切り文字構文を使用して、設定するデータベース フラグを区切る必要があります。列リストがカンマ区切りであるため、同じコマンドライン引数内でフラグを指定する場合は、カンマ以外の文字を使用する必要があります。
次の例は、gcloud CLI を使用して public
スキーマの 2 つの列をカラムストアに追加する方法を示しています。この例では、gcloud alloydb instance update
コマンドを使用してデータベース フラグを設定する場合、デフォルト以外の値を設定する他のすべてのデータベース フラグも設定する必要があるため、カラム型エンジンを有効にする別のフラグを設定しています。
gcloud alloydb instances update INSTANCE_NAME \
--database-flags=^:^\
google_columnar_engine.relations='DATABASE_NAME.public.TABLE_NAME(COLUMN_1,COLUMN_2)'\
:google_columnar_engine.enabled=on\
[:FLAG_3=VALUE_3 ...] \
--region=REGION_ID \
--cluster=CLUSTER_ID
フラグを使用して列を削除する
カラムストアから列を削除するには、前のセクションで説明した google_columnar_engine.relations
フラグに新しい値を設定し、削除する列を除外します。
カラムストアからすべての列を削除するには、インスタンスから google_columnar_engine.relations
フラグの設定を解除します。
インスタンスにデータベース フラグを設定する方法については、インスタンスのデータベース フラグを構成するをご覧ください。
SQL 関数を使用してカラムストアのコンテンツを管理する
カラムストアのコンテンツは、SQL 関数を使用して手動で管理できます。
SQL 関数を使用して列を追加する
google_columnar_engine_add
SQL 関数を実行して、カラムストアで列を追加します。
この方法では、指定した列がカラムストアに追加され、接続されたノード内の列のみが管理されます。インスタンスの再起動後、新しい列はストア内に保持されません。
この方法では、google_columnar_engine.relations
データベース フラグは変更されません。自動的なカラム化では、この SQL 関数によって追加された列は考慮されません。
psql クライアント
SELECT google_columnar_engine_add( relation => 'TABLE_NAME', columns => 'COLUMN_LIST' );
-
次のように置き換えます。
- TABLE_NAME: テーブルまたはマテリアライズド ビューの名前を含む文字列。テーブルまたはビューが
public
以外のスキーマにある場合は、スキーマ名、ドット、テーブルまたはビューの名前を指定します(例:'myschema.mytable'
)。 - COLUMN_LIST: 追加する列の名前をカンマ区切りで指定した文字列(大文字と小文字が区別されます)。テーブルまたはマテリアライズド ビューのすべての列をカラム型ストアに追加する場合は、このパラメータを省略します。
SQL 関数を使用して列を削除する
次のように google_columnar_engine_drop
SQL 関数を実行します。
psql クライアント
SELECT google_columnar_engine_drop( relation => 'TABLE_NAME', columns => 'COLUMN_LIST' );
- TABLE_NAME: テーブルまたはマテリアライズド ビューの名前を含む文字列。テーブルまたはビューが
public
以外のスキーマにある場合は、スキーマ名、ドット、テーブルまたはビューの名前を指定します(例:'myschema.mytable'
)。 - COLUMN_LIST: 追加する列の名前をカンマ区切りで指定した文字列(大文字と小文字が区別されます)。テーブルまたはマテリアライズド ビューのすべての列をカラム型ストアに追加する場合は、このパラメータを省略します。
google_columnar_engine_drop
関数を使用して、google_columnar_engine.relations
データベース フラグを編集し、追加された列を削除できます。ただし、そうすると、インスタンスの再起動時にこれらの列がカラム型ストアに再び追加されます。
カラム型エンジンで ScaNN インデックスを管理する
ベクトル検索を高速化するには、ScaNN インデックスをカラム型エンジンのインデックス キャッシュに読み込みます。
SQL 関数を使用して ScaNN インデックスを追加、削除、検証する
SQL 関数を使用して、インデックス キャッシュから ScaNN インデックスを手動で追加、削除、検証できます。キャッシュにインデックスを追加すると、ベクトル検索クエリを高速化できます。
ScaNN インデックスを追加する
カラム型エンジンのインデックス キャッシュに特定のインデックスを追加するには、次の SQL 関数を使用します。
SELECT google_columnar_engine_add_index(index => 'SCANN_INDEX_NAME');
SCANN_INDEX_NAME
は、列エンジン インデックス キャッシュに追加する ScaNN インデックスの名前に置き換えます。
ScaNN インデックスを削除する
カラム型エンジンから特定の ScaNN インデックスを削除するには、次の SQL 関数を使用します。
SELECT google_columnar_engine_drop_index(index => 'SCANN_INDEX_NAME');
SCANN_INDEX_NAME
は、削除する ScaNN インデックスの名前に置き換えます。
カラム型エンジンの使用状況を確認する
ベクトル インデックス スキャンでカラム型エンジンが使用されているかどうかを確認するには、COLUMNAR_ENGINE
オプションを指定して EXPLAIN ANALYZE
コマンドを実行します。
EXPLAIN (ANALYZE TRUE, SCANN TRUE, COSTS FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE FALSE, COLUMNAR_ENGINE TRUE)
SELECT * FROM t ORDER BY val <=> '[0.5,0.5,0.5,0.5]' LIMIT 100;
このコマンドは、次のようなクエリプランを返します。
Index Scan using t_ix3 on t t_1 (actual rows=100 loops=1)
Order By: (val <=> '[0.5,0.5,0.5,0.5]'::vector)
Limit: 100
ScaNN Info: (... columnar engine nodes hit=6...)
Columnar Engine ScaNN Info: (index found=true)
出力に columnar engine nodes hit
と Columnar Engine ScaNN Info: (index found=true)
が含まれている場合、クエリにカラム型エンジンが使用されていることを確認できます。