維持記憶體內資料欄儲存庫資料的新鮮度

本頁面說明如何使用 Kubernetes 運算子,在 AlloyDB Omni 中維護資料欄引擎資料欄儲存庫中的資料新鮮度。

新增、刪除或更新資料表列時,資料欄引擎不會立即更新資料欄儲存區中的資料。而是將資料欄儲存庫中受影響的內容標示為無效,並使用資料欄儲存庫中的資料欄導向資料,以及資料列快取和資料庫儲存空間中的資料列導向資料,規劃及執行查詢。

隨著時間推移,越來越多資料區塊失效,資料欄引擎提供的查詢效能改善幅度會降低,直到資料欄資料需要重新整理,才能重新提升查詢效能。達到這個重新整理門檻時,資料欄引擎會使用背景工作重新整理直欄儲存區中的無效資料。根據預設,資料欄引擎的重新整理門檻為 50,表示當資料欄儲存庫中 50% 的內容失效時,系統會將該內容標示為需要重新整理。您可以變更這項重新整理門檻,調整自動重新整理的負擔,並可能為應用程式工作負載取得更佳的持續查詢效能。

此外,您隨時可以手動重新整理載入資料欄引擎的資料表和 ScaNN 索引。通常,如果您希望資料表的變更在變更後盡快反映在資料欄儲存庫中,就會執行手動重新整理。

檢查無效資料百分比

當應用程式在資料表中新增、刪除或更新資料列時,資料欄引擎會將資料欄儲存庫中受影響的資料標示為無效。您可以查詢 g_columnar_relations 檢視表,查看資料表和 materialized view 的無效資料百分比。這有助於判斷是否需要手動重新整理,或調整自動重新整理門檻。

如要查看資料欄儲存庫中所有關係的無效百分比,請執行下列查詢:

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 替換為包含資料表或 materialized view 名稱的字串。如果資源位於 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 區段下方,將 google_columnar_engine.refresh_threshold_percentage 參數新增至 parameters 區塊:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: 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. 套用更新後的 DBCluster 資訊清單:

    kubectl apply -f DB_CLUSTER_MANIFEST

    將 DB_CLUSTER_MANIFEST 替換為您修改的 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 替換為字串,其中包含要重新整理的索引名稱。