優化 Azure 和 DB Cosmos成本

適用于 :SQL API Cassandra API Gremlin API Table API Azure Cosmos DB API for MongoDB

本文將說明讀取和寫入要求如何轉換成 要求單位 ,以及如何優化這些要求的成本。 讀取操作包括點讀取和查詢。 寫入作業包括插入、取代、刪除及更新專案。

Azure Cosmos DB 提供一組豐富的資料庫作業,可在容器內的專案上執行。 每項作業的相關成本會因完成作業所需的 CPU、IO 和記憶體而不同。 您可以把要求單元 (RU) 視為執行各種資料庫作業以回應要求所需的資源之單一量值,而不是考慮和管理硬體資源。

測量要求之 RU 費用

若要瞭解要求的實際成本,並評估優化的效果,測量您要求的 RU 費用非常重要。 您可以使用 Azure 入口網站或檢查透過其中一個 SDK 從 Azure Cosmos DB 寄回的回應,以取回此成本。 請參閱在 Azure Cosmos DB 中尋找要求單位費用,以取得如何達成此目標的詳細指示。

讀取資料:點讀取和查詢

在 Azure Cosmos DB 中的讀取作業,一般會按照以下順序排序,從最快速/最有效率到更慢/較低效率的 RU 使用方式:

  • 點會 (單一專案識別碼和分區鍵上的索引鍵/值) 。
  • 在單一分區鍵內具有篩選子句的查詢。
  • 查詢在任何屬性上沒有相等或範圍篩選子句。
  • 不含篩選的查詢。

一致性層級的角色

使用強或有限過期一致性等級時,任何讀取作業的 RU 成本 (點讀取或查詢) 倍。

點讀取

除了使用一致性等級 (讀取點之 RU 費用的唯一) 是所取專案的大小。 下表顯示大小為 1 KB 和 100 KB 的專案的點讀取的 RU 成本。

專案大小 讀取一點的成本
1 KB 1 RU
100 KB 10 個 RUs

