Microsoft Fabric 中的跨工作負載資料表維護與優化

Microsoft Fabric 中的 Delta 資料表可從 OneLake 中儲存的資料,服務 Spark、SQL 分析端點、Power BI Direct Lake、Warehouse 及其他 Fabric 體驗。 最佳跨工作負載效能取決於兩個因素:

  • 建立和維護表格的工作量。
  • 吞噬桌面的引擎。

Lakehouse 資料表通常由 Spark、Fabric pipeline 複製活動 或 Dataflow Gen2 管理。 Spark 是最常見的寫入工具,並提供最廣泛的配置與維護控制選項。 倉庫與資料庫鏡像會自動管理它們的實體佈局。 鏡像目錄會保留來源系統中管理的版面配置。 消費者需求大致相容,但 Power BI Direct Lake 有額外的儲存需求以達到最佳效能。

只要需求相容,就使用同一張共用資料表。 關於需要另建另一張資料表的例外,請參見 「何時建立另一張資料表」。

了解版面所有權

首先,先確認是哪個工作負載負責實體資料表的配置。 下表中的控制項是與跨負載工作表佈局與維護相關的關鍵控制,並非各引擎功能的詳盡清單。

資料存放區 寫入器或擷取方法 版面與維護權責歸屬 按鍵控制
Lakehouse Spark 由使用者管理 檔案大小: 自適應目標檔案大小 與 檔案層級壓縮目標。
寫入與維護: 刪除向量、 自動壓縮、 優化寫入, OPTIMIZE以及 VACUUM。
資料組織: 液態聚類、 分割、 Z 階與 V 階。
Lakehouse Fabric 管線複製活動或 Dataflow Gen2 服務負責寫入資料;湖倉所有者負責維護資料表 目的地專屬的寫入設定。 可透過 Spark、 Lakehouse 維護或 管線維護活動,分別執行相容維護。
倉儲 Fabric Data Warehouse、Fabric 管線複製活動或資料流程 Gen2 倉庫管理 資料叢集 與 倉庫層級的 V-Order 設定。
鏡像物品 鏡像服務 這取決於 鏡像類型 資料庫鏡像使用系統管理的 V 級 Delta 佈局,且沒有直接的佈局控制。 鏡像目錄保留原始檔案的排版,支援時可在原始碼系統中進行優化。

跨工作負載指引

下表總結了生產者與消費者建議的做法。

Producer Consumer 建議方法
Lakehouse:Spark 作家 Spark 使用 Fabric Spark 2.0 或更新版本的預設值並啟用自動壓縮功能。 當已測量的述詞可受益於更佳的檔案略過時,請考慮使用液態叢集。
Lakehouse:Spark 作家 SQL 分析端點 使用與 Spark 建議相同的配置。 不要只為了 SQL 分析端點效能而設定固定目標檔案大小、任意列限制或 V-Order 。
Lakehouse:Spark 作家 Power BI Direct Lake 使用與 Spark 建議相同的配置,並額外啟用 V-Order,或使用 readHeavyForPBI 資源設定檔。
Lakehouse:Fabric 管線或 Dataflow Gen2 編譯器 Spark、SQL 分析端點,或 Power BI Direct Lake 監控產生的檔案佈局,並另行排程相容的湖屋維護作業。 某些目的地模式,如 Dataflow Gen2 增量更新,會施加維護限制。
倉儲 Fabric Data Warehouse 或 Spark 使用由系統管理的版面配置。 Fabric Data Warehouse 自動管理壓縮整理和其他維護作業。 利用 資料聚類 來改善具有重複選擇性謂詞的工作負載的檔案跳躍率。
倉儲 Power BI Direct Lake 保留 預設的倉庫V-Order設定。 當資料 聚類 有助於共享查詢模式時,請使用。
Mirroring Spark、SQL 分析端點,或 Power BI Direct Lake 對於資料庫鏡像,請使用由系統管理的 V-Ordered Delta 配置。 對於鏡射目錄,若支援,請在來源系統中最佳化其底層檔案。 請參閱什麼是 Fabric 中的鏡像?

優化 Lakehouse 表格

Lakehouse Delta 資料表無論是 Spark、Pipeline 複製活動 或 Dataflow Gen2 撰寫,都需要明確的維護策略。 Spark 是本節的主要範例,因為它提供了 Fabric 中最廣泛的佈局與維護控制。

這很重要

