本頁說明如何維護 PostgreSQL 適用的 AlloyDB 中,直欄引擎資料欄儲存庫的資料新鮮度。
新增、刪除或更新資料表列時,資料欄引擎不會立即更新資料欄儲存庫中的資料。而是將資料欄儲存空間中受影響的內容標示為無效,並使用資料欄儲存空間中的資料欄導向資料,以及資料列快取和資料庫儲存空間中的資料列導向資料,規劃及執行查詢。
隨著越來越多資料區塊失效,資料欄引擎提供的查詢效能改善幅度會逐漸縮小,直到需要重新整理資料欄資料,才能再次提升查詢效能。達到這個重新整理門檻時,直欄引擎會使用背景工作,重新整理直欄儲存空間中的無效資料。根據預設,直欄引擎會使用 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
變更資料欄引擎的重新整理門檻
如要變更直欄引擎的重新整理門檻,必須修改 AlloyDB 執行個體的 google_columnar_engine.refresh_threshold_percentage
資料庫標記值。
控制台
- 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。
- 按一下要設定執行個體的叢集名稱。
- 在「叢集中的執行個體」部分中,找出執行個體並按一下「編輯」。
- 在「Flags」部分中,新增旗標或修改現有的
google_columnar_engine.refresh_threshold_percentage
旗標。 - 請將值設為
1
至100
之間的整數。這個值代表觸發重新整理的無效資料百分比。 - 按一下 [完成]。
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:介於
1
和100
之間的整數值。這個值指定內容中必須失效的資料區塊百分比,內容才會標示為待重新整理。 - CLUSTER_ID:執行個體所在叢集的 ID。
- REGION_ID:叢集所在的區域。
- PROJECT_ID:專案 ID。
手動重新整理資料欄儲存區中的資料表和 ScaNN 索引
您隨時可以使用專屬的 SQL 函式,手動重新整理資料表和直欄引擎中的 ScaNN 索引。
如要重新整理資料欄引擎中的資料表資料,請執行 google_columnar_engine_refresh
函式。
SELECT google_columnar_engine_refresh(TABLE_NAME);
將 TABLE_NAME
替換為包含資料表或具體化檢視區塊名稱的字串。如果資源位於 public
以外的結構定義中,請使用 SCHEMA_NAME.TABLE_NAME
格式指定結構定義名稱,例如 myschema.mytable
。
同樣地,如要在資料欄引擎中手動重新整理 ScaNN 索引,請執行 google_columnar_engine_refresh_index
函式。
SELECT google_columnar_engine_refresh_index(index => INDEX_NAME);
將 INDEX_NAME
替換為包含要重新整理的 ScaNN 索引名稱的字串。