由於點在專案識別碼) 上讀取 (鍵/值查詢是最有效率的讀取類型,因此您應該確定專案識別碼具有有意義的值,以便盡可能以讀取 (而不是查詢) 來取得專案。

查詢

查詢的要求單位取決於許多因素。 例如,載入/Cosmos的 Azure 索引數、索引的查詢次數、查詢編譯時間等詳細資料。 Azure Cosmos DB 保證在同一個資料上執行相同的查詢時,即使重複執行,也會耗用相同數目的要求單位。 使用查詢執行度量的查詢設定檔讓您瞭解要求單位的花費方式。

在某些情況下,您可能會在分頁執行查詢時看到 200 和 429 個回應,以及可變要求單位,這是因為查詢會根據可用的 RUs 儘快執行。 您可能會看到查詢執行中斷到伺服器與用戶端之間的多個頁面/往返。 例如,可能會將 10,000 個專案退回為多個頁面,每個頁面會根據針對該頁面執行的計算收費。 當您加總這些頁面時,您應該獲得與整個查詢相同的 RUs 數目。

疑難排解查詢的度量單位

查詢所耗用之 (包括使用者定義的函數) 主要取決於函數內體。 若要瞭解查詢執行在 UDF 中的花費時間,以及耗用 RU 數量,最簡單的方法是啟用查詢度量。 如果您使用 .NET SDK,以下是 SDK 所返回的範例查詢度量:

Retrieved Document Count                 :               1              
Retrieved Document Size                  :           9,963 bytes        
Output Document Count                    :               1              
Output Document Size                     :          10,012 bytes        
Index Utilization                        :          100.00 %            
Total Query Execution Time               :            0.48 milliseconds 
  Query Preparation Times 
    Query Compilation Time               :            0.07 milliseconds 
    Logical Plan Build Time              :            0.03 milliseconds 
    Physical Plan Build Time             :            0.05 milliseconds 
    Query Optimization Time              :            0.00 milliseconds 
  Index Lookup Time                      :            0.06 milliseconds 
  Document Load Time                     :            0.03 milliseconds 
  Runtime Execution Times 
    Query Engine Execution Time          :            0.03 milliseconds 
    System Function Execution Time       :            0.00 milliseconds 
    User-defined Function Execution Time :            0.00 milliseconds 
  Document Write Time                    :            0.00 milliseconds 
  Client Side Metrics 
    Retry Count                          :               1              
    Request Charge                       :            3.19 RUs  

優化查詢成本的最佳作法

針對成本優化查詢時,請考慮下列最佳做法:

  • 共同定位多個實體類型

    請嘗試在單一或較小的容器中共同定位多個實體類型。 這個方法不僅從價格角度,而且對查詢執行和交易也會產生好處。 查詢的範圍是單一容器;而透過儲存程式/觸發程式在多個記錄上的原子交易,則範圍會以單一容器內的分區鍵為範圍。 在同一個容器內共同定位實體可以減少網路往返次數,以解決記錄之間的關聯。 因此,它可提高端對端績效、針對較大的資料集啟用多個記錄的原子交易,因而降低成本。 如果針對您的案例,在單一或較小的容器數量內共同定位多個實體類型是一項困難,通常是因為您移移現有的應用程式,而您不想進行任何程式碼變更 ,則應考慮在資料庫層級上部署輸送量。

  • 測量及調整較低的要求單位/第二次使用量

    查詢的複雜性會影響作業 (RUs) 個要求單位。 謂詞數、謂詞的性質、UDF 數目,以及源資料集的大小。 所有這些因素都會影響到查詢作業的成本。

Azure Cosmos DB 使用預配置輸送量模型,在輸送量和延遲方面提供可預測的績效。 所調配的輸送量會以每秒要求 單位 或 RU/s 表示。 要求單位 (RU) 是比執行要求所需的計算資源 ,例如 CPU、記憶體、IO 等邏輯的抽象。 已設定 RUs (輸送量) 並專屬於您的容器或資料庫,以提供可預測的輸送量和延遲。 預配置輸送量可讓 Azure Cosmos DB 提供可預測且一致的績效、保證低延遲,以及在任何規模上高可用性。 要求單位代表標準化貨幣,可簡化應用程式需要多少資源的推斷。

要求標頭中退回的要求費用會指出給定查詢的成本。 例如,如果查詢會返回 1000 個 1 KB 的專案,則作業的成本為 1000。 因此,伺服器在一秒鐘內只會遵守兩個這類要求,然後再對後續要求進行限制。 詳細資訊請參閱要求 單位 文章和要求單位計算機。

撰寫資料

撰寫專案的 RU 成本取決於:

  • 專案大小。
  • 索引策略涵蓋且需要編制索引的屬性數目。

插入 1 KB 專案,而不需要在 ~5.5 個 RUS 左右建立索引成本。 取代專案的成本是插入同一個專案所需費用的兩倍。

優化寫入

優化寫入作業的 RU 成本最好的方法,就是將專案與編制索引的屬性數量進行許可權化。

  • 在 Azure 中儲存Cosmos DB 會導致高 RU 費用,並視為反模式。 特別是,請勿儲存不需要查詢的二進位內容或大量文字。 最佳做法是在Azure Blob 儲存體中放入這類資料,並儲存參照 (或將) 連結至您寫入 Azure Cosmos DB 的專案中的 blob。
  • 優化索引策略,只索引查詢篩選的屬性,可能會大幅改變寫入作業所耗用之 RUs。 建立新容器時,預設索引策略會索引項目目內找到的每個屬性。 雖然這是開發活動的預設值,但強烈建議在進入生產階段或工作負載開始收到大量流量時,重新評估及自訂索引策略。

執行大量使用資料時,建議您使用Azure Cosmos DB 大量執行器庫,因為它的設計是優化這類作業的 RU 使用。 您也可以選擇使用建在同一個文件庫中的 Azure 資料工廠。

下一個步驟

接下來,您可以繼續閱讀下列文章,深入瞭解 Azure Cosmos DB 的成本優化: