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

このページでは、AlloyDB for PostgreSQL のカラム型エンジンのカラムストア内のデータの鮮度を維持する方法について説明します。

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

時間の経過とともに、無効なデータブロックが増えるにつれて、カラム型エンジンによるクエリのパフォーマンスは低下します。クエリのパフォーマンスを回復するため、カラム型データの更新が必要なレベルにまで低下します。この更新しきい値に達すると、カラム型エンジンはバックグラウンド ジョブを使用して、カラムストア内の無効なデータを更新します。デフォルトでは、カラム型エンジンは 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

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

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

コンソール

  1. Google Cloud コンソールで、[クラスタ] ページに移動します。

    クラスタに移動

  2. 構成するインスタンスを含むクラスタの名前をクリックします。
  3. [クラスタ内のインスタンス] セクションで、インスタンスを見つけて [編集] をクリックします。
  4. [フラグ] セクションで、新しいフラグを追加するか、既存の google_columnar_engine.refresh_threshold_percentage フラグを変更します。
  5. 値は 1100 の整数に設定します。この値は、更新をトリガーする無効なデータの割合を表します。
  6. [完了] をクリックします。

gcloud

gcloud CLI を使用するには、Google Cloud CLI をインストールして初期化するか、Cloud Shell を使用します。

カラム型エンジンの更新しきい値を変更するには、次のコマンドを実行します。
gcloud alloydb instances update INSTANCE_ID \
    --database-flags=google_columnar_engine.refresh_threshold_percentage=THRESHOLD \
    --cluster=CLUSTER_ID \
    --region=REGION_ID \
    --project=PROJECT_ID

次のように置き換えます。

  • INSTANCE_ID: インスタンスの ID。
  • THRESHOLD: 1100 の整数値。この値は、コンテンツが更新対象としてマークされるために無効にする必要のあるコンテンツ内のデータブロックの割合を指定します。
  • CLUSTER_ID: インスタンスが配置されているクラスタの ID。
  • REGION_ID: クラスタのリージョン。
  • PROJECT_ID: プロジェクトの ID。

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

専用の SQL 関数を使用すると、カラム型エンジンのテーブルと ScaNN インデックスをいつでも手動で更新できます。

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

SELECT google_columnar_engine_refresh(TABLE_NAME);

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

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

SELECT google_columnar_engine_refresh_index(index => INDEX_NAME);

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