關於 Azure Cosmos DB 中自動調整佈建輸送量的常見問題集

適用於:NoSQL MongoDB Cassandra Gremlin Table

Azure Cosmos DB 會使用自動調整佈建輸送量,以根據使用量自動管理及調整資料庫或容器的每秒要求單位 (RU/秒)。 本文會回答 Azure Cosmos DB 中有關自動調整的常見問題。

Azure Cosmos DB 中的自動調整和動態自動調整之間有何差異?

自動調整自動調整佈建的輸送量會根據最活躍的區域和分割區來調整工作負載。 相反地,動態自動調整可讓您工作負載的區域和分割區根據使用量獨立調整。 我們向所有計劃使用自動調整的客戶建議動態自動調整。

如何以程序設計方式在帳戶上啟用動態自動調整?

您可以使用 API 版本為 2023-11-15-preview 或以後的預覽版本的 Resource Manager 範本,將屬性 enablePerRegionPerPartitionAutoscale 設定為 true。 您可以使用預覽版本 2023-11-15-preview 或以後的預覽版本,在 JSON 檢視中看到此屬性。 您也可以使用 Azure CLI 或 PowerShell。

// Add Azure Cosmos DB extension 2.0.6-preview for PowerShell
Install-Module -Name Az.CosmosDB -RequiredVersion 2.0.6-preview -AllowPrerelease -AllowClobber -Force

// update the account using this command to enable or disable the property
Update-AzCosmosDBAccount -EnablePerRegionPerPartitionAutoscale $true -ResourceGroupName "<resource-group-name>" -Name "<cosmos-account-name>"

// Run this command to see the enablement or disablement status:
Get-AzCosmosDBAccount -ResourceGroupName "<resource-group-name>" -Name "<cosmos-account-name>"

在先前的自動試驗階層模型中建立的資料庫或容器會發生什麼事?

使用先前階層模型建立的資源會自動支援新的自動調整自訂 RU/秒上限模型。 該階層上限會變成新的 RU/秒上限,而這會產生相同的調整範圍。

例如,如果您先前選取的階層可在 400 RU/秒到 4000 RU/秒之間調整,則資料庫或容器現在會顯示 RU/秒上限為 4000 RU/秒,可在 400 RU/秒到 4000 RU/秒之間調整。 然後,您可以根據您的工作負載,將 RU/秒上限變更為自訂值。

自動調整的進入點 RU/秒為何?

從 2022 年 4 月開始,您可以將自動調整的 RU/秒上限設定為最低 1,000 RU/秒 (可在 100 RU/秒到 1,000 RU/秒之間調整)。 您也可以將調整範圍設定為 200 RU/秒到 2,000 RU/秒,或是 300 RU/秒到 3,000 RU/秒。 先前的進入點為 400 RU/秒到 4000 RU/秒。

針對輸送量需求較低,但仍可能調整到 RU/秒上限的工作負載,我們建議使用此設定。

自動調整多快會根據流量增加而向上調整?

使用自動調整時,系統會根據傳入流量,在 0.1 × TmaxTmax 的範圍內,將輸送量 (RU/秒) 向上 (T) 或向下 (T) 調整。 因為縮放比例是自動且即時的,所以您可以隨時取用到佈建的最大值 Tmax,而不會發生延遲。

如何判斷系統目前調整的 RU/秒?

使用 Azure 監視器計量,可監視佈建的 RU/秒上限,和系統調整到的目前輸送量 (RU/秒)。

自動調整的定價為何?

每小時,系統會收取在該小時內調整到最高輸送量 T 的費用。 如果您的資源在一小時內沒有任何要求,或調整並未超過 0.1 × Tmax,則會向您收取最少 0.1 × Tmax 的費用。 如需詳細資訊,請參閱 Azure Cosmos DB 定價頁面

我的帳單上會如何顯示自動調整?

在單一寫入區域帳戶中,每 100 RU/秒的自動調整費率是標準 (手動) 佈建輸送量的 1.5 倍。 您的帳單會顯示現有標準佈建的輸送量計量。 此計量的數量乘以 1.5。 例如,如果系統在一小時內擴充到的最高 RU/秒是 6000 RU/秒,則對於該小時的計量,會向您收取 60 * 1.5 = 90 個單位的費用。

