インメモリ カラムストア データの鮮度を維持する

ドキュメントのバージョンを選択:

このページでは、systemd サービスとして実行される AlloyDB Omni のカラム型エンジンのカラムストア内のデータの鮮度を維持する方法について説明します。

テーブルの行が追加、削除、更新されても、カラム型エンジンはカラムストア内のデータをすぐには更新しません。代わりに、カラムストア内の影響を受けるコンテンツを無効としてマークし、カラムストアの列指向データと、行キャッシュとデータベース ストレージの行指向データの両方を使用して、クエリが計画および実行されます。

時間の経過とともに、無効なデータブロックが増えるにつれて、カラム型エンジンによるクエリのパフォーマンスは低下します。クエリのパフォーマンスを回復するため、カラム型データの更新が必要なレベルにまで低下します。この更新しきい値に達すると、カラム型エンジンはバックグラウンド ジョブを使用して、カラムストア内の無効なデータを更新します。デフォルトでは、カラム型エンジンは 50 の更新しきい値を使用します。この値は、カラムストア内の特定のコンテンツの 50% が無効になったときに、そのコンテンツが更新対象としてマークされることを意味します。この更新しきい値を変更して、自動更新のオーバーヘッドを調整し、アプリケーション ワークロードの継続的なクエリ パフォーマンスを向上させることができます。

また、カラム型エンジンに読み込まれたテーブルと ScaNN インデックスは、いつでも手動で更新できます。通常、テーブルの変更を変更後できるだけ早くカラムストアに反映する場合は、手動で更新を行います。

無効なデータの割合を確認する

アプリケーションがテーブルの行の追加、削除、または更新を行うと、カラム型エンジンはカラムストア内の影響を受けるデータを無効としてマークします。g_columnar_relations ビューに対してクエリを実行すると、テーブルとマテリアライズド ビューの無効なデータの割合を確認できます。これにより、手動更新を行う必要があるかどうか、または自動更新のしきい値を調整する必要があるかどうかを判断できます。

カラム型ストア内のすべてのリレーションの無効化率を表示するには、次のクエリを実行します。

SELECT relation_name, invalid_percentage FROM g_columnar_relations;

特定のテーブルの無効化率を確認するには、クエリに WHERE 句を追加します。

SELECT   relation_name,
  CASE
    WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
    ELSE 0.0
  END AS invalid_block_percentage
FROM
  g_columnar_relations;
WHERE
 relation_name =  TABLE_NAME

TABLE_NAME は、テーブルまたはマテリアライズド ビューの名前を含む文字列に置き換えます。リソースが public 以外のスキーマにある場合は、SCHEMA_NAME.TABLE_NAME の形式でスキーマ名を指定します(例: myschema.mytable)。

特定のインデックスの無効化率を確認するには、クエリに WHERE 句を追加します。

SELECT   index_name,
  CASE
    WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
    ELSE 0.0
  END AS invalid_block_percentage
FROM
  g_columnar_indexes;
WHERE
  index_name = INDEX_NAME

カラム型エンジンの更新しきい値を変更する

カラム型エンジンの更新しきい値を変更するには、google_columnar_engine.refresh_threshold_percentage データベース フラグの値を変更する必要があります。

ALTER SYSTEM SET google_columnar_engine.refresh_threshold_percentage=THRESHOLD;

THRESHOLD は、1100 の 整数値に置き換えます。この値は、コンテンツが更新対象としてマークされるために無効にする必要があるコンテンツ内のデータブロックの割合を指定します。

カラムストア内のテーブルとベクトル インデックスを手動で更新する

専用の SQL 関数を使用すると、カラム型エンジン内のテーブルとベクトル インデックスをいつでも手動で更新できます。サポートされているインデックス タイプは ScaNN と HNSW です。

カラム型エンジンでテーブルのデータを更新するには、google_columnar_engine_refresh 関数を実行します。

SELECT google_columnar_engine_refresh(TABLE_NAME);

TABLE_NAME は、テーブルまたはマテリアライズド ビューの名前を含む文字列に置き換えます。リソースが public 以外のスキーマにある場合は、SCHEMA_NAME.TABLE_NAME の形式でスキーマ名を指定します(例: myschema.mytable)。

同様に、カラム型エンジンのベクトル インデックスを手動で更新するには、google_columnar_engine_refresh_index 関数を実行します。

SELECT google_columnar_engine_refresh_index(index => INDEX_NAME);

INDEX_NAME は、更新するインデックスの名前を含む文字列に置き換えます。