資料列變更時,資料欄引擎會將 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 資料庫旗標值。
控制台
- 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。
- 按一下要設定的執行個體所屬叢集名稱。
- 在「叢集內的執行個體」部分,找出執行個體,然後點選「編輯」。
- 在「Flags」部分,新增旗標或修改現有的
google_columnar_engine.refresh_threshold_percentage旗標。 - 請將值設為
0至100之間的整數 (或設為-1停用自動重新整理功能)。這個值代表觸發重新整理的無效資料百分比。 - 按一下「完成」。
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 替換為字串,其中包含要重新整理的索引名稱。