Megosztás a következőn keresztül:


Az átviteli sebesség újraelosztása partíciók között

A KÖVETKEZŐKRE VONATKOZIK: MongoDB

Az Azure Cosmos DB alapértelmezés szerint egyenlően osztja el egy adatbázis vagy tároló kiosztott átviteli sebességét az összes fizikai partíció között. Előfordulhatnak azonban olyan helyzetek, amikor a számítási feladat eltérése vagy a partíciókulcs kiválasztása miatt bizonyos logikai (és így fizikai) partícióknak több átviteli sebességre van szükségük, mint másoknak. Ezekben a forgatókönyvekben az Azure Cosmos DB lehetővé teszi a kiosztott átviteli sebesség újraelosztását a fizikai partíciók között. Az átviteli sebesség partíciók közötti újraelosztásával jobb teljesítményt érhet el anélkül, hogy konfigurálnia kellene a teljes átviteli sebességet a legmelegebb partíció alapján.

Az átviteli sebesség újraelosztási funkciója a kiosztott átviteli sebességet (manuális és automatikus skálázást) használó adatbázisokra és tárolókra vonatkozik, és nem vonatkozik a kiszolgáló nélküli tárolókra. A fizikai partíciónkénti átviteli sebességet az Azure Cosmos DB PowerShell vagy az Azure CLI parancsaival módosíthatja.

Mikor érdemes használni ezt a funkciót?

A funkció használata általában olyan helyzetekben ajánlott, amikor a következők teljesülnek:

  • Egy gyűjtemény néhány partícióján következetesen 100%-os normalizált kihasználtságot lát.
  • Folyamatosan nagyobb késést tapasztal, mint az elfogadás.

Ha nem látja a 100%-os RU-használatot, és a végpontok közötti késés elfogadható, akkor nincs szükség az RU/s partíciónkénti újrakonfigurálására.
Ha olyan számítási feladattal rendelkezik, amely konzisztens forgalommal rendelkezik, és az összes partíción időnként kiszámíthatatlan kiugró csúcsértékekkel rendelkezik, javasoljuk, hogy automatikus skálázási és kipukkadási kapacitást használjon. Az automatikus skálázás és a kapacitáskitörés biztosítja az átviteli követelményeknek való megfelelést. Ha partíciónként kis mennyiségű RU/s van, a partícióegyesítéssel csökkentheti a partíciók számát, és partíciónként több RU/s-t biztosíthat ugyanahhoz a teljes kiosztott átviteli sebességhez.

Példaforgatókönyv

Tegyük fel, hogy van egy számítási feladatunk, amely nyomon követi a kiskereskedelmi üzletekben zajló tranzakciókat. Mivel a lekérdezések többsége a következő szerint StoreIdvan, particionáljuk a következő szerint StoreId: . Idővel azonban azt látjuk, hogy egyes üzletek több tevékenységet végeznek, mint mások, és több átviteli sebességet igényelnek a számítási feladatok kiszolgálásához. 100%-ban normalizált ru-felhasználást látunk az adott StoreId-ekkel kapcsolatos kérések esetében. Eközben más üzletek kevésbé aktívak, és kevesebb átviteli sebességet igényelnek. Lássuk, hogyan terjeszthetjük újra az átviteli sebességet a jobb teljesítmény érdekében.

1. lépés: Annak azonosítása, hogy mely fizikai partíciók igényelnek nagyobb átviteli sebességet

Kétféleképpen állapítható meg, hogy van-e gyakori elérésű partíció.

1. lehetőség: Azure Monitor-metrikák használata

Ha ellenőrizni szeretné, hogy van-e gyakori partíció, keresse meg az Insights>átviteli sebesség>normalizált RU-használatát (%) PartitionKeyRangeID szerint. Szűrés adott adatbázisra és tárolóra.

Minden PartitionKeyRangeId egy fizikai partícióra van leképzve. Keressen egy PartitionKeyRangeId azonosítót, amely következetesen magasabb normalizált RU-használattal rendelkezik, mint mások. Egy érték például következetesen 100%-os, másoké viszont 30%. Egy ilyen minta egy gyakori partíciót jelezhet.

Képernyőkép a PartitionKeyRangeId normalizált ru-használatáról egy gyakori partícióval.

2. lehetőség: Diagnosztikai naplók használata

