Dela via


Sammanfoga partitioner i Azure Cosmos DB (förhandsversion)

GÄLLER FÖR: NoSQL MongoDB

Genom att slå samman partitioner i Azure Cosmos DB (förhandsversion) kan du minska antalet fysiska partitioner som används för din container på plats. Med sammanslagning kan containrar som är fragmenterade i dataflödet (har låg RU/s per partition) eller lagring (har låg lagring per partition) få sina fysiska partitioner omarbetade. Om en containers dataflöde har skalats upp och måste skalas ned igen kan sammanslagning hjälpa till att lösa problem med dataflödesfragmentering. För samma mängd etablerade RU/s innebär färre fysiska partitioner att varje fysisk partition får mer av den totala RU/s. Om du minimerar partitioner minskar risken för hastighetsbegränsning om en stor mängd data tas bort från en container och RU/s per partition är låg. Sammanslagning kan hjälpa till att rensa oanvända eller tomma partitioner, vilket effektivt löser problem med lagringsfragmentering.

Komma igång

Kom igång med partitionssammanslagning genom att gå till sidan Funktioner i ditt Azure Cosmos DB-konto. Välj och aktivera funktionen Partitionssammanslagning (förhandsversion).

Innan du aktiverar funktionen kontrollerar du att dina Azure Cosmos DB-konton uppfyller alla kriterier för förhandsversionsbehörighet. När du har aktiverat funktionen tar det 15–20 minuter att börja gälla.

Varning

När sammanslagning är aktiverat på ett konto tillåts endast begäranden från .NET SDK-versionen >= 3.27.0 eller Java SDK >= 4.42.0 eller Azure Cosmos DB Spark Connector >= 4.18.0 eller JavaScript SDK >= 4.3 för kontot, oavsett om sammanslagningar pågår eller inte. Begäranden från andra SDK:er (äldre .NET SDK, äldre Java SDK, äldre JavaScript SDK, Python SDK, go SDK) eller anslutningsappar som inte stöds (Azure Data Factory, Azure Search och Azure Functions-tillägget <= 3.x) blockeras och misslyckas. Kontrollera att du har uppgraderat till en SDK-version som stöds innan du aktiverar funktionen. När funktionen har aktiverats eller inaktiverats kan det ta 15–20 minuter att sprida den fullständigt till kontot. Om du planerar att inaktivera funktionen när du har slutfört användningen kan det ta 15–20 minuter innan begäranden från SDK:er och anslutningsappar som inte stöds för sammanslagning tillåts.

Skärmbild av funktionsfönstret och funktionen För sammanslagning av partitioner.

Om du vill kontrollera om ett Azure Cosmos DB-konto är berättigat till förhandsversionen kan du använda den inbyggda behörighetskontroll i Azure Portal. Från översiktssidan för ditt Azure Cosmos DB-konto i Azure Portal går du till Diagnostisera och lösa problem –>. Kör Kontrollera berättigande för förhandsversion av partitionssammanslagning-diagnostiken.

Skärmbild av dataflödes- och skalningsinnehåll på sidan Diagnostisera och lösa problem.

Skärmbild av kontrollen av sammanslagningsberättigande med tabellen med alla kriterier för förhandsvisningsberättigande.

Så här identifierar du containrar som ska sammanfogas

Containrar som uppfyller båda dessa villkor kommer sannolikt att dra nytta av sammanslagning av partitioner:

  • Villkor 1: Aktuell RU/s per fysisk partition är <3 000 RU/s
  • Villkor 2: Det aktuella genomsnittliga lagringsutrymmet i GB per fysisk partition är <20 GB

Villkor 1 inträffar ofta när du tidigare har skalat upp RU/s (ofta för datainmatning) och nu vill skala ned till ett stabilt tillstånd. Villkor 2 inträffar ofta när du tar bort/TTL en stor mängd data, vilket lämnar oanvända partitioner.

Villkor 1

Om du vill fastställa aktuella RU/s per fysisk partition går du till Mått från ditt Cosmos-konto. Välj måttet Fysiskt partitionsdataflöde och filtrera till din databas och container. Tillämpa delning med PhysicalPartitionId.

För containrar som använder autoskalning visar det här måttet det maximala antalet RU/s som för närvarande har etablerats på varje fysisk partition. För containrar som använder manuell kapacitet visar detta mått den manuella RU/s för varje fysisk partition.

I exemplet nedan har vi en container för automatisk skalning etablerad med 5 000 RU/s (skalar mellan 500 och 5 000 RU/s). Den har fem fysiska partitioner och varje fysisk partition har 1 000 RU/s.

