Aracılığıyla paylaş


Aktarım hızını bölümler arasında yeniden dağıtma (önizleme)

ŞUNLAR IÇIN GEÇERLIDIR: NoSQL MongoDB

Varsayılan olarak, Azure Cosmos DB bir veritabanının veya kapsayıcının sağlanan aktarım hızını tüm fiziksel bölümlere eşit olarak dağıtır. Ancak, iş yükündeki bir dengesizlik veya bölüm anahtarı seçimi nedeniyle belirli mantıksal (ve dolayısıyla fiziksel) bölümlerin diğerlerinden daha fazla aktarım hızına ihtiyaç duyduğu senaryolar ortaya çıkabilir. Bu senaryolar için Azure Cosmos DB, sağlanan aktarım hızınızı fiziksel bölümler arasında yeniden dağıtma olanağı sağlar. Aktarım hızını bölümler arasında yeniden dağıtmak, genel aktarım hızınızı en sıcak bölüme göre yapılandırmak zorunda kalmadan daha iyi performans elde etmeye yardımcı olur.

Aktarım hızı yeniden dağıtma özelliği, sağlanan aktarım hızını (el ile ve otomatik ölçeklendirme) kullanan veritabanları ve kapsayıcılar için geçerlidir ve sunucusuz kapsayıcılar için geçerli değildir. Azure Cosmos DB PowerShell veya Azure CLI komutlarını kullanarak fiziksel bölüm başına aktarım hızını değiştirebilirsiniz.

Bu özellik ne zaman kullanılır?

Genel olarak, aşağıdakilerin her ikisi de doğru olduğunda senaryolar için bu özelliğin kullanılması önerilir:

  • Tutarlı olarak 429 yanıtın toplam oranının %1-5'in üzerinde olduğunu görüyorsunuz
  • Tutarlı, tahmin edilebilir bir sık erişimli bölüme sahipsiniz

429 yanıtları görmüyorsanız ve uçtan uca gecikme süreniz kabul edilebilir düzeydeyse, bölüm başına RU/sn'yi yeniden yapılandırmak için hiçbir işlem yapmanız gerekmez. Tüm bölümleriniz genelinde zaman zaman öngörülemeyen ani artışların yaşandığı tutarlı bir trafiğe sahip bir iş yükünüz varsa, otomatik ölçeklendirme ve seri kapasite (önizleme) kullanmanız önerilir. Otomatik ölçeklendirme ve seri kapasite, aktarım hızı gereksinimlerinizi karşılayabilmenizi sağlar. Bölüm başına az miktarda RU/sn'niz varsa bölüm birleştirmeyi (önizleme) kullanarak bölüm sayısını azaltabilir ve sağlanan toplam aktarım hızı için bölüm başına daha fazla RU/sn sağlayabilirsiniz.

Örnek senaryo

Perakende mağazalarında gerçekleşen işlemleri takip eden bir iş yüküne sahip olduğumuzu varsayalım. Sorgularımızın çoğu tarafından StoreIdolduğundan tarafından bölümleniriz StoreId. Ancak zaman içinde bazı mağazaların diğerlerinden daha fazla etkinliği olduğunu ve iş yüklerine hizmet vermek için daha fazla aktarım hızı gerektirdiğini görüyoruz. Bu StoreId'lere yönelik istekler için hız sınırlaması (429) görüyoruz ve toplam 429 yanıt oranımız %1-5'in üzerinde. Bu arada, diğer depolar daha az etkindir ve daha az aktarım hızı gerektirir. Daha iyi performans için aktarım hızımızı nasıl yeniden dağıtabileceğinizi görelim.

1. Adım: Hangi fiziksel bölümlerin daha fazla aktarım hızına ihtiyacı olduğunu belirleme

Sık erişimli bölüm olup olmadığını belirlemenin iki yolu vardır.

1. Seçenek: Azure İzleyici ölçümlerini kullanma

