如何監視 Azure Cosmos DB 容器或帳戶的標準化 RU/秒

適用於:NoSQL MongoDB Cassandra Gremlin Table

適用於 Azure Cosmos DB 的 Azure 監視器提供計量檢視,以監視您的帳戶和建立儀表板。 預設會收集 Azure Cosmos DB 計量,此功能不需要您明確啟用或設定任何項目。

計量定義

標準化 RU 使用量計量是介於 0% 到 100% 之間的計量,用來協助測量資料庫或容器上已佈建建輸送量的使用率。 計量會以 1 分鐘間隔發出,並定義為時間間隔中所有分割區索引鍵範圍的最大 RU/秒使用率。 每個分割區索引鍵範圍會對應至一個實體分割區,並指派來保存某範圍可能雜湊值的資料。 一般而言,標準化 RU 百分比愈高,表示您已使用的佈建輸送量愈多。 計量也可用來檢視資料庫或容器上個別分割區索引鍵範圍的使用率。

例如,假設您有一個容器,其中您設定自動調整最大輸送量為 20,000 RU/秒 (在 2000 - 20,000 RU/秒之間調整),且您有兩個分割區索引鍵範圍 (實體分割區) P1 和 P2。 由於 Azure Cosmos DB 會將佈建的輸送量平均分散至所有分割區索引鍵範圍,P1 和 P2 可以各自在 1000 - 10,000 RU/秒之間調整。 假設間隔為 1 分鐘並以指定的秒為單位,且 P1 取用了 6000 個要求單位,而 P2 取用了 8000 個要求單位。 P1 的標準化 RU 使用量是 60%,而 P2 為 80%。 整個容器的整體標準化 RU 使用量上限 (60%,80%) = 80%。

如果您想要以每秒間隔查看要求單位使用量以及作業類型,則可以使用選擇加入功能診斷記錄並查詢 PartitionKeyRUConsumption 資料表。 若要取得應用程式在 Azure Cosmos DB 資源上所執行作業和狀態碼的高階概觀,您可以使用內建的 Azure 監視器要求總數 (API for NoSQL)、Mongo 要求Gremlin 要求Cassandra 要求計量。 您稍後可以依 429 狀態碼篩選這些要求,並依作業類型來分割要求。

當標準化 RU/秒偏高時有何情況及應對方式

當特定分割區索引鍵範圍的標準化 RU 使用量達到 100% 時,如果用戶端仍在 1 秒的時間範圍內對該特定分割區索引鍵範圍提出要求,則會遇到要求率限制錯誤 (429)。

這不一定表示您的資源發生問題。 根據預設,Azure Cosmos DB 用戶端 SDK 和資料匯入工具 (例如 Azure Data Factory 和大量執行程式程式庫) 會於 429 時自動重試要求。 它們通常會重試最多 9 次。 如此一來,雖然您可能會在計量中看到 429,但這些錯誤甚至可能不會傳回給您的應用程式。

一般來說,針對生產工作負載,如果您在要求 1-5% 之間看見 429,而您的端對端延遲是可接受的,則這是已充分利用 RU/秒的情況良好訊號。 在此情況下,標準化 RU 使用量計量達到 100% 僅表示在指定秒數內,至少有一個分割區索引鍵範圍使用了其所有佈建的輸送量。 這是可接受的,因為整體要求率 429s 仍然很低。 不需要進行其他動作。

若要判斷對資料庫或容器的要求百分比達到多少會導致 429s,請從您的 Azure Cosmos DB 帳戶刀鋒視窗中,瀏覽至 [深入解析]> [要求]> [依狀態碼的要求總數]。 篩選至特定的資料庫和容器。 針對 API for Gremlin,請使用 Gremlin 要求計量。 Total Requests by Status Code chart that shows number of 429 and 2xx requests.

