Microsoft Fabric 的 GraphQL API 提供了一種高效查詢資料的強大方法,但效能最佳化是確保流暢且可擴展效能的關鍵。 無論您是處理複雜的查詢還是優化回應時間,下列最佳做法都可協助您從 GraphQL 實作中獲得最佳效能,並將 Fabric 中的 API 效率最大化。
誰需要效能優化
效能優化對以下方面至關重要:
- 應用程式開發人員 構建高流量的應用程式,以查詢 Fabric 湖屋與倉庫
- 資料工程師優化 Fabric 資料存取模式,以適用於大規模分析應用和 ETL 流程。
- Fabric 工作區管理員 負責管理容量消耗並確保資源的有效利用
- BI 開發者提升基於 Fabric 資料的客製化分析應用的回應時間
- DevOps 團隊 在使用 Fabric API 的生產應用程式中排除延遲問題
當你的 GraphQL API 需要有效處理生產工作負載,或遇到效能問題時,請使用這些最佳實務。
區域劃分
跨區 API 呼叫是高延遲的常見原因。 為了達到最佳效能,請確保您的客戶應用程式、Fabric 租戶、容量與資料來源皆位於同一 Azure 區域。
檢查你的租戶區域
要找到你的 Fabric 租戶所在的區域:
- 以管理員帳號登入 Microsoft Fabric 入口網站
- 請選擇右上角的說明圖示(?)
- 在說明窗格底部,選擇「關於布料」
- 請注意租戶資料中顯示的區域
請查看你的容量區域
你的 GraphQL API 在特定容量內運作。 要找到容量區域:
檢查你的資料來源區域
資料來源的位置也會影響效能:
- Fabric 資料來源 (Lakehouse、Data Warehouse、SQL Database):這些來源使用與工作區容量相同的區域
- 外部資料來源 (Azure SQL 資料庫等):請在 Azure 入口網站中查詢資源位置
最佳實務:在與 Fabric 容量及資料來源相同的區域部署用戶端應用程式,以降低網路延遲。
效能測試最佳實務
評估 API 效能時,請遵循以下指引以獲得可靠且一致的結果。
使用真實的測試工具
使用與你生產環境相近的工具進行測試:
- 腳本或應用程式:使用 Python、Node.js或 .NET 腳本模擬實際客戶行為
- HTTP 連線池:重用 HTTP 連線以降低延遲,這對跨區域情境尤其重要
- 會話管理:在請求之間維持會話,以準確反映實際使用情況
範例資源:
- 效能測試腳本範例 (Python 筆記本)
- Python 中的 HTTP 會話物件
- .NET 的 HttpClient 指導方針
收集有意義的指標
為了準確評估績效:
- 自動化測試:使用腳本或效能測試工具,在限定期間內持續執行測試
- 預熱 API:在測量效能前執行多個測試查詢(參見 預熱需求)
- 分析分布:使用百分位指標(P50、P95、P99)而非僅用平均值來理解延遲模式
- 負載測試:以現實的同時請求量來衡量效能
- 文件條件:記錄一天中的時間、容量使用率,以及測試期間任何同時進行的工作負載
常見效能問題
了解這些常見問題有助於你有效診斷並解決績效問題。
熱身要求
問題:第一個 API 請求比後續請求花費的時間明顯長得多。
原因如下:
- API 初始化:當 API 環境閒置時,需在第一次呼叫時初始化,這會增加幾秒的延遲
- 資料來源熱身:許多資料來源(尤其是 SQL Analytics 端點與資料倉儲)在閒置後存取時會進入暖機階段
- 合併初始化:若 API 與資料來源皆閒置,初始化時間為複數
Solution:
- 在測量效能前執行 2-3 次測試查詢
- 對於生產應用程式,請實作健康檢查端點來保持 API 的溫度
- 考慮使用排程查詢或監控工具,在營業時間內維持活躍狀態
區域錯位
問題:所有請求延遲都持續很高。
為什麼會這樣: 跨區域網路呼叫會增加顯著延遲,尤其當客戶端、API 和資料來源位於不同 Azure 區域時。
Solution:
- 確認你的客戶應用程式、Fabric 容量和資料來源是否在同一區域
- 若跨區域存取不可避免,請採用積極的快取策略。
- 考慮部署區域性 API 副本以支援全球應用
資料來源效能
問題:即使 API 已經預熱並區域對齊,API 請求仍然很慢。
為什麼會這樣: GraphQL 的 API 作為對資料來源的查詢介面。 若底層資料來源存在效能問題——例如缺少索引、複雜查詢或資源限制——API 會繼承這些限制。
Solution:
- 直接測試:直接查詢資料來源(使用 SQL 或其他原生工具)以建立基準效能
-
優化資料來源:
- 為經常查詢的欄位新增適當的索引
- 考慮適合您使用情境的資料儲存庫: Fabric決策指南——選擇資料儲存
- 檢視查詢執行計畫以取得最佳化機會
- 適當容量:確保您的 Fabric 容量 SKU 提供足夠的運算資源。 請參閱 Microsoft Fabric 概念 以獲得選擇適當容量的指引。
查詢設計
問題:有些查詢表現良好,有些則較慢。
原因如下:
- 過度抓取: 請求超過必要的欄位會增加處理時間
- 深度巢狀:擁有多層巢狀關係的查詢需要多個解析器執行
- 缺少篩選條件:若查詢未使用適當篩選條件,可能會回傳過多資料
Solution:
- 請只索取你在 GraphQL 查詢中需要的欄位
- 盡可能限制巢狀關係的深度
- 在查詢中使用適當的篩選條件和頁碼
- 適當時,考慮將複雜查詢拆解成多個較簡單的查詢