Sık erişimli bölüm olup olmadığını doğrulamak için İçgörü aktarım>hızı>Normalleştirilmiş RU Tüketimi (%) By PartitionKeyRangeID bölümüne gidin. Belirli bir veritabanı ve kapsayıcıya göre filtreleyin.

Her PartitionKeyRangeId, bir fiziksel bölüme eşler. Sürekli olarak diğerlerinden daha yüksek normalleştirilmiş RU tüketimine sahip bir PartitionKeyRangeId arayın. Örneğin, bir değer tutarlı olarak %100'dedir, ancak diğerleri %30 veya daha azdır. Bunun gibi bir desen sık erişimli bölümü gösterebilir.

Sık erişimli bölüm içeren PartitionKeyRangeId grafiğine göre Normalleştirilmiş RU Tüketiminin ekran görüntüsü.

2. Seçenek: Tanılama Günlüklerini Kullanma

İkinci düzey ayrıntı düzeyinde en çok RU/sn kullanan mantıksal bölüm anahtarları (ve buna karşılık gelen fiziksel bölümler) hakkında daha fazla bilgi edinmek için Tanılama Günlüklerinde CDBPartitionKeyRUConsumption'dan alınan bilgileri kullanabiliriz. Örnek sorguların yalnızca açıklayıcı amaçlarla 24 saat kullandığını unutmayın; deseni anlamak için en az yedi günlük geçmişin kullanılması önerilir.

Zaman içinde en çok RU/sn tüketen fiziksel bölümü (PartitionKeyRangeId) bulma

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

Belirli bir fiziksel bölüm için, her saat içinde en çok RU/sn tüketen ilk 10 mantıksal bölüm anahtarını bulun

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. Adım: Her fiziksel bölüm için hedef RU/sn'yi belirleme

Her fiziksel bölüm için geçerli RU/sn'leri belirleme

İlk olarak, her fiziksel bölüm için geçerli RU/sn değerini belirleyelim. Fiziksel bölüm başına kaç RU/sn'niz olduğunu görmek için PhysicalPartitionThroughput Azure İzleyici ölçümünü kullanabilir ve PhysicalPartitionId boyutuna göre bölebilirsiniz.

Alternatif olarak, bölüm başına aktarım hızınızı daha önce değiştirmediyseniz şu formülü kullanabilirsiniz: Current RU/s per partition = Total RU/s / Number of physical partitions

Fiziksel bölüm sayısını belirlemek için sağlanan aktarım hızını (RU/sn) ölçeklendirmeye yönelik en iyi yöntemler makalesindeki yönergeleri izleyin.

Her fiziksel bölümdeki geçerli RU/sn'leri okumak için PowerShell Get-AzCosmosDBSqlContainerPerPartitionThroughput ve Get-AzCosmosDBMongoDBCollectionPerPartitionThroughput komutlarını da kullanabilirsiniz.

Yayın öncesi özelliklerin etkinleştirildiği Az.CosmosDB modülünü yüklemek için kullanınInstall-Module.

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

Get-AzCosmosDBSqlContainerPerPartitionThroughput Her fiziksel bölümde geçerli RU/sn'yi okumak için veya Get-AzCosmosDBSqlDatabasePerPartitionThroughput komutunu kullanın.


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

Hedef bölüm için RU/sn'leri belirleme

Şimdi en sıcak fiziksel bölümlerimize kaç RU/sn vermek istediğimize karar verelim. Şimdi bu kümeyi hedef bölümlerimiz olarak adlandıralım. Herhangi bir fiziksel bölümün içerebileceği en fazla RU/sn 10.000 RU/sn'dir.