A CDBPartitionKeyRUConsumption diagnosztikai naplókban található információi segítségével további információt kaphatunk azokról a logikai partíciókulcsokról (és a megfelelő fizikai partíciókról), amelyek a legtöbb RU/s-t használják egy második szintű részletességnél. Vegye figyelembe, hogy a minta lekérdezések csak szemléltető célokra 24 órát használnak – a minta megértéséhez ajánlott legalább hét napnyi előzményt használni.

Keresse meg azt a fizikai partíciót (PartitionKeyRangeId), amely a legtöbb RU/s-t használja az idő múlásával

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, 1m), PartitionKeyRangeId
| render timechart

Egy adott fizikai partícióhoz keresse meg a 10 legjobb logikai partíciókulcsot, amelyek óránként a legtöbb RU/s-t fogyasztják

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

2. lépés: Az egyes fizikai partíciók cél RU/s-jának meghatározása

Az aktuális RU/s meghatározása minden fizikai partícióhoz

Először határozzuk meg az egyes fizikai partíciók aktuális RU/s-ját. Az Azure Monitor PhysicalPartitionThroughput metrikájával és a PhysicalPartitionId dimenzióval felosztva megtekintheti, hogy fizikai partíciónként hány RU/s van.

Ha korábban nem módosította a partíciónkénti átviteli sebességet, használhatja a következő képletet: Current RU/s per partition = Total RU/s / Number of physical partitions

A fizikai partíciók számának meghatározásához kövesse a kiosztott átviteli sebesség (RU/s) méretezésének ajánlott eljárásait ismertető cikkben található útmutatást.

A PowerShell Get-AzCosmosDBSqlContainerPerPartitionThroughput és Get-AzCosmosDBMongoDBCollectionPerPartitionThroughput a parancsok használatával is elolvashatja az aktuális RU/s-t az egyes fizikai partíciókon.

Az Install-Module Az.CosmosDB modul telepítése előzetes funkciókkal engedélyezve.

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

Get-AzCosmosDBMongoDBCollectionPerPartitionThroughput A parancs használatával olvassa be az aktuális RU/s-t az egyes fizikai partíciókon.

// Container with dedicated RU/s
$somePartitionsDedicatedRUContainer = Get-AzCosmosDBMongoDBCollectionPerPartitionThroughput `
                    -ResourceGroupName "<resource-group-name>" `
                    -AccountName "<cosmos-account-name>" `
                    -DatabaseName "<cosmos-database-name>" `
                    -Name "<cosmos-collection-name>" `
                    -PhysicalPartitionIds ("<PartitionId>", "<PartitionId">, ...)

$allPartitionsDedicatedRUContainer = Get-AzCosmosDBMongoDBCollectionPerPartitionThroughput `
                    -ResourceGroupName "<resource-group-name>" `
                    -AccountName "<cosmos-account-name>" `
                    -DatabaseName "<cosmos-database-name>" `
                    -Name "<cosmos-collection-name>" `
                    -AllPartitions

// Database with shared RU/s
$somePartitionsSharedThroughputDatabase = Get-AzCosmosDBMongoDBDatabasePerPartitionThroughput `
                    -ResourceGroupName "<resource-group-name>" `
                    -AccountName "<cosmos-account-name>" `
                    -DatabaseName "<cosmos-database-name>" `
                    -PhysicalPartitionIds ("<PartitionId>", "<PartitionId">)

$allPartitionsSharedThroughputDatabase = Get-AzCosmosDBMongoDBDatabasePerPartitionThroughput `
                    -ResourceGroupName "<resource-group-name>" `
                    -AccountName "<cosmos-account-name>" `
                    -DatabaseName "<cosmos-database-name>" `
                    -AllPartitions

Ru/s meghatározása a célpartícióhoz

Ezután döntsük el, hogy hány RU/s-t szeretnénk adni a legforróbb fizikai partíció(ka)nak. Hívjuk meg a célpartíció(ka)t. A legtöbb ru/s fizikai partíció 10 000 RU/s lehet.

A megfelelő megközelítés a számítási feladatokra vonatkozó követelményektől függ. Az általános megközelítések a következők:

  • Növelje az RU/s-t 10%-kal, és ismételje meg, amíg el nem éri a kívánt átviteli sebességet.
    • Ha nem biztos abban, hogy a megfelelő százalék, 10%-kal kezdheti, hogy konzervatív legyen.
    • Ha már tudja, hogy ez a fizikai partíció a számítási feladat átviteli sebességének nagy részét igényli, első lépésként megduplázhatja az RU/s-t, vagy legfeljebb 10 000 RU/s-ra növelheti azt, attól függően, hogy melyik alacsonyabb.