資料表維護對於跨引擎的最佳寫入與讀取效能至關重要。 即使是僅附加的工作負載,起初無需維護就表現良好,也可能累積過多的小檔案,影響 Spark、SQL 分析端點、Direct Lake 及外部資料讀取器。 有關自動與手動壓實方法,請參見 壓縮三角表 。

使用 Spark 執行時的預設值

當 Spark 寫入資料表時,請使用 Fabric Spark 執行階段 2.0 或更新版本的預設設定:

  • 保持啟用 自適應目標檔案大小 。 它會自動為每個資料表選擇一個 128 MB 到 1 GB 的目標。
  • 保持檔案 層級壓縮目標 啟用,以避免重寫先前符合適應目標的檔案。
  • 保持刪除向量啟用。
  • 不要隨意設定每個檔案的最大列數。 資料列的寬度各不相同,因此對於較窄的資料表,資料列數上限可能會產生過多的小型檔案。

在 Fabric Spark 執行階段 1.3 中,自適應目標檔案大小、檔案層級壓縮目標和刪除向量可作為選擇啟用的設定使用。

當管線複製活動或 Dataflow Gen2 寫入該資料表時,請檢查產生的檔案布局,並另行安排維護作業。 不要以為這些寫程式會套用 Spark 執行時的預設值。

這很重要

使用增量重新整理的 Dataflow Gen2 Lakehouse 目的地不支援 OPTIMIZE 或 REORG TABLE。 請遵守 Dataflow Gen2 的增量刷新限制。

防止並壓縮小型檔案

對於 Spark 撰寫的資料表,請使用 自動壓縮。 此功能在寫入後評估資料表碎片,僅在需要時執行壓縮。 這樣一來,在執行維護前就無需另外進行資料表健康檢查。

請參考以下指引來處理例外及輔助功能:

Scenario 建議方法
Spark 撰寫的表格 啟用 自動壓實 作為預設維護策略。
串流式或微批次寫入 啟用 自動壓縮 並 優化寫入 ,以減少小檔案累積。
具有嚴格寫入延遲要求的工作負載 將 OPTIMIZE 另行排程,而不要執行同步自動壓實。
現有表格,包含累積的小檔案 先執行一次 OPTIMIZE,然後啟用 自動壓實功能,以便持續進行維護。
經常更新、刪除或合併的資料表 保持 刪除向量 和 自動壓實 為啟用狀態。

OPTIMIZE 會壓縮檔案,並在檔案中超過 5% 的記錄被刪除向量參考時,自動清除該檔案的刪除向量。 只有在您必須實際清除低於該門檻的記錄,或需要滿足特定的合規要求時,才使用 REORG TABLE ... APPLY (PURGE)。

Note

自動壓縮 只有在分割區同時達到其小檔案觸發條件時,才會清除 刪除向量 。 如果工作負載在未產生小檔案的情況下進行更新或刪除,請定期執行 OPTIMIZE 以清除符合資格的刪除向量。 當你必須強行進行身體清洗時使用 REORG TABLE ... APPLY (PURGE) 。

使用獨立的排程執行 VACUUM,以在保留期過後移除未參考的檔案。 VACUUM 雖然回收儲存空間,但不會改善主動檔案的配置。

Warning

在未評估時間回溯需求以及並行讀取者或寫入者之前,不要縮短 VACUUM 保留期間。 過早移除檔案可能會導致所需的表格版本無法取得。

整理用於略過檔案的資料

當重複的篩選或處理模式可因改善略過檔案而獲益時,請使用液態分群。 液態叢集資料表需要 OPTIMIZE或自動壓縮 來整理新寫入的資料。

避免預設分割。 當有特定需求足以合理化這些操作上的取捨時,請使用它;例如,隔離會跨彼此不重疊的分割區更新、刪除或合併資料的並行寫入作業。 欲了解更多資訊,請參閱「何時使用分割」。

對於現有的分割資料表,當選擇性謂詞經常在分割區內依相同欄位進行篩選時,請考慮使用 Z-Order。

優化倉庫管理的資料表

Fabric Data Warehouse 無論擷取方式如何,都能管理實體 Delta 表格的佈局。

利用 Warehouse 提供的策略控制來調整資料版面:

  • 當查詢重複使用選擇性謂詞於同一欄位時,對大型資料表應用 資料聚類 。
  • 請持續啟用 V-Order ,以支援讀取導向及混合工作負載。 V-Order預設是啟用的。
  • 考慮 關閉 V-Order 以處理寫入密集型倉庫工作負載。

Warning

停用 V-Order 是倉庫層級的不可逆操作。 在停用前先測試完整的讀寫工作負載。