如果標準化 RU 使用量計量在多個分割區索引鍵範圍中一致為 100%,且 429s 的要求率大於 5%,則建議您增加輸送量。 您可以利用 Azure 監視器計量和 Azure 監視器診斷記錄,查明哪些作業負荷沉重及其尖峰使用量。 遵循縮放佈建輸送量 (RU/秒) 的最佳做法

您不一定會只因為標準化 RU 已達到 100% 而看到 429 要求率限制錯誤。 這是因為標準化 RU 是表示所有分割區索引鍵範圍中最大使用量的單一值。 一個分割區索引鍵範圍可能忙碌中,但另一個分割區索引鍵範圍可以提供要求,而不會發生問題。 例如,在分割區索引鍵範圍上取用所有 RU/秒的單一作業 (例如預存程序),將導致標準化 RU 使用量計量出現短暫尖峰。 在這種情況下,如果整體要求率偏低,或要求是對不同分割區索引鍵範圍的其他分割區提出的,就不會立即顯示要求率限制錯誤。

深入瞭解如何對 429 要求率限制解譯和偵錯

如何監視經常性存取層分割區

標準化的 RU 使用量計量可用來監視工作負載是否有經常性存取層分割區。 當一個或一些邏輯分割區索引鍵因為較高的要求量而耗用與總計 RU/秒不成比例的數量時,就會發生經常性存取層分割區。 這可能是因為不會平均散發要求的分割區索引鍵設計所導致。 這會導致將許多要求導向至成為「經常性存取層」的一小部分邏輯分割區 (隱含為分割區索引鍵範圍)。因為邏輯分割區的所有資料都位於一個分割區索引鍵範圍上,而且 RU/秒總計平均散發至所有分割區索引鍵範圍,所以經常性存取層分割區可能會導致 429,而且輸送量的使用不具效率。

如何識別是否有經常性存取層分割區

若要確認是否有經常性存取層分割區,請瀏覽至 [深入解析]> [輸送量]> [依 PartitionKeyRangeID 標準化 RU 使用量 (%)]。 篩選至特定的資料庫和容器。

每個 PartitionKeyRangeId 都會與一個實體分割區對應。 如果有某個 PartitionKeyRangeId 有顯著高於其他項目的正規化 RU 使用量 (例如,一個一致處於 100%,但其他處於 30% 或更少),則這可能是經常性存取層分割區的訊號。

Normalized RU Consumption by PartitionKeyRangeId chart with a hot partition.

若要識別取用最多 RU/秒的邏輯分割區,以及建議的解決方案,請參閱診斷和疑難排解 Azure Cosmos DB 要求率太大 (429) 例外狀況一文。

標準化 RU 使用量和自動調整

如果至少 1 個分割區索引鍵範圍在時間間隔的任何指定秒數中使用所有其配置的 RU/秒,則標準化 RU 使用量計量會顯示為 100%。 其中一個常見的問題是,為什麼標準化 RU 使用量為 100%,但 Azure Cosmos DB 並未將 RU/秒調整為自動調整的最大輸送量?

注意

下列資訊描述目前自動調整的實作,但未來可能會有所變更。

當您使用自動調整時,Azure Cosmos DB 只會在標準化 RU 使用量為 100% 時,以 5 秒間隔的持續期間將 RU/秒調整為最大輸送量。 這麼做可確保調整邏輯對使用者而言具有成本效益,因為可確保單一且暫時的尖峰不會導致不必要的調整和較高的成本。 發生暫時尖峰時,系統通常會擴大至高於先前調整為 RU/秒的值,但低於最大 RU/秒。

例如,假設您有一個容器,其輸送量上限為 20,000 RU/秒 (會在 2000 - 20,000 RU/秒之間調整),以及 2 個分割區索引鍵範圍。 每個分割區索引鍵範圍可以在 1000 - 10,000 RU/秒之間調整。 因為自動調整會預先佈建所有必要的資源,所以您可以隨時使用最多 20,000 RU/秒。 假設您有間歇性流量尖峰,而其中一秒的流量中,分割區索引鍵範圍的使用量是 10,000 RU/秒。 對於後續秒數,使用量會向下回復為 1000 RU/秒。 由於標準化 RU 使用量計量會顯示所有分割區期間的最高使用率,因此將會顯示 100%。 不過,由於使用率 100% 只有 1 秒,因此自動調整不會自動調整為最大值。