Ru/s meghatározása a forráspartícióhoz

Végül döntsük el, hogy hány RU/s-t szeretnénk megtartani a többi fizikai partíción. Ez a kijelölés határozza meg azokat a partíciókat, amelyekből a cél fizikai partíció átviteli sebességét veszi át.

A PowerShell API-kban meg kell adnia legalább egy forráspartíciót az RU/s újraterjesztéséhez. Megadhatunk egy egyéni minimális átviteli sebességet is, amely minden fizikai partíciónak rendelkeznie kell az újraelosztás után. Ha nincs megadva, az Azure Cosmos DB alapértelmezés szerint biztosítja, hogy minden fizikai partíció legalább 100 RU/s értékkel rendelkezzen az újraterjesztés után. Javasoljuk, hogy explicit módon adja meg a minimális átviteli sebességet.

A megfelelő megközelítés a számítási feladatokra vonatkozó követelményektől függ. Az általános megközelítések a következők:

  • Ru/s egyenlő használata az összes forráspartícióból (akkor működik a legjobban, ha = 10 partíció van <)
    • Számítsa ki, hogy mennyivel kell eltolni az egyes forrás fizikai partíciókat. Offset = Total desired RU/s of target partition(s) - total current RU/s of target partition(s)) / (Total physical partitions - number of target partitions)
    • Az egyes forráspartíciók minimális átviteli sebességének hozzárendelése = Current RU/s of source partition - offset
  • Ru/s felvétele a legkevésbé aktív partíció(ka)ból
    • Az Azure Monitor-metrikák és diagnosztikai naplók használatával állapítsa meg, hogy mely fizikai partíció(k) rendelkeznek a legkisebb forgalommal/kérésmennyiségmel
    • Számítsa ki, hogy mennyivel kell eltolni az egyes forrás fizikai partíciókat. Offset = Total desired RU/s of target partition(s) - total current RU/s of target partition) / Number of source physical partitions
    • Az egyes forráspartíciók minimális átviteli sebességének hozzárendelése = Current RU/s of source partition - offset

3. lépés: A partíciók átviteli sebességének programozott módosítása

Az átviteli sebesség újraelosztásához használhatja a PowerShell-parancsot Update-AzCosmosDBSqlContainerPerPartitionThroughput .

Az alábbi példa megértéséhez vegyünk egy példát, amelyben egy 6000 RU/s (manuális RU/s vagy 6000 RU/s automatikus skálázási 6000 RU/s) és 3 fizikai partícióval rendelkező tárolónk van. Elemzésünk alapján olyan elrendezést szeretnénk, ahol:

  • Fizikai partíció 0: 1000 RU/s
  • 1. fizikai partíció: 4000 RU/s
  • 2. fizikai partíció: 1000 RU/s

Forráspartícióként 0 és 2 partíciót adunk meg, és meg kell adni, hogy az újraterjesztés után legalább 1000 RU/s ru/s értékkel kell rendelkezniük. Az 1. partíció a célpartíció, amelynek 4000 RU/s-nak kell lennie.

Update-AzCosmosDBMongoDBCollectionPerPartitionThroughput A dedikált RU/s-val rendelkező gyűjteményekhez vagy a Update-AzCosmosDBMongoDBDatabasePerPartitionThroughput megosztott RU/s-val rendelkező adatbázisok parancsával terjesztheti újra az átviteli sebességet a fizikai partíciók között. A megosztott átviteli sebességű adatbázisokban a fizikai partíciók azonosítóit guid sztring jelöli.

$SourcePhysicalPartitionObjects =  @()
$SourcePhysicalPartitionObjects += New-AzCosmosDBPhysicalPartitionThroughputObject -Id "0" -Throughput 1000
$SourcePhysicalPartitionObjects += New-AzCosmosDBPhysicalPartitionThroughputObject -Id "2" -Throughput 1000

$TargetPhysicalPartitionObjects =  @()
$TargetPhysicalPartitionObjects += New-AzCosmosDBPhysicalPartitionThroughputObject -Id "1" -Throughput 4000

// Collection with dedicated RU/s
Update-AzCosmosDBMongoDBCollectionPerPartitionThroughput `
    -ResourceGroupName "<resource-group-name>" `
    -AccountName "<cosmos-account-name>" `
    -DatabaseName "<cosmos-database-name>" `
    -Name "<cosmos-collection-name>" `
    -SourcePhysicalPartitionThroughputObject $SourcePhysicalPartitionObjects `
    -TargetPhysicalPartitionThroughputObject $TargetPhysicalPartitionObjects