欲了解完整的倉庫指引,請參閱Fabric Data Warehouse中的績效指引。

優化鏡像資料

你能否改善實體版面配置,取決於 Fabric 是否複製資料或參考原始檔案:

  • 資料庫鏡像:Fabric 將來源資料複製到 OneLake 的 Delta 表格,並管理 V-Ordered 檔案的佈局與維護。 你無法直接在鏡像目的地上設定目標檔案大小、刪除向量清理、液態叢集、分割區設定或 V-Order。
  • 鏡像目錄:Fabric 會同步中繼資料,並使用 OneLake 捷徑就地參照來源資料。 Fabric 不會重寫或維護這些檔案。 當支援功能允許時,改善原始碼系統的實體佈局與清理。 這些變更可以透過快捷鍵看到,無需在 Fabric 中建立另一個副本。

針對資料庫鏡像資料:

  • 使用選擇性謂詞,避免在 Spark 和 SQL 查詢中加入不必要的欄位。
  • 設計 Power BI 語意模型與 DAX 指標,以有效利用 Direct Lake 的使用。

鏡像目錄:

  • 使用原始碼平台支援的資料表維護與版面配置功能。
  • 評估查詢捷徑的 Fabric 使用者的原始檔案與列群組分布。
  • 對於 Direct Lake,當來源配置無法滿足效能需求時,考慮建立額外的維度建模、 V 排序 的服務層。

關於鏡像概念、類型及支援來源,請參見《什麼是 Fabric 中的鏡像?》以及元資料鏡像如何運作。

應用針對消費者的優化

Spark 和 SQL 分析端點在相同的自適應湖屋佈局下表現良好。 使用自適應目標檔案大小,避免產生過多小型檔案,並在已測得的述詞可受益於改進的檔案略過時,套用液態叢集。 不要只為了 Spark 或 SQL 分析端點效能而啟用 V-Order 。 有關引擎的具體細節,請參閱 SQL 分析端點效能考量。

Power BI Direct Lake

Direct Lake 使用相同的底層 Delta 表,但新增了與轉碼與 增量框架相關的建議:

  • 檔案與列組配置:避免小 列組 及列組分布不均。 此配置會產生更多 VertiPaq 欄位段,並增加轉碼開銷。
  • V-Order:請遵循 跨工作負載指引中的提供者特定建議。 對於主要透過 Direct Lake 使用的 Spark 撰寫的資料表,請啟用 V-Order 或使用 readHeavyForPBI 資源設定檔。
  • 更新模式:盡可能偏好附加式更新 模式 ,以保留現有 Parquet 檔案並支援增量框架。

Note

Direct Lake 通常在 100 萬至 1600 萬行的行組中表現最佳。 在變更受支援的產生器設定之前,請先評估資料列群組分佈與 Direct Lake 效能。

對於 Spark 撰寫的資料表, spark.sql.parquet.native.writer.maxRowGroupRowCount 當 原生執行引擎 寫入 Parquet 檔案時,會設定每列群組的最大列數。 預設值為 0,不施加最大值。 若分析顯示列群組大小影響 Direct Lake 效能,請先設定測試過的限制,再撰寫或重寫表格。 例如:

spark.conf.set("spark.sql.parquet.native.writer.maxRowGroupRowCount", 8_000_000)

不要只為了達到特定的列數而設定限制。 列寬、壓縮、檔案分布與容量平行性也會影響效能。 使用 Delta Analyzer 來評估產生的版面配置。

關於框架、轉碼、列群組、更新模式及 Delta 分析器的詳細指引,請參見 「了解 Direct Lake 查詢效能」。

將指引套用到獎章層

銅、銀、金代表資料用途與精煉。 它們不判定版面配置是由使用者管理還是由系統管理,也不要求為每個取用者分別建立獨立副本。

層 主要目標 跨工作負載指引
銅牌(著陸) 保持原始碼的忠實度與擷取吞吐量 在使用 auto compaction 維護由 Spark 寫入的資料表時,優先考量寫入吞吐量。 除非你刻意為該用途設計模型和資料形狀,否則避免在原始青銅資料表上使用 Power BI Direct Lake 語意模型。
銀(精選) 提供經過驗證且符合標準的資料以供重複使用 在相容的 Fabric 使用者間重複使用該表格。 對於由 Spark 寫入的 Lakehouse 資料表,僅在 Direct Lake 為主要取用者時才啟用 V-Order。
黃金(服務) 提供可直接用於業務的維度、事實資料、彙總與分析模型 偏好此層用於 Direct Lake 語意模型。 可在相容消費者間重複使用表格,並套用本文所述的生產者專屬控制措施。

