分享方式:


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/秒。

Azure 入口網站 中 Azure 監視器計量實體分割區輸送量的螢幕快照。

Condition 2

若要判斷每個實體分割區目前的平均儲存體,請先尋找容器的整體儲存體 (資料 + 索引)。

瀏覽至 [深入解析]>[儲存體]>[資料和索引使用量]。 總儲存體是資料和索引使用量的總和。 在下列範例中,容器總共有 74 GB 的儲存體。

Azure 入口網站 中容器的 Azure 監視器記憶體 (資料 + 索引) 計量螢幕快照。

接下來,尋找實體分割區的總數。 此計量是我們在情況 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,請遵循適當的移轉指南:

不支援的連接器

若您註冊使用預覽,下列連接器會失敗。

  • 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

¹ 規劃未來將支援這些連接器。

下一步