在多寫入區域的帳戶中,每 100 RU/秒的自動調整費率與標準 (手動) 佈建多重寫入區域輸送量相同。 您的帳單會顯示現有的多寫入區域計量。 由於費率相同,如果您使用自動調整,則會看到與標準輸送量相同的數量。

自動調整是否會使用保留容量?

是。 若單一寫入區域的帳戶具有保留容量時,自動調整資源的保留折扣會依照特定區域的比例乘以 1.5 來套用至您的計量使用量。 舉例而言,如果想要使用保留容量來涵蓋 10,000 自動調整 RU/秒,應當規劃購買共 15,000 RU/秒的保留容量。

多重寫入區域保留容量的運作方式與自動調整和標準 (手動) 佈建輸送量相同。 如需詳細資訊,請參閱 Azure Cosmos DB 保留容量

自動調整是否可與 Azure Cosmos DB 免費層搭配運作?

是。 在免費層中,您可以在資料庫或容器上使用自動調整輸送量。 深入了解免費層計費如何與自動調整搭配運作

所有 API 是否皆支援自動調整?

是。 所有 API 皆支援自動調整:NoSQL、Gremlin、資料表、Cassandra 及 MongoDB。

多重寫入區域帳戶是否支援自動調整?

是。 在您新增至 Azure Cosmos DB 帳戶的每個區域中,都可以使用 RU/秒上限。

如何在新資料庫或容器上啟用自動調整?

如何在現有的資料庫或容器上啟用自動調整?

是。 您也可以在自動調整和標準 (手動) 佈建輸送量之間切換。 目前對於所有 API,您都可以使用 Azure 入口網站Azure CLIPowerShell 來執行這些作業。 依據設計,您無法使用 Azure Cosmos DB 用戶端 SDK 或 Azure Resource Manager 範本,在手動佈建輸送量和自動調整之間移轉。 不過,您可以使用用戶端 SDK 或 Azure Resource Manager 範本來建立新的自動調整資源,以及變更現有自動調整資源的 RU/秒上限。

如何在自動調整和標準 (手動) 佈建輸送量之間切換?

從概念上來說,變更輸送量類型是兩階段的程序。 首先,您會傳送要求,將輸送量設定變更為使用自動調整或手動佈建的輸送量。 在這兩種情況下,系統會根據目前的輸送量設定和儲存體,自動判斷並設定初始 RU/秒的值。 在此步驟中,不會接受使用者提供的 RU/秒值。 然後,更新完成後,您可以變更 RU/秒,以符合您的工作負載。

從標準 (手動) 佈建輸送量移轉至自動調整

針對容器,請使用下列公式來估計初始自動調整的 RU/秒上限:

MAX(1,000, current manual provisioned RU/s, maximum RU/s ever provisioned / 10, storage in GB × 10) 四捨五入至最接近的 1,000 RU/秒。

實際的初始自動調整 RU/秒上限可能會根據您的帳戶設定而有所不同。

範例 #1:假設您有一個容器,其中有 10,000 RU/秒的手動佈建輸送量,以及 25 GB 的儲存體。 當您啟用自動調整時,初始自動調整 RU/秒上限為 10,000 RU/秒,而您可以在 1,000 RU/秒到 10,000 RU/秒之間調整。

範例 #2:假設您有一個容器,其中有 50,000 RU/秒的手動佈建輸送量,以及 25,000 GB 的儲存體。 當您啟用自動調整時,初始自動調整 RU/秒上限為 250,000 RU/秒,而您可以在 25,000 RU/秒到 250,000 RU/秒之間調整。

從自動調整移轉至標準 (手動) 佈建輸送量

初始手動佈建的輸送量會等於目前自動調整的 RU/秒上限。

範例:您有一個自動調整資料庫或容器,其 RU/秒上限為 20,000 RU/秒 (可在 2,000 RU/秒到 20,000 RU/秒之間調整)。 當您更新為使用手動佈建的輸送量時,初始輸送量會是 20,000 RU/秒。

如果您需要移轉大量的輸送量資源,請考慮使用 Azure CLI 指令碼 - 轉換成自動調整

我可以使用 Azure CLI、PowerShell 或 Azure Resource Manager 來管理使用自動調整的資料庫或容器嗎?

是。 若要以程式設計方式在現有資料庫或容器上啟用自動調整,您可以使用 Azure CLIPowerShell

若要建立可使用自動調整的新資料庫或容器,您可以使用 Azure CLIPowerShellAzure Resource Manager 範本