Skärmbild av metrik för fysisk partitionsgenomströmning i Azure Monitor i Azure-portalen.

Villkor 2

Om du vill fastställa den aktuella genomsnittliga lagringen per fysisk partition letar du först reda på containerns totala lagring (data + index).

Gå till InsightsStorageData & Indexanvändning. Den totala lagringen är summan av data- och indexanvändningen. I exemplet nedan har containern totalt 74 GB lagringsutrymme.

Skärmbild av Azure Monitor-lagring (data + index) som mått för containern i Azure-portalen.

Leta sedan reda på det totala antalet fysiska partitioner. Det här måttet är det distinkta antalet PhysicalPartitionIds i diagrammet PhysicalPartitionThroughput som vi såg i Villkor 1. I vårt exempel har vi fem fysiska partitioner.

Slutligen beräknar du: Total lagring i GB/antal fysiska partitioner. I vårt exempel har vi ett genomsnitt på (74 GB/fem fysiska partitioner) = 14,8 GB per fysisk partition.

Baserat på villkoren 1 och 2 kan containern eventuellt dra nytta av sammanslagning av partitioner.

Slå samman fysiska partitioner

När flaggan -WhatIf skickas i PowerShell kör Azure Cosmos DB en simulering och returnerar det förväntade resultatet av sammanslagningen. Det här resultatet returneras trots att själva sammanfogningen inte körs. När flaggan inte skickas körs sammanfogningen mot resursen. När det är klart matar kommandot ut den aktuella mängden lagringsutrymme i KB per fysisk partition efter sammanslagning.

Tips

Innan du kör en sammanslagning rekommenderar vi att du ställer in dina fördelade RU/s (antingen manuella RU/s eller max RU/s för autoskalning) så nära det önskade stabila tillståndet RU/s efter sammanslagning som möjligt, för att hjälpa till att säkerställa att systemet beräknar en effektiv partitionslayout.

Använd Install-Module för att installera Az.CosmosDB-modulen med förhandsversionsfunktioner aktiverade.

$parameters = @{
    Name = "Az.CosmosDB"
    AllowPrerelease = $true
    Force = $true
}
Install-Module @parameters

För etablerade dataflödescontainrar använder du Invoke-AzCosmosDBSqlContainerMerge med parametern -WhatIf för att förhandsgranska sammanfogningen utan att utföra åtgärden.

$parameters = @{
    ResourceGroupName = "<resource-group-name>"
    AccountName = "<cosmos-account-name>"
    DatabaseName = "<cosmos-database-name>"
    Name = "<cosmos-container-name>"
    WhatIf = $true
}
Invoke-AzCosmosDBSqlContainerMerge @parameters

Starta sammanfogningen genom att köra samma kommando utan parametern -WhatIf .

$parameters = @{
    ResourceGroupName = "<resource-group-name>"
    AccountName = "<cosmos-account-name>"
    DatabaseName = "<cosmos-database-name>"
    Name = "<cosmos-container-name>"
}
Invoke-AzCosmosDBSqlContainerMerge @parameters

För databaser med delat dataflöde startar du sammanfogningen med hjälp az cosmosdb mongodb database mergeav .

az cosmosdb mongodb database merge \
	--account-name '<cosmos-account-name>'                               
	--name '<cosmos-database-name>'                                
	--resource-group '<resource-group-name>'

Övervaka sammanslagningsåtgärder

Partitionssammanslagning är en tidskrävande åtgärd och det finns inget serviceavtal om hur lång tid det tar att slutföra. Tiden beror på mängden data i containern och antalet fysiska partitioner. Vi rekommenderar att du tillåter minst 5–6 timmar för sammanfogning att slutföras.

När partitionssammanslagning körs i containern avbryts den pågående sammanfogningsåtgärden om du ändrar containerinställningar (TTL, indexeringsprincip, unika nycklar osv.). Om du ökar ru/s medan en sammanslagning körs avbryts den pågående sammanfogningsåtgärden och containerns RU/s uppdateras med det nya värdet. Beroende på vilka RU/s som begärs kan din uppskalning vara omedelbar eller dröja längre. Om du minskar RU/s när en sammanslagning körs, uppdateras RU/s omedelbart till den nya RU/s-nivån. Den pågående sammanfogningen fortsätter med samma antal målpartitioner baserat på RU/s som angavs när sammanfogningen utlöstes. Vi rekommenderar att du väntar tills sammanslagningsåtgärden har slutförts innan du ändrar inställningarna för containern eller dataflödet.

