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

ドキュメントのバージョンを選択してください。

このページでは、RPM オーケストレーターを使用して 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

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

カラム型エンジンの更新しきい値を変更する手順は次のとおりです。

  1. DBCluster データベース クラスタ マニフェストを開きます。

  2. primarySpec セクションで、parameters ブロックに google_columnar_engine.refresh_threshold_percentage パラメータを追加します。

    DBCluster:
      metadata:
        name: DB_CLUSTER_NAME
      spec:
        # ... existing cluster configuration ...
        primarySpec:
          # ... existing primary configuration ...
          parameters:
            google_columnar_engine.refresh_threshold_percentage: "THRESHOLD"
    

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

    • DB_CLUSTER_NAME: データベース クラスタの名前。
    • THRESHOLD: 1~100 の整数値。この値は、コンテンツが更新対象としてマークされるために無効にする必要のあるコンテンツ内のデータブロックの割合を指定します。
  3. RPM オーケストレーターは、パラメータの変更を適用するためにデータベースを自動的に再起動します。次のいずれかの方法で、更新された DBCluster マニフェストを適用します。

    alloydbctl

    alloydbctl apply -d "DEPLOYMENT_SPEC_PATH" -r "DBCLUSTER_SPECIFICATION"

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

    • DEPLOYMENT_SPEC_PATH: Deployment の仕様ディレクトリのパス。
    • DBCLUSTER_SPECIFICATION: 変更した DBCluster マニフェストのパス。

    Ansible

    1. update.yml ハンドブック ファイルを作成します。

      ---
      - hosts: localhost
        vars:
          update_action: "update_resource_spec"
          ansible_user: SSH_USER
          ansible_ssh_private_key_file: SSH_KEY_PATH
        roles:
          - role: google.alloydbomni_orchestrator.update
      

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

      • SSH_USER: SSH を使用してクラスタ内のノードに接続するために使用するユーザー名。
      • SSH_KEY_PATH: ノードへの接続に使用される SSH 秘密鍵ファイルのローカルパス。
    2. コントロール ノードからハンドブックを実行し、リソース仕様を余分な変数として渡します。

      ansible-playbook -i "DEPLOYMENT_SPEC_PATH" update.yml \
        -e resource_spec="DBCLUSTER_SPECIFICATION"

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

      • DEPLOYMENT_SPEC_PATH: Deployment の仕様ディレクトリのパス。
      • DBCLUSTER_SPECIFICATION: 変更した DBCluster マニフェストのパス。

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

専用の 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 は、更新するインデックスの名前を含む文字列に置き換えます。