Händelser
17 mars 21 - 21 mars 10
Gå med i mötesserien för att skapa skalbara AI-lösningar baserat på verkliga användningsfall med andra utvecklare och experter.
Registrera dig nuDen här webbläsaren stöds inte längre.
Uppgradera till Microsoft Edge och dra nytta av de senaste funktionerna och säkerhetsuppdateringarna, samt teknisk support.
GÄLLER FÖR: NoSQL
MongoDB
Som standard distribuerar Azure Cosmos DB det etablerade dataflödet för en databas eller container lika över alla fysiska partitioner. Scenarier kan dock uppstå där vissa logiska (och därmed fysiska) partitioner behöver mer dataflöde än andra på grund av en skev arbetsbelastning eller val av partitionsnyckel. I dessa scenarier ger Azure Cosmos DB dig möjlighet att omdistribuera ditt etablerade dataflöde mellan fysiska partitioner. Genom att distribuera dataflöde mellan partitioner får du bättre prestanda utan att behöva konfigurera det övergripande dataflödet baserat på den hetaste partitionen.
Funktionen för omdistribuering av dataflöde gäller för databaser och containrar med etablerat dataflöde (manuell och autoskalning) och gäller inte för serverlösa containrar. Du kan ändra dataflödet per fysisk partition med hjälp av Azure Cosmos DB PowerShell- eller Azure CLI-kommandona.
I allmänhet rekommenderas användning av den här funktionen för scenarier när båda följande är sanna:
Om du inte ser några 429-svar och svarstiden från slutpunkt till slutpunkt är acceptabel krävs det ingen åtgärd för att konfigurera om RU/s per partition. Om du har en arbetsbelastning som har konsekvent trafik med tillfälliga oförutsägbara toppar i alla partitioner rekommenderar vi att du använder autoskalning och burst-kapacitet (förhandsversion). Autoskalning och burst-kapacitet säkerställer att du kan uppfylla dina dataflödeskrav. Om du har en liten mängd RU/s per partition kan du också använda partitionssammanslagningen (förhandsversion) för att minska antalet partitioner och säkerställa fler RU/s per partition för samma totala etablerade dataflöde.
Anta att vi har en arbetsbelastning som håller reda på transaktioner som äger rum i butiker. Eftersom de flesta av våra frågor är av StoreId
partitioneras vi efter StoreId
. Men med tiden ser vi att vissa butiker har mer aktivitet än andra och kräver mer dataflöde för att hantera sina arbetsbelastningar. Vi ser hastighetsbegränsning (429) för begäranden mot dessa StoreId och vår totala frekvens på 429 svar är större än 1–5 %. Samtidigt är andra butiker mindre aktiva och kräver mindre dataflöde. Nu ska vi se hur vi kan omdistribuera vårt dataflöde för bättre prestanda.
Det finns två sätt att identifiera om det finns en frekvent partition.
Om du vill kontrollera om det finns en frekvent partition går du till Insights>Dataflöde>Normaliserad RU-förbrukning (%) av PartitionKeyRangeID. Filtrera till en specifik databas och container.
Varje PartitionKeyRangeId mappar till en fysisk partition. Leta efter ett PartitionKeyRangeId som konsekvent har en högre normaliserad RU-förbrukning än andra. Ett värde ligger till exempel konsekvent på 100 %, men andra ligger på 30 % eller mindre. Ett mönster som detta kan indikera en frekvent partition.
Vi kan använda informationen från CDBPartitionKeyRUConsumption i diagnostikloggar för att få mer information om de logiska partitionsnycklarna (och motsvarande fysiska partitioner) som förbrukar mest RU/s på en andra nivås kornighet. Observera att exempelfrågorna endast använder 24 timmar för illustrativa syften – vi rekommenderar att du använder minst sju dagars historik för att förstå mönstret.
CDBPartitionKeyRUConsumption
| where TimeGenerated >= ago(24hr)
| where DatabaseName == "MyDB" and CollectionName == "MyCollection" // Replace with database and collection name
| where isnotempty(PartitionKey) and isnotempty(PartitionKeyRangeId)
| summarize sum(RequestCharge) by bin(TimeGenerated, 1s), PartitionKeyRangeId
| render timechart
CDBPartitionKeyRUConsumption
| where TimeGenerated >= ago(24hour)
| where DatabaseName == "MyDB" and CollectionName == "MyCollection" // Replace with database and collection name
| where isnotempty(PartitionKey) and isnotempty(PartitionKeyRangeId)
| where PartitionKeyRangeId == 0 // Replace with PartitionKeyRangeId
| summarize sum(RequestCharge) by bin(TimeGenerated, 1hour), PartitionKey
| order by sum_RequestCharge desc | take 10
Först ska vi fastställa aktuella RU/s för varje fysisk partition. Du kan använda Azure Monitor-måttet PhysicalPartitionThroughput och delas upp med dimensionen PhysicalPartitionId för att se hur många RU/s du har per fysisk partition.
Om du inte har ändrat dataflödet per partition tidigare kan du också använda formeln: Current RU/s per partition = Total RU/s / Number of physical partitions
Följ riktlinjerna i artikeln Metodtips för skalning av etablerat dataflöde (RU/s) för att fastställa antalet fysiska partitioner.
Du kan också använda PowerShell Get-AzCosmosDBSqlContainerPerPartitionThroughput
och Get-AzCosmosDBMongoDBCollectionPerPartitionThroughput
kommandon för att läsa aktuella RU/s på varje fysisk partition.
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
Get-AzCosmosDBSqlContainerPerPartitionThroughput
Använd kommandot eller Get-AzCosmosDBSqlDatabasePerPartitionThroughput
för att läsa aktuella RU/s på varje fysisk partition.
// Container with dedicated RU/s
$somePartitionsDedicatedRUContainer = Get-AzCosmosDBSqlContainerPerPartitionThroughput `
-ResourceGroupName "<resource-group-name>" `
-AccountName "<cosmos-account-name>" `
-DatabaseName "<cosmos-database-name>" `
-Name "<cosmos-container-name>" `
-PhysicalPartitionIds ("<PartitionId>", "<PartitionId">)
$allPartitionsDedicatedRUContainer = Get-AzCosmosDBSqlContainerPerPartitionThroughput `
-ResourceGroupName "<resource-group-name>" `
-AccountName "<cosmos-account-name>" `
-DatabaseName "<cosmos-database-name>" `
-Name "<cosmos-container-name>" `
-AllPartitions
// Database with shared RU/s
$somePartitionsSharedThroughputDatabase = Get-AzCosmosDBSqlDatabasePerPartitionThroughput `
-ResourceGroupName "<resource-group-name>" `
-AccountName "<cosmos-account-name>" `
-DatabaseName "<cosmos-database-name>" `
-PhysicalPartitionIds ("<PartitionId>", "<PartitionId">)
$allPartitionsSharedThroughputDatabase = Get-AzCosmosDBSqlDatabasePerPartitionThroughput `
-ResourceGroupName "<resource-group-name>" `
-AccountName "<cosmos-account-name>" `
-DatabaseName "<cosmos-database-name>" `
-AllPartitions
Nu ska vi bestämma hur många RU/s vi vill ge till våra hetaste fysiska partitioner. Vi anropar den här inställningen för våra målpartitioner. De flesta RU/s som en fysisk partition kan innehålla är 10 000 RU/s.
Rätt metod beror på dina arbetsbelastningskrav. Allmänna metoder är:
Total consumed RU/s of the physical partition + (Number of 429 responses per second * Average RU charge per request to the partition)
Slutligen ska vi bestämma hur många RU/s vi vill behålla på våra andra fysiska partitioner. Det här valet avgör vilka partitioner som den fysiska målpartitionen tar dataflödet från.
I PowerShell-API:erna måste vi ange minst en källpartition för att omdistribuera RU/s från. Vi kan också ange ett anpassat minsta dataflöde som varje fysisk partition ska ha efter omfördelningen. Om det inte anges ser Azure Cosmos DB som standard till att varje fysisk partition har minst 100 RU/s efter omfördelningen. Vi rekommenderar att du uttryckligen anger det minsta dataflödet.
Rätt metod beror på dina arbetsbelastningskrav. Allmänna metoder är:
Offset = Total desired RU/s of target partition(s) - total current RU/s of target partition(s)) / (Total physical partitions - number of target partitions)
Current RU/s of source partition - offset
Offset = Total desired RU/s of target partition(s) - total current RU/s of target partition) / Number of source physical partitions
Current RU/s of source partition - offset
Du kan använda PowerShell-kommandot Update-AzCosmosDBSqlContainerPerPartitionThroughput
för att omdistribuera dataflödet.
För att förstå exemplet nedan ska vi ta ett exempel där vi har en container som har totalt 6 000 RU/s (antingen 6 000 manuella RU/s eller autoskalning av 6 000 RU/s) och 3 fysiska partitioner. Baserat på vår analys vill vi ha en layout där:
Vi anger partitionerna 0 och 2 som våra källpartitioner och anger att efter omfördelningen ska de ha minst 1 000 RU/s. Partition 1 är ute målpartition, som vi anger ska ha 4 000 RU/s.
Update-AzCosmosDBSqlContainerPerPartitionThroughput
Använd för containrar med dedikerade RU/s eller Update-AzCosmosDBSqlDatabasePerPartitionThroughput
kommandot för databaser med delade RU/s för att omdistribuera dataflöde mellan fysiska partitioner. I databaser med delat dataflöde representeras ID:t för de fysiska partitionerna av en GUID-sträng.
$SourcePhysicalPartitionObjects = @()
$SourcePhysicalPartitionObjects += New-AzCosmosDBPhysicalPartitionThroughputObject -Id "0" -Throughput 1000
$SourcePhysicalPartitionObjects += New-AzCosmosDBPhysicalPartitionThroughputObject -Id "2" -Throughput 1000
$TargetPhysicalPartitionObjects = @()
$TargetPhysicalPartitionObjects += New-AzCosmosDBPhysicalPartitionThroughputObject -Id "1" -Throughput 4000
// Container with dedicated RU/s
Update-AzCosmosDBSqlContainerPerPartitionThroughput `
-ResourceGroupName "<resource-group-name>" `
-AccountName "<cosmos-account-name>" `
-DatabaseName "<cosmos-database-name>" `
-Name "<cosmos-container-name>" `
-SourcePhysicalPartitionThroughputObject $SourcePhysicalPartitionObjects `
-TargetPhysicalPartitionThroughputObject $TargetPhysicalPartitionObjects
// Database with shared RU/s
Update-AzCosmosDBSqlDatabasePerPartitionThroughput `
-ResourceGroupName "<resource-group-name>" `
-AccountName "<cosmos-account-name>" `
-DatabaseName "<cosmos-database-name>" `
-SourcePhysicalPartitionThroughputObject $SourcePhysicalPartitionObjects `
-TargetPhysicalPartitionThroughputObject $TargetPhysicalPartitionObjects
När du har slutfört omdistributionen kan du verifiera ändringen genom att visa måttet PhysicalPartitionThroughput i Azure Monitor. Dela upp med dimensionen PhysicalPartitionId för att se hur många RU/s du har per fysisk partition.
Om det behövs kan du även återställa RU/s per fysisk partition så att RU/s för din container är jämnt fördelade över alla fysiska partitioner.
Update-AzCosmosDBSqlContainerPerPartitionThroughput
Använd kommandot för containrar med dedikerade RU/s eller Update-AzCosmosDBSqlDatabasePerPartitionThroughput
kommandot för databaser med delade RU/s med parameter -EqualDistributionPolicy
för att fördela RU/s jämnt över alla fysiska partitioner.
// Container with dedicated RU/s
$resetPartitionsDedicatedRUContainer = Update-AzCosmosDBSqlContainerPerPartitionThroughput `
-ResourceGroupName "<resource-group-name>" `
-AccountName "<cosmos-account-name>" `
-DatabaseName "<cosmos-database-name>" `
-Name "<cosmos-container-name>" `
-EqualDistributionPolicy
// Database with dedicated RU/s
$resetPartitionsSharedThroughputDatabase = Update-AzCosmosDBSqlDatabasePerPartitionThroughput `
-ResourceGroupName "<resource-group-name>" `
-AccountName "<cosmos-account-name>" `
-DatabaseName "<cosmos-database-name>" `
-EqualDistributionPolicy
När du har slutfört omdistributionen kan du verifiera ändringen genom att visa måttet PhysicalPartitionThroughput i Azure Monitor. Dela upp med dimensionen PhysicalPartitionId för att se hur många RU/s du har per fysisk partition.
Vi rekommenderar att du övervakar din totala frekvens på 429 svar och RU/s-förbrukning. Mer information finns i Steg 1 för att verifiera att du har uppnått de prestanda du förväntar dig.
Efter ändringarna, förutsatt att den övergripande arbetsbelastningen inte har ändrats, ser du förmodligen att både mål- och käll-fysiska partitioner har högre normaliserad RU-förbrukning än tidigare. Högre normaliserad RU-förbrukning är förväntat beteende. I princip har du allokerat RU/s närmare vad varje partition faktiskt behöver förbruka, så högre normaliserad RU-förbrukning innebär att varje partition fullt ut använder sina allokerade RU/s. Du bör också förvänta dig att se en lägre total frekvens på 429 undantag, eftersom de frekventa partitionerna nu har fler RU/s för att hantera begäranden.
Om du vill använda förhandsversionen måste ditt Azure Cosmos DB-konto uppfylla följande kriterier:
Du behöver inte registrera dig för att använda förhandsversionen. Om du vill använda funktionen använder du PowerShell- eller Azure CLI-kommandona för att omdistribuera dataflöde mellan dina resursers fysiska partitioner.
Lär dig hur du använder etablerat dataflöde med följande artiklar:
Händelser
17 mars 21 - 21 mars 10
Gå med i mötesserien för att skapa skalbara AI-lösningar baserat på verkliga användningsfall med andra utvecklare och experter.
Registrera dig nuUtbildning
Modul
Konfigurera Azure Cosmos DB för NoSQL - Training
Välj mellan de olika dataflödeserbjudandena i Azure Cosmos DB för NoSQL.
Certifiering
Microsoftcertifierad: Azure Cosmos DB-utvecklarspecialitet - Certifications
Skriva effektiva frågor, skapa indexeringsprinciper, hantera och etablera resurser i SQL API och SDK med Microsoft Azure Cosmos DB.
Dokumentation
Metodtips för skalning av etablerat dataflöde (RU/s)
Lär dig metodtips för att skala etablerat dataflöde för manuellt och autoskalningsdataflöde
Sammanfoga partitioner (förhandsversion) - Azure Cosmos DB
Minska antalet fysiska partitioner som används för din container med sammanslagningsfunktionen i Azure Cosmos DB.
Burst-kapacitet - Azure Cosmos DB
Använd databasens eller containerns kapacitet för inaktivt dataflöde för att hantera trafiktoppar med burst-kapacitet i Azure Cosmos DB.