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 för kontot, oavsett om sammanslagningar pågår eller inte. Begäranden från andra SDK:er (äldre .NET SDK, äldre Java SDK, JavaScript SDK, Python SDK, go SDK) eller anslutningsprogram som inte stöds (Azure Data Factory, Azure Search, Azure Functionsextension <= 3.x, Azure Stream Analytics med flera) 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.
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-portalen. Från översiktssidan för ditt Azure Cosmos DB-konto i Azure-portalen går du till Diagnostisera och lösa problem –> Dataflöde och skalning –> Partitionssammanslagning. Kör diagnostiken Kontrollera berättigande för förhandsversion av partitionssammanslagning .
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 i 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 maximalt antal RU/s som för närvarande har etablerats på varje fysisk partition. För containrar som använder manuellt dataflöde visar det här måttet 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.
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 Insights>Storage-data>och indexanvändning. Den totala lagringen är summan av data- och indexanvändningen. I exemplet nedan har containern totalt 74 GB lagringsutrymme.
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 sammanslagningen 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.
Dricks
Innan du kör en sammanslagning rekommenderar vi att du ställer in etablerade RU/s (antingen manuella RU/s eller autoskalnings max RU/s) så nära det önskade stabila tillståndet RU/s efter sammanfogning, för 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 merge
av .
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 ta längre tid. Om du minskar ru/s när en sammanslagning körs uppdateras RU/s omedelbart till de nya RU/s. 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). 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 använder inga anslutningsappar som för närvarande inte stöds:
- Azure Data Factory
- Azure Stream Analytics
- Logic Apps
- Azure Functions-tillägget <= 3.x (Azure Functions-tillägget 4.0 och senare stöds)
- Azure Search
- 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
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ängligt för skrivkonton med en 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 med 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.
Dricks
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:
- Äldre .NET v2 SDK: migreringsguide för .NET SDK v3
- Äldre Java v3 SDK: Migreringsguide för Java SDK v4
Anslutningsappar som inte stöds
Om du registrerar dig i förhandsversionen misslyckas följande anslutningsappar.
- Azure Data Factory ¹
- Azure Stream Analytics ¹
- Logic Apps ¹
- Azure Functions-tillägget <= 3.x (Azure Functions-tillägget 4.0 och senare stöds) ¹
- Azure Search ¹
- 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 anslutningsappar planeras för framtiden.
Nästa steg
- Läs mer om hur du använder Azure CLI med Azure Cosmos DB.
- Läs mer om hur du använder Azure PowerShell med Azure Cosmos DB.
- Läs mer om partitionering i Azure Cosmos DB.