共用的輸送量資料庫是否支援自動調整?

是。 若要在共用輸送量資料庫上啟用自動調整,當您建立資料庫時,請選取 [自動調整] 和 [佈建輸送量] 選項。

啟用自動調整時,每個共用輸送量資料庫允許多少容器?

Azure Cosmos DB 會在共用輸送量資料庫中強制執行最多 25 個容器。 此最大值適用於具有自動調整或標準 (手動) 輸送量的資料庫。

自動調整如何影響資料庫一致性層級?

自動調整不會影響資料庫的一致性層級。

如需詳細資訊,請參閱一致性層級

與每個 RU/秒上限選項相關聯的儲存體限制為何?

每個 RU/秒上限的儲存限制 (以 GB 為單位) 是資料庫或容器的 RU/秒上限除以 10。 例如,如果 RU/秒上限為 20,000 RU/秒,則資源可以支援 2,000 GB 的儲存空間。

如需可用的 RU/秒上限和儲存選項,請參閱佈建輸送量的自動調整限制

如果超過與我的最大輸送量相關聯的儲存空間限制,會發生什麼事?

如果超過與資料庫或容器的最大輸送量相關聯的儲存空間限制,Azure Cosmos DB 會自動將最大輸送量增加到可支援該儲存體層級的第二高 RU/秒。

例如,如果您從 50,000 RU/秒的 RU/秒上限開始 (在 5,000 RU/秒與 50,000 RU/秒之間調整),您最多可以儲存 5,000 GB 的資料。 如果您的儲存大小增加到 5,001 GB,儲存空間現在為 6,000 GB,而新的 RU/秒上限為 60,000 RU/秒 (可在 6,000 RU/秒到 60,000 RU/秒之間調整)。

我是否可以變更資料庫或容器上的 RU/秒上限?

是。 如需詳細資訊,請參閱如何佈建自動調整輸送量

當您變更 RU/秒上限時,視要求的值而定,非同步操作可能需要 4 到 6 小時才能完成。 深入了解

如何增加 RU/秒上限?

當您傳送要求以增加 RU/秒上限 Tmax 時,根據選取的 RU/秒上限而定,服務會佈建更多資源,以支援更高的 RU/秒上限。 發生這種情況時,您現有的工作負載和作業不會受影響。 系統會在先前的 0.1 × TmaxTmax 之間,繼續調整您的資料庫或容器,直到 0.1 × Tmax_newTmax_new 的新調整範圍準備就緒。

如何降低 RU/秒下限?

當您降低 RU/秒上限時,您可以為其設定的最小值為:MAX(1,000, highest maximum RU/s ever provisioned / 10, current storage in GB × 10),四捨五入到最接近的 1000 RU/秒。

範例 #1:您有一個自動調整容器,其 RU/秒上限為 20,000 RU/秒 (可在 2,000 RU/秒到 20,000 RU/秒之間調整),而儲存大小為 1,500 GB。 您能為 RU/秒上限設定的最低下限值為:MAX(1,000, 20,000 / 10, 1,500 × 10) = 15,000 RU/秒 (可在 1,500 RU/秒到 15,000 RU/秒之間調整)。

範例 #2:您有一個自動調整容器,其 RU/秒上限為 100,000 RU/秒,而儲存大小為 100 GB。 現在,您將 RU/秒上限擴大到 150,000 RU/秒 (可在 15,000 RU/秒到 150,000 RU/秒之間調整)。 您現在能為 RU/秒上限設定的最低下限值為:MAX(1,000, 150,000 / 10, 100 × 10) = 15,000 RU/秒 (可在 1,500 RU/秒到 15,000 RU/秒之間調整)。

對於共用的輸送量資料庫,當您降低 RU/秒上限時,您可以設定的最小值為:MAX(1,000, highest maximum RU/s ever provisioned / 10, current storage in GB × 10, 1,000 + (MAX(Container count - 25, 0) × 1,000)),四捨五入到最接近的 1,000 RU/秒。

這些公式和範例適用於您可以為自動調整 RU/秒上限設定的最小值。 其與系統自動調整的 0.1 × TmaxTmax 範圍不同。 不論 RU/秒上限為何,系統一律會在 0.1 × TmaxTmax 之間調整。

TTL 如何與自動調整搭配使用?

