Aktarım hızını bölümler arasında yeniden dağıtma
ŞUNLAR IÇIN GEÇERLIDIR: 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:
- Bir koleksiyonun birkaç bölümünde tutarlı olarak %100 normalleştirilmiş kullanım görüyorsunuz.
- Sürekli olarak gecikme süresini kabulden daha yüksek görüyorsunuz.
%100 RU tüketimi görmüyorsanız ve uçtan uca gecikme süreniz kabul edilebilirse, bölüm başına RU/sn'yi yeniden yapılandırma eylemi gerekmez.
Tüm bölümlerinizde zaman zaman öngörülemeyen ani artışlarla tutarlı trafiğe sahip bir iş yükünüz varsa otomatik ölçeklendirme ve ani artış kapasitesi 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 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 StoreId
olduğ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 %100 normalleştirilmiş ru tüketimi görüyoruz. 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.
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, 1m), 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-AzCosmosDBMongoDBCollectionPerPartitionThroughput
Her fiziksel bölümde geçerli RU/sn'yi okumak için komutunu kullanın.
// 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
Hedef bölüm için RU/sn'leri belirleme
Şimdi en sıcak fiziksel bölümlere 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 10 artırıp istenen aktarım hızı elde edilene kadar tekrarlayın.
- 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.
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
- Her kaynak fiziksel bölümü dengelemek için ihtiyacımız olan miktarı hesaplayın.
- 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-AzCosmosDBMongoDBCollectionPerPartitionThroughput
Aktarım hızını fiziksel bölümler arasında yeniden dağıtmak için ayrılmış RU/sn Update-AzCosmosDBMongoDBDatabasePerPartitionThroughput
içeren koleksiyonlar için veya 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
// 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
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 Update-AzCosmosDBMongoDBCollectionPerPartitionThroughput
içeren koleksiyonlar için komutunu veya tüm fiziksel bölümlere RU/sn'yi Update-AzCosmosDBMongoDBDatabasePerPartitionThroughput
eşit olarak dağıtmak için parametresiyle -EqualDistributionPolicy
paylaşılan RU/sn içeren veritabanları için komutunu kullanın.
// 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. 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.
Bölüm başına normalleştirilmiş ru 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 MongoDB için API kullanıyor.
- 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:
- Sağlanan aktarım hızı hakkında daha fazla bilgi edinin.
- İstek birimleri hakkında daha fazla bilgi edinin.
- Sık erişimli bölümleri izlemeli misiniz? Bkz. izleme isteği birimleri.
- En iyi yöntemleri öğrenmek mi istiyorsunuz? Sağlanan aktarım hızını ölçeklendirmeye yönelik en iyi yöntemlere bakın .
- Hız sınırlama hataları hakkında daha fazla bilgi edinin