Azure Cosmos DB 中的合併分割區 (預覽)
適用於:NoSQL MongoDB
Azure Cosmos DB 中的合併分割區功能 (預覽) 可讓您減少就地用於容器的實體分割區數目。 透過合併,輸送量零散 (分割區 RU/秒較低) 或儲存體零散 (分割區儲存體較少) 的容器實體分割區便可重新作業。 若已增加的容器輸送量必須重新減少,合併則有助於解決輸送量零散的問題。 若 RU/秒佈建量相同,實體分割區較少則表示各實體分割區取得的整體 RU/秒較多。 從容器移除大量資料時,盡可能減少分割區可降低速率受限的可能性,且每個分割區的 RU/秒也較低。 合併有助於清除未使用或空白的分割區,有效解決儲存體片段問題。
開始使用
若要開始使用資料分割合併,請流覽至 Azure Cosmos DB 帳戶中的 [功能] 頁面。 選取並啟用資料分割合併 (預覽) 功能。
啟用功能之前,請確認您的 Azure Cosmos DB 帳戶符合所有預覽適用性準則。 啟用此功能之後,需要 15-20 分鐘才會生效。
警告
在帳戶上啟用合併後,無論是否合併,帳戶上僅允許來自 .NET SDK 版本 >= 3.27.0 或 JAVA SDK >= 4.42.0 或 Azure Cosmos DB Spark 連接器 >= 4.18.0 的要求是否正在進行。 來自其他 SDK 的要求 (較舊的 .NET SDK、較舊的 JAVA SDK、任何 JavaScript SDK、任何 Python SDK、任何 Go SDK) 或不支援的連接器 (Azure Data Factory、Azure 搜尋服務、Azure Functionsextension <= 3.x、Azure 串流分析及其他) 的要求將會遭到封鎖並失敗。 啟用此功能之前,請確定您已升級為支援的 SDK 版本。 啟用或停用此功能之後,可能需要 15-20 分鐘才能完全傳播至帳戶。 如果您打算在此功能使用完畢後將其停用,可能需要 15-20 分鐘的時間,才能允許來自不支援合併的 SDK 和連接器要求。
若要檢查 Azure Cosmos DB 帳戶是否符合預覽資格,您可以使用 Azure 入口網站中內建的資格檢查程式。 從 Azure 入口網站中的 Azure Cosmos DB 帳戶概觀頁面,瀏覽至 [診斷並解決問題] -> [輸送量和規模調整] -> [分割區合併]。 執行 [檢查資料分割合併預覽的資格] 診斷。
如何識別要合併的容器
合併分割區可能有益於同時符合下列兩個情況的容器:
- 情況 1:每個實體分割區的目前 RU/秒為 <3000 RU/秒
- 情況 2:每個實體分割區目前的平均儲存體 (以 GB 為單位) 為 <20 GB
情況 1 的發生通常是因為您先前已擴大 RU/秒 (通常是為了資料擷取),而現在想要在穩定狀態下縮小規模。 情況 2 的發生通常是因為您刪除/TTL 大量資料,而留下未使用的分割區。
情況 1
若要判斷每個實體分割區的目前 RU/秒,請從您的 Cosmos 帳戶瀏覽至 [計量]。 選取 [實體分割輸送量] 計量,並篩選至您的資料庫和容器。 依 PhysicalPartitionId 套用分割。
對於使用自動調整的容器,此計量會顯示每個實體分割區上目前佈建的最大 RU/秒。 對於使用手動輸送量的容器,此計量會顯示每個實體分割區上的手動 RU/秒。
在下列範例中,我們已佈建 5000 RU/秒的自動調整容器 (在 500 - 5000 RU/秒之間調整)。 該範例有五個實體分割區,每個實體分割區都有 1000 RU/秒。
Condition 2
若要判斷每個實體分割區目前的平均儲存體,請先尋找容器的整體儲存體 (資料 + 索引)。
瀏覽至 [深入解析]>[儲存體]>[資料和索引使用量]。 總儲存體是資料和索引使用量的總和。 在下列範例中,容器總共有 74 GB 的儲存體。
接下來,尋找實體分割區的總數。 此計量是我們在情況 1 中看到的 PhysicalPartitionThroughput 圖表中 PhysicalPartitionIds 的相異數目。 在我們的範例中,我們有五個實體分割區。
最後,計算:總儲存體 (GB)/實體分割區數目。 在我們的範例中,每個實體分割區平均有 (74 GB / 五個實體分割區) = 14.8 GB。
依據情況 1 和 2,我們的容器可能會受益於合併資料分割。
合併實體分割區
在 PowerShell 中,傳入 -WhatIf
旗標時,Azure Cosmos DB 會執行模擬,並傳回合併的預期結果。 儘管合併本身未執行,但會傳回此結果。 未傳入旗標時,會針對資源執行合併。 完成時,此命令會輸出每個實體分割區合併的目前儲存體數量 (KB)。
提示
執行合併前,建議先將佈建的 RU/秒 (手動 RU/秒或自動調整 RU/秒上限) 設為盡可能接近合併後期望穩定狀態的 RU/秒,以便確保系統計算出有效的分割配置。
使用 Install-Module
來安裝已啟用發行前版本功能的 Az.CosmosDB 模組。
$parameters = @{
Name = "Az.CosmosDB"
AllowPrerelease = $true
Force = $true
}
Install-Module @parameters
針對佈建的輸送量容器,請使用 Invoke-AzCosmosDBSqlContainerMerge
搭配 -WhatIf
參數來預覽合併,而不需要實際執行作業。
$parameters = @{
ResourceGroupName = "<resource-group-name>"
AccountName = "<cosmos-account-name>"
DatabaseName = "<cosmos-database-name>"
Name = "<cosmos-container-name>"
WhatIf = $true
}
Invoke-AzCosmosDBSqlContainerMerge @parameters
在沒有 -WhatIf
參數的情況下執行相同的命令來啟動合併。
$parameters = @{
ResourceGroupName = "<resource-group-name>"
AccountName = "<cosmos-account-name>"
DatabaseName = "<cosmos-database-name>"
Name = "<cosmos-container-name>"
}
Invoke-AzCosmosDBSqlContainerMerge @parameters
針對共用輸送量資料庫,請使用 az cosmosdb mongodb database merge
啟動合併。
az cosmosdb mongodb database merge \
--account-name '<cosmos-account-name>'
--name '<cosmos-database-name>'
--resource-group '<resource-group-name>'
監視合併作業
分割區合併是長時間執行的作業,而且沒有 SLA 可決定完成所需的時間。 時間取決於容器中的資料量和實體分割區數目。 建議至少允許 5-6 小時的時間完成合併。
當分割區合併在您的容器上執行時,如果您變更容器設定 (TTL、編製索引原則、唯一索引鍵等),則會取消進行中的合併作業。 如果您在合併執行時增加 RU/秒,則會取消進行中的合併作業,且您的容器的 RU/秒會以您的新值更新。 視要求的 RU/秒而定,您的相應增加可能是即時的,也可能需要更長的時間。 如果您在合併執行時減少 RU/秒,則 RU/秒會立即更新為 RU/秒。 進行中的合併將會繼續,並依據觸發合併時所設定的 RU/秒,使用相同的目標分割區計數。 最佳做法是,建議您等到合併作業完成,再變更容器或輸送量設定。
您可以檢查 [活動記錄],並篩選 [合併 MongoDB 集合的實體分割區] 或 [合併 SQL 容器的實體分割區] 事件,來追蹤是否仍在進行合併。
限制
以下是目前合併功能的限制。
預覽版適用性準則
若要在預覽版中註冊,您的 Azure Cosmos DB 帳戶必須符合下列所有準則:
- 您的 Azure Cosmos DB 帳戶會使用適用於 NoSQL 的 API 或 MongoDB,其版本為 >=3.6。
- 您的 Azure Cosmos DB 帳戶將會使用已佈建輸送量 (手動或自動調整)。 合併不適用於無伺服器帳戶。
- 您的 Azure Cosmos DB 帳戶是單一寫入區域帳戶 (多區域寫入帳戶目前不支援合併)。
- 您的 Azure Cosmos DB 帳戶未使用下列任何功能:
- 如果您使用適用於 NoSQL 的 API,您的應用程式必須使用 Azure Cosmos DB .NET v3 SDK (3.27.0 版或更高版本) 或 JAVA v4 SDK (4.42.0 版或更高版本)。 在您的帳戶上啟用合併預覽時,帳戶不接受從非 .NET/JAVA SDK 或舊版 .NET/JAVA SDK 傳送的要求。
- 沒有 SDK 或驅動程式需求可將此功能與適用於 MongoDB 的 API 搭配使用。
- 您的 Azure Cosmos DB 帳戶不會使用任何目前不支援的連接器:
- Azure Data Factory
- Azure 串流分析
- Logic Apps
- 支援 Azure Functions 擴充功能 <= 3.x (支援 Azure Functions 擴充功能 4.0 和更新版本)
- Azure 搜尋服務
- Azure Cosmos DB Spark 連接器 < 4.18.0
- 任何相依於 Azure Cosmos DB SDK 的協力廠商程式庫或工具,而不是 .NET v3 SDK >= v3.27.0 或 JAVA v4 SDK >= 4.42.0
帳戶資源和組態
- 合併僅適用於 NoSQL 和 MongoDB 帳戶的 API。 針對 MongoDB 帳戶的 API,MongoDB 帳戶版本必須為 3.6 以上版本。
- 合併僅適用於單一區域寫入帳戶。 不支援多重區域寫入帳戶。
- 使用合併功能的帳戶也無法使用這些功能 (如果這些功能新增至已啟用合併功能的帳戶,帳戶就無法合併資源):
- 合併容器之後,就無法讀取具有開始時間的變更摘要。 未來已規劃此功能的支援。
SDK 需求 (僅限 API for NoSQL)
只有在您使用最新版 .NET v3 SDK 或 JAVA v4 SDK 時,才支援已啟用合併功能的帳戶。 當帳戶啟用此功能時 (無論是否執行合併),您只能透過該帳戶使用支援的 SDK。 不接受從其他 SDK 或舊版傳送的要求。 只要您使用支援的 SDK,合併進行時便可繼續執行應用程式。
尋找所支援 SDK 的最新版本:
SDK | 支援的版本 | 套件管理員連結 |
---|---|---|
.NET SDK v3 | >= 3.27.0 | https://www.nuget.org/packages/Microsoft.Azure.Cosmos |
Java SDK v4 | >= 4.42.0 | https://mvnrepository.com/artifact/com.azure/azure-cosmos |
規劃未來將支援其他 SDK。
提示
在註冊使用預覽前,應先確保您的應用程式已更新為使用相容的 SDK 版本。 如果您使用舊版 SDK,請遵循適當的移轉指南:
- 舊版 .NET v2 SDK:.NET SDK v3 移轉指南
- 舊版 Java v3 SDK:JAVA SDK v4 移轉指南
不支援的連接器
若您註冊使用預覽,下列連接器會失敗。
- Azure Data Factory ¹
- Azure Stream Analytics ¹
- Logic Apps ¹
- 支援 Azure Functions 擴充功能 <= 3.x (支援 Azure Functions 擴充功能 4.0 和更新版本) ¹
- Azure Search ¹
- Azure Cosmos DB Spark 連接器 < 4.18.0
- 任何相依於 Azure Cosmos DB SDK 的協力廠商程式庫或工具,而不是 .NET v3 SDK >= v3.27.0 或 JAVA v4 SDK >= 4.42.0
¹ 規劃未來將支援這些連接器。
下一步
- 深入了解如何搭配 Azure Cosmos DB 使用 Azure CLI。
- 深入了解如何搭配 Azure Cosmos DB 使用 Azure PowerShell。
- 深入了解 Azure Cosmos DB 中的資料分割。