Doğru yaklaşım iş yükü gereksinimlerinize bağlıdır. Genel yaklaşımlar şunlardır:

  • RU/sn değerini yüzde artırarak 429 yanıtın hızını ölçün ve istenen aktarım hızı elde edilene kadar yineleyin.
    • Doğru yüzdeden emin değilseniz, muhafazakar olmak için %10 ile başlayabilirsiniz.
    • Bu fiziksel bölümün iş yükünün aktarım hızının çoğunu gerektirdiğini zaten biliyorsanız, ru/sn sayısını iki katına çıkararak veya en fazla 10.000 RU/sn'ye (hangisi daha düşükse) çıkararak işe başlayabilirsiniz.
  • RU/sn'yi artırma Total consumed RU/s of the physical partition + (Number of 429 responses per second * Average RU charge per request to the partition)
    • Bu yaklaşım, istekler hız sınırlaması olmasaydı "gerçek" RU/sn tüketiminin ne olacağını tahmin etmeye çalışır.

Kaynak bölüm için RU/sn'leri belirleme

Son olarak, diğer fiziksel bölümlerimizde kaç RU/sn tutmak istediğimize karar verelim. Bu seçim, hedef fiziksel bölümün aktarım hızını aldığı bölümleri belirler.

PowerShell API'lerinde, RU/sn'yi yeniden dağıtmak için en az bir kaynak bölüm belirtmeliyiz. Yeniden dağıtımdan sonra her fiziksel bölümün sahip olması gereken özel bir en düşük aktarım hızı da belirtebiliriz. Belirtilmezse, Azure Cosmos DB varsayılan olarak yeniden dağıtımdan sonra her fiziksel bölümün en az 100 RU/sn olmasını sağlar. En düşük aktarım hızının açıkça belirtilmesi önerilir.

Doğru yaklaşım iş yükü gereksinimlerinize bağlıdır. Genel yaklaşımlar şunlardır:

  • Ru/sn değerlerini tüm kaynak bölümlerden eşit olarak alma (= 10 bölüm olduğunda <en iyi sonucu sağlar)
    • Her kaynak fiziksel bölümü dengelemek için ihtiyacımız olan miktarı hesaplayın. Offset = Total desired RU/s of target partition(s) - total current RU/s of target partition(s)) / (Total physical partitions - number of target partitions)
    • Her kaynak bölüm için en düşük aktarım hızını atama = Current RU/s of source partition - offset
  • En az etkin bölümlerden RU/sn alma
    • Hangi fiziksel bölümlerin en az trafik/istek hacmine sahip olduğunu belirlemek için Azure İzleyici ölçümlerini ve Tanılama Günlüklerini kullanın
    • Her kaynak fiziksel bölümü dengelemek için ihtiyacımız olan miktarı hesaplayın. Offset = Total desired RU/s of target partition(s) - total current RU/s of target partition) / Number of source physical partitions
    • Her kaynak bölüm için en düşük aktarım hızını atama = Current RU/s of source partition - offset

3. Adım: Bölümler arasında aktarım hızını programlı olarak değiştirme

Aktarım hızını yeniden dağıtmak için PowerShell komutunu Update-AzCosmosDBSqlContainerPerPartitionThroughput kullanabilirsiniz.

Aşağıdaki örneği anlamak için toplam 6000 RU/sn (6000 el ile RU/sn veya otomatik ölçeklendirme 6000 RU/sn) ve 3 fiziksel bölüm içeren bir kapsayıcımız olduğu bir örnek alalım. Analizimize göre, şunların yer aldığı bir düzen istiyoruz:

  • Fiziksel bölüm 0: 1000 RU/sn
  • Fiziksel bölüm 1: 4000 RU/sn
  • Fiziksel bölüm 2: 1000 RU/sn

Kaynak bölümlerimiz olarak bölüm 0 ve 2'yi belirtiriz ve yeniden dağıtımdan sonra en az 1000 RU/sn'ye sahip olmaları gerektiğini belirtiriz. Bölüm 1, 4000 RU/sn olması gerektiğini belirttiğimiz hedef bölümün dışında.