Du kan spåra om sammanslagning fortfarande pågår genom att kontrollera aktivitetsloggen och filtrera fram händelsen Slå samman de fysiska partitionerna i en MongoDB-samling eller Sammanfoga de fysiska partitionerna i en SQL-container.

Begränsningar

Följande är begränsningar för sammanslagningsfunktionen just nu.

Villkor för förhandsversion av berättigande

Om du vill registrera dig i förhandsversionen måste ditt Azure Cosmos DB-konto uppfylla alla följande kriterier:

  • Ditt Azure Cosmos DB-konto använder API för NoSQL eller MongoDB med version >=3.6.
  • Ditt Azure Cosmos DB-konto använder etablerat dataflöde (manuellt eller autoskalning). Sammanslagning gäller inte för serverlösa konton.
  • Ditt Azure Cosmos DB-konto är ett konto för en skrivregion (sammanslagning stöds för närvarande inte för skrivkonton i flera regioner).
  • Ditt Azure Cosmos DB-konto använder inte någon av följande funktioner:
  • Om du använder API för NoSQL måste ditt program använda Azure Cosmos DB .NET v3 SDK (version 3.27.0 eller senare) eller Java v4 SDK (version 4.42.0 eller senare) eller JavaScript V4 SDK (version 4.3.0 eller senare). När förhandsgranskning av sammanslagning är aktiverat på ditt konto accepterar kontot inte begäranden som skickas från andra .NET-/Java-SDK:er eller äldre .NET/Java SDK-versioner.
    • Det finns inga SDK- eller drivrutinskrav för att använda funktionen med API för MongoDB.
  • Ditt Azure Cosmos DB-konto har inga anslutningar som inte stöds för närvarande.
    • Azure Data Factory
    • Azure Functions-tillägget <= 3.x (Azure Functions-tillägget 4.0 och senare stöds)
    • Azure Cosmos DB Spark-anslutningsprogram < 4.18.0
    • Alla bibliotek eller verktyg från tredje part som är beroende av en Azure Cosmos DB SDK som inte är .NET v3 SDK >= v3.27.0 eller Java v4 SDK >= 4.42.0 eller JavaScript v4 SDK >= 4.3.0

Kontoresurser och konfiguration

  • Sammanslagning är endast tillgängligt för API för NoSQL- och MongoDB-konton. För API för MongoDB-konton måste MongoDB-kontoversionen vara 3.6 eller senare.
  • Sammanslagning är endast tillgänglig för skrivkonton som är begränsade till en enda region. Stöd för skrivkonton i flera regioner är inte tillgängligt.
  • Konton som använder sammanslagningsfunktioner kan inte heller använda dessa funktioner (om dessa funktioner läggs till i ett sammanslagningsaktiverat konto kan kontot inte slå samman resurser):
  • När en container har sammanfogats går det inte att läsa ändringsflödet med starttid. Stöd för den här funktionen planeras för framtiden.

SDK-krav (endast API för NoSQL)

Konton med sammanslagningsfunktionen aktiverad stöds endast när du använder den senaste versionen av .NET v3 SDK eller Java v4 SDK. När funktionen är aktiverad för ditt konto (oavsett om du kör kopplingen) får du bara använda det SDK som stöds för kontot. Begäranden som skickas från andra SDK:er eller tidigare versioner accepteras inte. Så länge du använder SDK:t som stöds kan programmet fortsätta att köras medan en sammanslagning pågår.

Hitta den senaste versionen av SDK:et som stöds:

SDK Versioner som stöds Pakethanterarens länk
.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

Stöd för andra SDK:er planeras för framtiden.

Tips

Du bör se till att ditt program har uppdaterats för att använda en kompatibel SDK-version innan du registrerar dig i förhandsversionen. Om du använder en äldre SDK följer du lämplig migreringsguide:

Kontakter som inte stöds

Om du registrerar dig för förhandsgranskningen fungerar följande anslutningar inte.

  • Azure Data Factory ¹
  • Azure Functions-tillägget <= 3.x (Azure Functions-tillägget 4.0 och senare stöds) ¹
  • Azure Cosmos DB Spark-anslutningsprogram < 4.18.0
  • Alla bibliotek eller verktyg från tredje part som är beroende av en Azure Cosmos DB SDK som inte är .NET v3 SDK >= v3.27.0 eller Java v4 SDK >= 4.42.0

¹ Stöd för dessa anslutningar planeras för framtiden.

Nästa steg