解決佈局與維護問題

使用以生產者為意識的修復措施。 當目的模式支援這些操作時,對湖屋資料表套用 Spark 維護指令。 將訊號視為指標而非通用閾值,並根據資料表的寫入模式與使用者效能進行驗證。

狀況 訊號 湖倉資料表 倉庫表
過多的小檔案 檔案數量增加速度超過活動資料表大小,且檔案數量仍低於自適應目標值。 使用 Spark 時,先 OPTIMIZE 對現有待辦事項執行一次性處理,然後啟用 自動壓縮。 對於管線複製活動或 Dataflow Gen2 寫入作業,請另行排程受支援的 Lakehouse 維護。 沒有行動。 倉庫壓實是自動化的。
舊版超大檔案 檔案數量遠高於目前的自適應目標,且檔案數量過少,限制了掃描平行性。 透過覆寫 CREATE OR REPLACE TABLE AS SELECT 或啟用 自適應目標檔案大小 來重寫資料表。 沒有行動。 Warehouse 會自動管理檔案大小。
刪除向量累積 DESCRIBE HISTORY 指標 顯示刪除向量的新增或更新速度快於壓縮移除,可能導致 讀取負擔增加。 保持自動 壓縮 開啟。 若刪除向量持續累積而未觸發小檔案壓縮,則排程 OPTIMIZE。 僅在有明確的清除需求時才使用 REORG TABLE ... APPLY (PURGE)。 沒有行動。 清理工作由系統管理。
檔案跳過不良 選擇性述詞掃描資料表中的大部分資料,或 分群品質評估 顯示組織情況不佳。 使用 Spark 時,可以設定 液體叢集 或使用 Z-Order 來處理現有的分割資料表。 配置 倉庫資料叢集。
Direct Lake 轉碼額外負荷 Delta Analyzer 會顯示檔案過多、列群組較小,或更新後出現廣泛的重轉碼。 壓縮小型檔案、檢視 列組,並將 V-Order 套用到 Spark 撰寫的資料表。 可選擇性地設定 液體叢集 以提升 Parquet 檔案中的壓縮品質。 保持啟用V-Order並評估資料分群。
未被參照的檔案儲存空間增長 在資料變更作業後,OneLake 儲存體的增長速度快於使用中資料表大小的增長速度。 依照留任率要求運作 VACUUM 。 沒有行動。 清理工作由系統管理。

對於鏡像資料,請遵循 最佳化鏡像資料 中針對生產端的特定補救措施。 資料庫鏡像由系統管理;對於鏡像目錄,請在來源平台上執行受支援的維護作業。

針對 Lakehouse 資料表,Spark 支援的檢查選項包括:

  • 執行 DESCRIBE DETAIL 以檢查檔案數量、總大小及評估的 delta.targetFileSize.adaptive 屬性。
  • 跑 DESCRIBE HISTORY 去檢視寫入模式和維護歷史。
  • 當你需要詳細的 Direct Lake 列群組和更新模式分析時,可以使用 Delta Analyzer 。

檢查平均檔案大小

用 DESCRIBE DETAIL 來計算平均檔案大小,作為表格佈局的初步指標:

details = spark.sql("DESCRIBE DETAIL schema_name.table_name").first()

table_size_gb = details["sizeInBytes"] / (1024**3)
num_files = details["numFiles"]
avg_file_size_mb = (
    details["sizeInBytes"] / num_files / (1024**2)
    if num_files
    else 0
)

print(f"Table size: {table_size_gb:.2f} GB")
print(f"Number of files: {num_files}")
print(f"Average file size: {avg_file_size_mb:.2f} MB")

平均值可以隱藏分割區或最近與先前壓縮檔之間的偏斜。 若平均值顯示可能有佈局問題,請檢查個別 Parquet 檔案或使用 Delta 分析 儀評估分布,再調整維護設定。

何時建立另一張資料表

不要因為多個 Fabric 引擎會消耗資料就另建一個實體資料表。

當它有獨立用途時,建立另一個表格,例如:

  • 一種改變資料顆粒或業務意義的轉換或彙整。
  • 不同的安全性、保存或資料品質要求。
  • 共享資料表無法滿足的延遲或刷新需求。
  • 一種針對消費者的配置,其衡量效益超過儲存、處理、血統及治理成本。