Update-AzCosmosDBSqlContainerPerPartitionThroughput Aktarım hızını fiziksel bölümler arasında yeniden dağıtmak için ayrılmış RU/sn içeren kapsayıcılar için veya Update-AzCosmosDBSqlDatabasePerPartitionThroughput paylaşılan RU/sn değerlerine sahip veritabanları için komutunu kullanın. Paylaşılan aktarım hızı veritabanlarında, fiziksel bölümlerin kimlikleri bir GUID dizesiyle temsil edilir.

$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

Yeniden dağıtımı tamamladıktan sonra, Azure İzleyici'de PhysicalPartitionThroughput ölçümünü görüntüleyerek değişikliği doğrulayabilirsiniz. Fiziksel bölüm başına kaç RU/sn'niz olduğunu görmek için PhysicalPartitionId boyutuna bölün.

Gerekirse, kapsayıcınızın RU/sn değerinin tüm fiziksel bölümlere eşit olarak dağıtılması için fiziksel bölüm başına RU/sn değerini de sıfırlayabilirsiniz.

Ayrılmış RU/sn'ye Update-AzCosmosDBSqlContainerPerPartitionThroughput sahip kapsayıcılar için komutunu veya Update-AzCosmosDBSqlDatabasePerPartitionThroughput tüm fiziksel bölümlere RU/sn'yi eşit olarak dağıtmak için parametresiyle -EqualDistributionPolicy paylaşılan RU/sn'ye sahip veritabanları için komutunu kullanın.


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

4. Adım: RU/sn tüketiminizi doğrulama ve izleme

Yeniden dağıtımı tamamladıktan sonra, Azure İzleyici'de PhysicalPartitionThroughput ölçümünü görüntüleyerek değişikliği doğrulayabilirsiniz. Fiziksel bölüm başına kaç RU/sn'niz olduğunu görmek için PhysicalPartitionId boyutuna bölün.

Toplam 429 yanıt oranınızı ve RU/sn tüketiminizi izlemeniz önerilir. Daha fazla bilgi için 1. Adım'ı gözden geçirerek beklediğiniz performansı elde ettiğinizi doğrulayın.

Değişikliklerden sonra, genel iş yükünüzün değişmediğini varsayarsak, hem hedef hem de kaynak fiziksel bölümlerin daha önce olduğundan daha yüksek Normalleştirilmiş RU tüketimine sahip olduğunu görürsünüz. Daha yüksek normalleştirilmiş RU tüketimi beklenen davranıştır. Temel olarak, her bölümün gerçekten tüketmesi gerekene daha yakın RU/sn ayırdığınız için daha yüksek normalleştirilmiş RU tüketimi, her bölümün ayrılmış RU/sn'lerini tam olarak kullandığınız anlamına gelir. Sık erişimli bölümlerin istekleri sunmak için daha fazla RU/sn değeri olduğundan genel olarak 429 özel durum oranının daha düşük olduğunu da görmeniz gerekir.

Sınırlamalar

Önizleme uygunluk ölçütleri

Önizlemeyi kullanmak için Azure Cosmos DB hesabınızın aşağıdaki tüm ölçütleri karşılaması gerekir:

  • Azure Cosmos DB hesabınız NoSQL için API veya MongoDB için API kullanıyor.
    • MongoDB için API kullanıyorsanız sürüm = 3.6 olmalıdır >.
  • Azure Cosmos DB hesabınız sağlanan aktarım hızını (el ile veya otomatik ölçeklendirme) kullanıyor. Bölümler arasında aktarım hızı dağıtımı sunucusuz hesaplar için geçerli değildir.

Önizlemeyi kullanmak için kaydolmanız gerekmez. Özelliği kullanmak için PowerShell veya Azure CLI komutlarını kullanarak aktarım hızını kaynaklarınızın fiziksel bölümleri arasında yeniden dağıtın.

Sonraki adımlar

Aşağıdaki makalelerle sağlanan aktarım hızını kullanma hakkında bilgi edinin: