新增、刪除或更新資料表列時,資料欄引擎不會立即更新資料欄儲存區中的資料。而是將資料欄儲存庫中受影響的內容標示為無效,並使用資料欄儲存庫中的資料欄導向資料,以及資料列快取和資料庫儲存空間中的資料列導向資料,規劃及執行查詢。
隨著時間推移,越來越多資料區塊失效,資料欄引擎提供的查詢效能改善幅度會降低,直到資料欄資料需要重新整理,才能重新提升查詢效能。達到這個重新整理門檻時,資料欄引擎會使用背景工作重新整理直欄儲存區中的無效資料。根據預設,資料欄引擎的重新整理門檻為 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
變更資料欄引擎的重新整理門檻
如要變更資料欄引擎的重新整理門檻,請完成下列步驟:
開啟
DBCluster資料庫叢集資訊清單。在
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之間的整數值。這個值指定內容中必須失效的資料區塊百分比,達到這個百分比後,內容就會標示為待重新整理。
套用更新後的
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 替換為字串,其中包含要重新整理的索引名稱。