存留時間 (TTL) 作業不會影響自動調整中的 RU/秒調整。 由於 TTL 而耗用的任何 RU 不屬於自動調整容器 RU/秒的計費部分。

例如,針對範圍為 400 RU/秒到 4,000 RU/秒的自動調整容器:

  • 第 1 小時:T=0:容器沒有使用量 (無 TTL 或工作負載要求)。 可計費的 RU/秒為 400 RU/秒。
  • 第 1 小時:T=1:已啟用 TTL。
  • 第 1 小時:T=2:容器會開始取得要求。 要求會在 1 秒內取用 1,000 RU/秒。 使用了價值 200 RU/秒 的 TTL。 可計費的 RU/秒仍為 1,000 RU/秒。 無論 TTL 刪除在何時發生,都不會影響自動調整縮放比例的邏輯。

RU/秒上限如何對應至實體分割區?

當您第一次選取 RU/秒上限時,Azure Cosmos DB 會將 RU/秒上限除以 10,000 RU/秒來取得所需的實體分割區數目以進行佈建。 每個實體分割區最多可支援 10,000 RU/秒和 50 GB 的儲存體。 隨著儲存大小增加,Azure Cosmos DB 會自動將分割區分割,以新增更多實體分割區來處理增加的儲存大小。 如果儲存大小超過相關聯的限制,Azure Cosmos DB 會增加 RU/秒上限。

資料庫或容器的 RU/秒上限會平均分散到所有實體分割區。 任何單一實體分割區可調整的輸送量總計為資料庫或容器的 RU/秒上限除以實體分割區數目。

當傳入要求超過資料庫或容器的 RU/秒上限時,會發生什麼事?

如果整體耗用的 RU/秒超過資料庫或容器的 RU/秒上限,則超過 RU/秒上限的要求會受到節流,並傳回 429 狀態碼。 導致 100% 標準化使用率超過的要求會受到節流。 標準化使用率定義為所有實體分割區之間的 RU/秒使用率上限。

例如,假設您的最大輸送量是 20,000 RU/秒,而您有兩個實體分割區 (P_1 和 P_2)。 每個分割區都能夠調整為 10,000 RU/秒。 在指定的秒數內,如果 P_1 已使用 6,000 RU,P_2 已使用 8,000 RU,則標準化使用率為 MAX(6,000 RU / 10,000 RU, 8,000 RU / 10,000 RU) = 0.8。

注意

Azure Cosmos DB 用戶端 SDK 和資料匯入工具 (大量執行工具程式庫 Azure Data Factory) 會在傳回 429 錯誤碼之後自動重試,因此偶爾出現 429 錯誤碼沒關係。 持續出現大量 429 代碼錯誤可能表示您需要增加 RU/秒上限,或檢閱分割策略以包含常用分割區

啟用自動調整時,是否可以發生節流或速率限制錯誤?

是。 在兩種情況下,您可能會看見 429 代碼錯誤。

第一種情況是,當整體耗用的 RU/秒超過資料庫或容器的 RU/秒上限時,服務將會視情況節流要求。

第二種情況是,如果邏輯分割區索引鍵值與其他分割區索引鍵值相比之下,要求數量較高 (例如常用分割區),則基礎實體分割區可能超過其 RU/秒預算。 最佳做法是避免常用分割區,選擇良好的分割區索引鍵,讓儲存體和輸送量能夠平均分佈。

例如,如果您選取 20,000 RU/秒最大輸送量選項,並且有 200 GB 的儲存體,如果您有四個實體分割區,則每個實體分割區最多可自動調整至 5000 RU/秒。 如果特定邏輯分割區索引鍵上有常用分割區,當其所在的基礎實體分割區超過 5,000 RU/秒時 (亦即超過 100% 的標準化使用率),您就會看到 429 代碼錯誤。

使用自動調整時看到 429 代碼錯誤不一定表示您的資料庫或容器發生問題。 一般而言,對於生產工作負載而言,如果 1% 到 5% 的要求有 429 代碼錯誤,且您的端對端延遲是可接受的,則這些錯誤是已充分利用 RU/秒的良好訊號。 您不需要執行任何動作。

深入了解如何解譯和偵錯代碼為 429 的速率限制錯誤

如果自動調整規模未調整為 RU/秒上限,標準化 RU/秒耗用量是否為 100%。

是。 如需詳細資訊,請參閱監視標準化 RU/秒