因此,即使自動調整並未調整為最大值,您仍然可以使用可用的 RU/秒總數。 若要確認 RU/秒使用量,您可以使用選擇加入功能診斷記錄來查詢所有分割區索引鍵範圍之間每秒層級的整體 RU/秒使用量。

CDBPartitionKeyRUConsumption
| where TimeGenerated >= (todatetime('2022-01-28T20:35:00Z')) and TimeGenerated <= todatetime('2022-01-28T20:40:00Z')
| where DatabaseName == "MyDatabase" and CollectionName == "MyContainer"
| summarize sum(RequestCharge) by bin(TimeGenerated, 1sec), PartitionKeyRangeId
| render timechart

一般來說,針對使用自動調整的生產工作負載,如果您看到 1-5% 之間的要求出現 429,而您的端對端延遲是可接受的,則這是 RU/秒已充分利用的情況良好訊號。 即使標準化的 RU 使用量偶爾達到 100%,且自動調整並未擴大至最大 RU/秒,但這沒問題,因為整體要求率 429s 仍相當低。 您不需要執行任何動作。

提示

如果您使用自動調整,且發現標準化的 RU 使用量一致為 100%,而且您一致地調整為最大 RU/秒,則這是使用手動輸送量可能更具有成本效益的訊號。 若要判斷自動調整或手動輸送量最適合您的工作負載,請參閱如何選擇標準 (手動) 和自動調整佈建的輸送量。 Azure Cosmos DB 也會根據您的工作負載模式傳送 Azure Advisor 建議,以建議手動或自動調整輸送量。

檢視標準化要求單位耗用量計量

  1. 登入 Azure 入口網站

  2. 從左側導覽列選取 [監視器],然後選取 [計量]

    Metrics pane in Azure Monitor

  3. 從 [計量] 窗格 >選取一個資源>選擇必要的 [訂用帳戶] 和 [資源群組]。 在 [資源類型] 中,選取 [Azure Cosmos DB 帳戶],然後選擇其中一個現有的 Azure Cosmos DB 帳戶並選取 [套用]

    Select the account scope to view metrics

  4. 接下來,您可以從可用的計量清單中選取計量。 您可以選取 [要求單位]、[儲存體]、[延遲]、[可用性]、[Cassandra] 等等的專屬計量。 若要深入了解此清單中所有可用的計量,請參閱依類別區分的計量一文。 在此範例中,讓我們選取 [標準化 RU 耗用量] 計量,並選取 [最大值] 作為彙總值。

    除了這些詳細資料之外,您也可以選取計量的 [時間範圍] 和 [時間細微性]。 在 [最大值] 中,您可以檢視過去 30 天的計量。 套用篩選之後,圖表就會根據您的篩選條件來顯示。

    Choose a metric from the Azure portal

標準化 RU 使用量計量的篩選條件

您也可以依特定的 CollectionNameDatabaseNamePartitionKeyRangeIDRegion,篩選顯示的計量和圖表。 若要篩選計量,請選取 [新增篩選],然後選擇所需的屬性,例如 CollectionName,以及您感興趣的對應值。 圖表接著會顯示容器在所選期間內取用的標準化 RU 使用量計量。

您可以使用 [套用分割] 選項來將計量分組。 對於共用輸送量資料庫,標準化 RU 計量顯示的資料最多只到資料庫細微程度,而不顯示每個集合的任何資料。 因此,對於共用輸送量資料庫,依集合名稱套用分割時,您不會看到任何資料。

每個容器的標準化要求單位耗用量計量如下圖所示:

Apply filters to normalized request unit consumption metric

下一步