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

資料列變更時,資料欄引擎會將 AlloyDB for PostgreSQL 中受影響的資料欄儲存庫資料標示為無效,查詢加速功能也會逐漸降低。如要維持查詢速度,您可以調整自動重新整理門檻,或手動重新整理資料表和向量索引。

新增、刪除或更新資料表資料列時,資料欄引擎不會立即更新資料欄儲存庫。而是使用資料欄儲存庫中的資料欄導向資料,以及資料列快取和資料庫儲存空間中的資料列導向資料,來規劃及執行查詢。

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

如要盡快將資料表變更反映在資料欄儲存庫中,請手動重新整理資料表,以及 HNSW 和 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';

將 INDEX_NAME 替換為包含向量索引名稱的字串。

變更資料欄引擎的重新整理門檻

如要變更資料欄引擎的重新整理門檻,請修改 AlloyDB 執行個體的 google_columnar_engine.refresh_threshold_percentage 資料庫旗標值。

控制台

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 按一下要設定的執行個體所屬叢集名稱。
  3. 在「叢集內的執行個體」部分,找出執行個體,然後點選「編輯」。
  4. 在「Flags」部分,新增旗標或修改現有的 google_columnar_engine.refresh_threshold_percentage 旗標。
  5. 請將值設為 0 至 100 之間的整數 (或設為 -1 停用自動重新整理功能)。這個值代表觸發重新整理的無效資料百分比。
  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:介於 0 和 100 之間的整數值 (或 -1,表示停用自動重新整理)。這個值會指定內容中必須失效的資料區塊百分比,達到這個百分比後,內容就會標示為重新整理。
  • CLUSTER_ID:執行個體所在叢集的 ID。
  • REGION_ID:叢集所在區域。
  • PROJECT_ID:專案 ID。

手動重新整理資料欄儲存庫中的資料表和向量索引

您隨時可以使用專屬 SQL 函式,手動重新整理資料欄引擎中的資料表和向量索引。支援的索引類型為 ScaNN 和 HNSW。

如要重新整理資料欄引擎中的資料表資料,請執行 google_columnar_engine_refresh 函式。

SELECT google_columnar_engine_refresh('TABLE_NAME');

將 TABLE_NAME 替換為包含資料表或 materialized view 名稱的字串。如果資源位於 public 以外的結構定義,請使用 SCHEMA_NAME.TABLE_NAME 格式指定結構定義名稱,例如 myschema.mytable。

同樣地,如要手動重新整理資料欄引擎中的向量索引,請執行 google_columnar_engine_refresh_index 函式。

SELECT google_columnar_engine_refresh_index(index => 'INDEX_NAME');

將 INDEX_NAME 替換為字串,其中包含要重新整理的索引名稱。