// Database with shared RU/s
Update-AzCosmosDBMongoDBDatabasePerPartitionThroughput `
    -ResourceGroupName "<resource-group-name>" `
    -AccountName "<cosmos-account-name>" `
    -DatabaseName "<cosmos-database-name>" `
    -SourcePhysicalPartitionThroughputObject $SourcePhysicalPartitionObjects `
    -TargetPhysicalPartitionThroughputObject $TargetPhysicalPartitionObjects

Az újraterjesztés befejezése után ellenőrizheti a módosítást az Azure Monitor PhysicalPartitionThroughput metrikájának megtekintésével. A PhysicalPartitionId dimenzióval felosztva láthatja, hogy fizikai partíciónként hány RU/s van.

Szükség esetén alaphelyzetbe állíthatja a fizikai partíciónkénti RU/s-t is, hogy a tároló ru/s-jai egyenlően legyenek elosztva az összes fizikai partíció között.

Használja a Update-AzCosmosDBMongoDBCollectionPerPartitionThroughput parancsot dedikált RU/s-val rendelkező gyűjteményekhez, vagy a Update-AzCosmosDBMongoDBDatabasePerPartitionThroughput paraméterrel rendelkező megosztott RU/s-val rendelkező adatbázisok parancsával -EqualDistributionPolicy egyenletesen elosztja az RU/s-t az összes fizikai partíció között.

// Collection with dedicated RU/s
Update-AzCosmosDBMongoDBCollectionPerPartitionThroughput `
    -ResourceGroupName "<resource-group-name>" `
    -AccountName "<cosmos-account-name>" `
    -DatabaseName "<cosmos-database-name>" `
    -Name "<cosmos-collection-name>" `
    -EqualDistributionPolicy

// Database with shared RU/s
Update-AzCosmosDBMongoDBDatabasePerPartitionThroughput `
    -ResourceGroupName "<resource-group-name>" `
    -AccountName "<cosmos-account-name>" `
    -DatabaseName "<cosmos-database-name>" `
    -EqualDistributionPolicy

4. lépés: Az RU/s-használat ellenőrzése és monitorozása

Az újraterjesztés befejezése után ellenőrizheti a módosítást az Azure Monitor PhysicalPartitionThroughput metrikájának megtekintésével. A PhysicalPartitionId dimenzióval felosztva láthatja, hogy fizikai partíciónként hány RU/s van.

Javasoljuk, hogy figyelje a normalizált ru-felhasználást partíciónként. További információkért tekintse át az 1 . lépést annak ellenőrzéséhez, hogy elérte-e a várt teljesítményt.

A módosítások után , feltéve, hogy a teljes számítási feladat nem változott, valószínűleg látni fogja, hogy a cél- és forrás fizikai partíciók is magasabb normalizált RU-használattal rendelkeznek, mint korábban. Magasabb normalizált RU-használat várható. Lényegében közelebb osztotta ki az RU/s-t ahhoz, amit az egyes partícióknak ténylegesen fel kell használniuk, így a magasabb normalizált RU-használat azt jelenti, hogy minden partíció teljes mértékben kihasználja a lefoglalt RU/s-t. Emellett a 429 kivétel alacsonyabb általános arányára is számítania kell, mivel a gyakori elérésű partíciók több RU/s-sel rendelkeznek a kérések kiszolgálásához.

Korlátozások

Előzetes verzióra vonatkozó jogosultsági feltételek

Az előzetes verzió használatához az Azure Cosmos DB-fióknak meg kell felelnie az alábbi feltételeknek:

  • Az Azure Cosmos DB-fiókja a MongoDB API-t használja.
    • A verziónak = 3.6-osnak kell lennie >.
  • Az Azure Cosmos DB-fiók kiépített (manuális vagy automatikus skálázású) átvitelt használ. Az átviteli sebesség partíciók közötti elosztása nem vonatkozik a kiszolgáló nélküli fiókokra.

Az előzetes verzió használatához nem kell regisztrálnia. A funkció használatához használja a PowerShell vagy az Azure CLI parancsait az átviteli sebesség újraelosztásához az erőforrások fizikai partíciói között.

Következő lépések

Ismerje meg, hogyan használhatja a kiosztott átviteli sebességet az alábbi cikkekkel: