全部產品
Search
文件中心

Hologres:Compaction(Beta)

更新時間:Jul 02, 2025

當離線匯入大量資料或大量執行deleteupdate操作後,可能會由於資料檔案的片段化導致讀寫效能下降,此時需要執行壓縮(Compaction)操作。Compaction操作將多個資料檔案合并成一個更大的資料檔案,執行Compaction操作有助於重新組織資料存放區結構,提高讀寫效率。本文介紹在Hologres中如何進行Compaction操作。

背景資訊

Hologres的資料寫入模型使用了與LSM-Tree類似的資料結構,資料都是以Append Only的方式寫入儲存的。這種資料結構可以將隨機寫變為順序寫,這是一種面向寫最佳化的資料結構,能夠有效提升寫入的輸送量。寫入的資料檔案需要通過Compaction合并成一個更大的資料檔案。

Hologres中存在兩類Compaction操作:

  • Auto Compaction

    Hologres的Auto Compaction是分層的。最多有五層,當單層檔案超過五個時,會自動觸發Compaction,Compaction完成後的檔案會放到下一層。例如Level 0的檔案達到五個後,會自動觸發Compaction,將五個檔案合并,合并後的檔案預設最大為64 MB,如果檔案大小超過64 MB後,會產生多個檔案,合并後的檔案會放到Level 1,示意圖如下所示:

    image.png

  • Full Compaction

    Auto Compaction只會發生在某層內部,不會跨層合并檔案。Full Compaction會將所有層的所有檔案進行合并,合并後每個檔案預設的最大的大小為64 MB,合并後的檔案會放到最後一層。

使用限制

  • 僅Hologres V2.1及以上版本支援手動觸發Full Compaction,如果您的執行個體是V2.1以下版本,請您使用自助升級或加入即時數倉Hologres交流群申請升級執行個體,詳情請參見如何擷取更多的線上支援?

  • 僅列存表和行列共存表可以主動觸發Full Compaction。

  • 行列共存表執行Full Compaction之後,僅列存部分會執行Full Compaction。

使用說明

  • 使用情境:

    對於如下情境可以主動觸發Full Compaction,合并小檔案,提升查詢效率:

    • 離線匯入大量資料後。

    • 大量執行delete或者update操作之後。

    說明

    Full Compaction時會佔用大量IO和CPU資源,請在寫入低峰期執行。一般執行會持續10分鐘以上。

  • 命令文法:

    SELECT hologres.hg_full_compact_table(
      '<schema_name.table_name>'
      [,'max_file_size_mb=<value>']
    );
  • 參數說明:

    參數名稱

    說明

    是否必填

    預設值

    schema_name.table_name

    需要執行Full Compaction操作的表名稱。

    max_file_size_mb

    (不推薦隨意更改)指定需要執行Full Compaction後組建檔案的最大大小,取值必須是正整數,單位為MB

    若調小此參數值,會導致資料檔案變多,檔案過多會導致查詢變慢。

    64

  • 使用樣本:

    • 對錶public.lineitem執行Full Compaction操作:

      SELECT hologres.hg_full_compact_table( 'public.lineitem');
    • 對錶public.lineitem執行Full Compaction操作,指定合并後輸出的檔案大小最大為256 MB:

      SELECT hologres.hg_full_compact_table(
       'public.lineitem',
       'max_file_size_mb=256'
      );

使用Serverless Computing執行Compaction

Serverless Computing對資料匯入後的Compaction支援情況如下:

  • V3.1.11版本前,使用Serverless Computing執行資料匯入任務時,背景非同步Compaction任務仍會使用本執行個體資源執行。

  • V3.1.11版本起,使用Serverless Computing執行資料匯入任務時,支援使用Serverless資源同步完成對新資料檔案的Compaction,不再佔用本執行個體資源。該功能會少量增加資料匯入時間長度,同時極大提升執行個體穩定性。該功能有如下前提條件:

    • 需開啟GUC參數hg_serverless_computing_run_compaction_before_commit_bulk_load

    • 僅支援對新資料檔案的同步Compaction。如果表存在舊檔案TTL到期需Compaction清理檔案,仍會使用本執行個體資源非同步執行。

    • 同步Compaction僅支援匯入熱存(標準儲存),暫不支援匯入冷存(低頻訪問儲存)。