Azure Cosmos DB tümleşik önbelleği - Genel Bakış
ŞUNUN IÇIN GEÇERLIDIR: NoSQL
Azure Cosmos DB tümleşik önbelleği, istek hacminiz arttıkça yönetilebilir maliyetler ve düşük gecikme süresi sağlamanıza yardımcı olan bir bellek içi önbellektir. Tümleşik önbelleği ayarlamak kolaydır ve önbellek geçersiz kılınması veya arka uç altyapısını yönetmek için özel kod yazmak için zaman harcamanız gerekmez. Tümleşik önbelleğiniz, Azure Cosmos DB hesabınızda ayrılmış bir ağ geçidi kullanır. Tümleşik önbellek, iyileştirilmiş performans için ayrılmış bir ağ geçidi kullanacak birçok Azure Cosmos DB özelliğinden ilkidir. İş yükünüz için gereken çekirdek ve bellek sayısına göre üç olası ayrılmış ağ geçidi boyutu arasından seçim yapabilirsiniz.
Tümleşik önbellek, ayrılmış ağ geçidi içinde otomatik olarak yapılandırılır. Tümleşik önbelleğin iki bölümü vardır:
- Nokta okumaları için öğe önbelleği
- Sorgular için sorgu önbelleği
Tümleşik önbellek, En Son Kullanılan (LRU) çıkarma ilkesine sahip bir okuma ve yazma önbelleğidir. Öğe önbelleği ve sorgu önbelleği tümleşik önbellek içinde aynı kapasiteyi paylaşır ve LRU çıkarma ilkesi her ikisi için de geçerlidir. Başka bir deyişle veriler, okuma noktası veya sorgu olmasına bakılmaksızın, en son ne zaman kullanıldığına bağlı olarak önbellekten çıkarılır.
Not
Tümleşik önbellek hakkında geri bildiriminiz var mı? Duymak istiyoruz! Geri bildirimlerinizi doğrudan Azure Cosmos DB mühendislik ekibiyle paylaşmaktan çekinmeyin: cosmoscachefeedback@microsoft.com
Tümleşik önbellekten yararlanan iş yükleri
Tümleşik önbelleğin temel amacı, yoğun okuma içeren iş yüklerinin maliyetlerini azaltmaktır. Azure Cosmos DB önbelleğe almadan hızlı olduğundan, düşük gecikme süresi yararlı olsa da tümleşik önbelleğin temel avantajı değildir.
Nokta okumaları ve tümleşik önbelleğe isabet eden sorguların RU ücreti 0 olacaktır. Önbellek isabetlerinin işlem başına maliyeti arka uç veritabanındaki okumalardan çok daha düşük olacaktır.
Aşağıdaki özelliklere uyan iş yükleri tümleşik önbelleğin maliyetleri düşürmeye yardımcı olup olmadığını değerlendirmelidir:
- Yoğun okuma içeren iş yükleri
- Büyük öğelerde birçok yinelenen nokta okuması
- Yinelenen çok sayıda yüksek RU sorgusu
- Okumalar için sık erişimli bölüm anahtarı
Beklenen tasarrufların en büyük faktörü, okumaların kendilerini tekrarlama derecesidir. İş yükünüz kısa bir süre içinde aynı nokta okuma veya sorgularını tutarlı bir şekilde yürütürse tümleşik önbellek için harika bir adaydır. Yinelenen okumalar için tümleşik önbelleği kullanırken, yalnızca ilk okuma için RU'ları kullanırsınız. Aynı ayrılmış ağ geçidi düğümü üzerinden yönlendirilen sonraki okumalar (pencere içinde MaxIntegratedCacheStaleness
ve veriler çıkarılmamışsa) aktarım hızını kullanmaz.
Aşağıdakiler dahil olmak üzere bazı iş yükleri tümleşik önbelleği dikkate almamalıdır:
- Yoğun yazma içeren iş yükleri
- Nadiren yinelenen nokta okumaları veya sorguları
Öğe önbelleği
Nokta okumaları için öğe önbelleğini kullanabilirsiniz (başka bir deyişle, Öğe Kimliği ve bölüm anahtarına göre anahtar/değer aramaları).
Öğe önbelleğini doldurma
- Yeni yazma, güncelleştirme ve silme işlemleri otomatik olarak öğe önbelleğine doldurulur
- Uygulamanız daha önce önbellekte olmayan belirli bir öğeyi okumaya çalışırsa (önbellek isabetsiz önbelleği), öğe artık öğe önbelleğinde depolanır
Öğe önbelleği geçersiz kılınması ve çıkarılması
- Öğe güncelleştirme veya silme
- En son kullanılan (LRU)
- Önbellek saklama süresi (başka bir deyişle ,
MaxIntegratedCacheStaleness
)
Sorgu önbelleği
Sorgu önbelleği sorguları önbelleğe almak için kullanılabilir. Sorgu önbelleği, sorguyu anahtar/değer aramasına dönüştürür; burada anahtar sorgu metnidir ve değer sorgu sonuçlarıdır. Tümleşik önbelleğin sorgu altyapısı yoktur, yalnızca her sorgu için anahtar/değer aramasını depolar.
Sorgu önbelleğini doldurma
- Önbellekte bu sorgu için bir sonuç yoksa (önbellek kaçırma), sorgu arka uçtan gönderilir. Sorgu çalıştırıldıktan sonra önbellek bu sorgunun sonuçlarını depolar
Sorgu önbelleği çıkarma
- En son kullanılan (LRU)
- Önbellek saklama süresi (başka bir deyişle ,
MaxIntegratedCacheStaleness
)
Sorgu önbelleğiyle çalışma
Sorgularınızın birden çok sonuç sayfası olsa bile sorgu önbelleğiyle çalışırken özel koda ihtiyacınız yoktur. Sorgu sayfalandırma için en iyi yöntemler ve kod, sorgunuz tümleşik önbelleğe isabet eder veya arka uç sorgu altyapısında yürütülürse aynıdır.
Sorgu önbelleği, uygun olduğunda sorgu devamlılık belirteçlerini otomatik olarak önbelleğe alır. Birden çok sonuç sayfası içeren bir sorgunuz varsa, tümleşik önbellekte depolanan tüm sayfaların RU ücreti 0 olur. Sonraki sorgu sonuçları sayfalarınız arka uç yürütmesi gerektiriyorsa, önceki çalışmanın yinelenmemesi için önceki sayfadan bir devamlılık belirteci olur.
Not
Farklı ayrılmış ağ geçidi düğümleri içindeki tümleşik önbellek örnekleri birbirinden bağımsız önbelleklere sahiptir. Veriler bir düğüm içinde önbelleğe alınmışsa, diğer düğümlerde önbelleğe alınmış olması gerekmez. Aynı sorgunun birden çok sayfasını aynı ayrılmış ağ geçidi düğümüne yönlendirilmesi garanti değildir.
Tümleşik önbellek tutarlılığı
Tümleşik önbellek, okuma isteklerini yalnızca oturum ve nihai tutarlılık ile destekler. Okumada tutarlı ön ek, sınırlanmış eskime durumu veya güçlü tutarlılık varsa, her zaman tümleşik önbelleği atlar ve arka uçtan sunulur.
Tüm okumalar için oturumu veya nihai tutarlılığı yapılandırmanın en kolay yolu , bunu hesap düzeyinde ayarlamaktır. Ancak, okumalarınızın yalnızca bir bölümünün belirli bir tutarlılığı olmasını istiyorsanız, tutarlılığı istek düzeyinde de yapılandırabilirsiniz.
Not
Diğer tutarlılıklara sahip yazma istekleri önbelleği doldurmaya devam eder, ancak önbellekten okumak için isteğin oturum veya nihai tutarlılığa sahip olması gerekir.
Oturum tutarlılığı
Oturum tutarlılığı hem tek bölge hem de genel olarak dağıtılmış Azure Cosmos DB hesapları için en yaygın kullanılan tutarlılık düzeyidir. Oturum tutarlılığı kullanılırken, tek istemci oturumları kendi yazma işlemlerini okuyabilir. Tümleşik önbelleği kullanırken, yazma işlemleri gerçekleştiren oturumun dışındaki istemciler nihai tutarlılığı görür.
MaxIntegratedCacheStaleness
MaxIntegratedCacheStaleness
, seçilen tutarlılıktan bağımsız olarak önbelleğe alınan nokta okumaları ve sorguları için kabul edilebilir en yüksek eskime süresidir. MaxIntegratedCacheStaleness
, istek düzeyinde yapılandırılabilir. Örneğin, 2 saat ayarlarsanız MaxIntegratedCacheStaleness
, isteğiniz yalnızca veriler 2 saatten kısaysa önbelleğe alınmış verileri döndürür. Tümleşik önbelleği kullanarak yinelenen okuma olasılığını artırmak için değerini iş gereksinimlerinizin izin verdikçe yüksek olarak ayarlamanız MaxIntegratedCacheStaleness
gerekir.
önbelleğini dolduran bir istekte yapılandırıldığında , isteğinin ne kadar süre önbelleğe alınacağını etkilemediğini anlamak MaxIntegratedCacheStaleness
önemlidir. MaxIntegratedCacheStaleness
önbelleğe alınmış verileri kullanmaya çalıştığınızda tutarlılığı zorlar. Genel TTL veya önbellek saklama ayarı yoktur, bu nedenle veriler yalnızca tümleşik önbellek doluysa veya yeni bir okuma geçerli önbelleğe alınmış girdinin yaşından küçükse MaxIntegratedCacheStaleness
önbellekten çıkarılır.
Bu, çoğu önbelleğin çalışma şekline göre bir geliştirmedir ve aşağıdaki ek özelleştirmelere izin verir:
- Her nokta okuma veya sorgu için farklı eskime durumu gereksinimleri ayarlayabilirsiniz
- Aynı nokta okuma veya sorguyu çalıştırsalar bile farklı istemciler farklı
MaxIntegratedCacheStaleness
değerler yapılandırabilir - Önbelleğe alınan veriler için okuma tutarlılığını değiştirmek istiyorsanız, değişikliğin
MaxIntegratedCacheStaleness
okuma tutarlılığı üzerinde hemen bir etkisi olur
Not
En düşük MaxIntegratedCacheStaleness
değer 0, maksimum değer ise 10 yıldır. Açıkça yapılandırılmadığında varsayılan MaxIntegratedCacheStaleness
değer 5 dakikadır.
parametresini MaxIntegratedCacheStaleness
daha iyi anlamak için aşağıdaki örneği göz önünde bulundurun:
Saat | İstek | Yanıt |
---|---|---|
t = 0 sn | MaxIntegratedCacheStaleness = 30 saniye ile A Sorgusu Çalıştırma | Arka uç veritabanından sonuç döndürme (normal RU ücretleri) ve önbelleği doldurma |
t = 0 sn | Sorgu B'sini MaxIntegratedCacheStaleness = 60 saniye ile çalıştırma | Arka uç veritabanından sonuçları döndürme (normal RU ücretleri) ve önbelleği doldurma |
t = 20 sn | Sorgu A'ya MaxIntegratedCacheStaleness = 30 saniye ile çalıştırma | Tümleşik önbellekten sonuç döndürme (0 RU ücreti) |
t = 20 sn | Sorgu B'sini MaxIntegratedCacheStaleness = 60 saniye ile çalıştırma | Tümleşik önbellekten sonuç döndürme (0 RU ücreti) |
t = 40 sn | Sorgu A'ya MaxIntegratedCacheStaleness = 30 saniye ile çalıştırma | Arka uç veritabanından (normal RU ücretleri) ve yenileme önbelleğinden sonuç döndürme |
t = 40 sn | Sorgu B'sini MaxIntegratedCacheStaleness = 60 saniye ile çalıştırma | Tümleşik önbellekten sonuç döndürme (0 RU ücreti) |
t = 50 sn | Sorgu B'sini MaxIntegratedCacheStaleness = 20 saniye ile çalıştırma | Arka uç veritabanından (normal RU ücretleri) ve yenileme önbelleğinden sonuç döndürme |
yapılandırmayı MaxIntegratedCacheStaleness
öğrenin.
Ölçümler
Tümleşik önbellek için bazı önemli ölçümleri izlemek yararlı olur. Bu ölçümler şunlardır:
DedicatedGatewayCPUUsage
- Tüm ayrılmış ağ geçidi düğümleri genelinde veriler için Ortalama, Maksimum veya En Düşük Toplama türleriyle CPU kullanımı.DedicatedGatewayAverageCPUUsage
- (Kullanım dışı) Tüm ayrılmış ağ geçidi düğümleri arasında ortalama CPU kullanımı.DedicatedGatewayMaximumCPUUsage
- (Kullanım dışı) Tüm ayrılmış ağ geçidi düğümleri arasında en fazla CPU kullanımı.DedicatedGatewayMemoryUsage
- Tüm ayrılmış ağ geçidi düğümleri genelinde veriler için Ortalama, Maksimum veya En Düşük Toplama türleriyle bellek kullanımı.DedicatedGatewayAverageMemoryUsage
- (Kullanım dışı) Tüm ayrılmış ağ geçidi düğümleri arasında ortalama bellek kullanımı.DedicatedGatewayRequests
- Tüm ayrılmış ağ geçidi düğümleri genelindeki ayrılmış ağ geçidi isteklerinin toplam sayısı.IntegratedCacheEvictedEntriesSize
– Tüm ayrılmış ağ geçidi düğümleri arasında LRU nedeniyle tümleşik önbellekten çıkarılan ortalama veri miktarı. Bu değer, süreyi aştığıMaxIntegratedCacheStaleness
için süresi dolan verileri içermez.IntegratedCacheItemExpirationCount
- Önbelleğe alınan nokta okumalarının tüm ayrılmış ağ geçidi düğümleri arasındaki süreyi aşmasıMaxIntegratedCacheStaleness
nedeniyle tümleşik önbellekten çıkarılan öğelerin ortalama sayısı.IntegratedCacheQueryExpirationCount
- Önbelleğe alınan sorguların tüm ayrılmış ağ geçidi düğümleri arasındaki süreyi aşmasıMaxIntegratedCacheStaleness
nedeniyle tümleşik önbellekten çıkarılan ortalama sorgu sayısı.IntegratedCacheItemHitRate
– Tümleşik önbelleği kullanan nokta okumalarının oranı (oturum veya nihai tutarlılık ile ayrılmış ağ geçidi üzerinden yönlendirilen tüm nokta okumalarının dışında). Bu değer, tüm ayrılmış ağ geçidi düğümlerindeki tümleşik önbellek örneklerinin ortalamasıdır.IntegratedCacheQueryHitRate
– Tümleşik önbelleği kullanan sorguların oranı (oturum veya nihai tutarlılık ile ayrılmış ağ geçidi üzerinden yönlendirilen tüm sorguların dışında). Bu değer, tüm ayrılmış ağ geçidi düğümlerindeki tümleşik önbellek örneklerinin ortalamasıdır.
Mevcut tüm ölçümler varsayılan olarak Ölçümler dikey penceresinden kullanılabilir (Ölçümler klasik değil):
Ölçümler, tüm ayrılmış ağ geçidi düğümleri arasında ortalama, maksimum veya toplamdır. Örneğin, beş düğümle ayrılmış bir ağ geçidi kümesi sağlarsanız ölçümler beş düğümün tümünde toplanan değeri yansıtır. Her bir düğüm için ölçüm değerlerini belirlemek mümkün değildir.
Genel sorunları giderme
Aşağıdaki örneklerde bazı yaygın senaryolarda hata ayıklama gösterilmektedir:
Uygulamamın ayrılmış ağ geçidini kullanıp kullanmadığı anlamadım
öğesini DedicatedGatewayRequests
denetleyin. Bu ölçüm, tümleşik önbelleğe isabet edip etmediklerine bakılmaksızın ayrılmış ağ geçidini kullanan tüm istekleri içerir. Uygulamanız özgün bağlantı dizenizle standart ağ geçidini veya doğrudan modu kullanıyorsa hata iletisi görmezsiniz, ancak DedicatedGatewayRequests
sıfır olur. Uygulamanız ayrılmış ağ geçidi bağlantı dizenizle doğrudan modu kullanıyorsa, yine de az sayıda DedicatedGatewayRequests
görebilirsiniz.
İsteklerimin tümleşik önbellekte olup olmadığını anlamadım
ve IntegratedCacheQueryHitRate
öğesini IntegratedCacheItemHitRate
denetleyin. Bu değerlerin ikisi de sıfırsa istekler tümleşik önbelleğe isabet etmez. Ayrılmış ağ geçidi bağlantı dizesini kullanıp kullanmadığınızı, ağ geçidi moduna bağlanıp bağlanmadığınızı ve oturum veya nihai tutarlılık ayarladığınızı denetleyin.
Ayrılmış ağ geçidimin çok küçük olup olmadığını anlamak istiyorum
ve IntegratedCacheQueryHitRate
öğesini IntegratedCacheItemHitRate
denetleyin. Yüksek değerler (örneğin, 0,7-0,8'in üzerinde), ayrılmış ağ geçidinin yeterince büyük olduğunu gösteren iyi bir işarettir.
IntegratedCacheItemHitRate
veya IntegratedCacheQueryHitRate
düşükse, öğesine IntegratedCacheEvictedEntriesSize
bakın. IntegratedCacheEvictedEntriesSize
yüksekse, daha büyük bir ayrılmış ağ geçidi boyutunun yararlı olacağı anlamına gelebilir. Ayrılmış ağ geçidi boyutunu artırarak ve yeni IntegratedCacheItemHitRate
ile IntegratedCacheQueryHitRate
karşılaştırarak denemeler yapabilirsiniz. Daha büyük bir ayrılmış ağ geçidi veya IntegratedCacheQueryHitRate
'yi geliştirmezseIntegratedCacheItemHitRate
, okumaların tümleşik önbelleğin etkili olması için yeterli sayıda tekrarlamaması mümkündür.
Ayrılmış ağ geçidimin çok büyük olup olmadığını anlamak istiyorum
Ayrılmış bir ağ geçidinin çok büyük olup olmadığını ölçmek, ayrılmış bir ağ geçidinin çok küçük olup olmadığını ölçmekten daha zordur. Genel olarak, küçük bir başlangıç yapmalı ve geliştirmeyi durdurana kadar IntegratedCacheItemHitRate
IntegratedCacheQueryHitRate
ayrılmış ağ geçidi boyutunu yavaşça artırmanız gerekir. Bazı durumlarda, iki önbellek isabeti ölçümünden yalnızca biri önemli olacaktır, her ikisi de önemli değildir. Örneğin, iş yükünüz nokta okumaları yerine öncelikli olarak sorgular ise , IntegratedCacheQueryHitRate
değerinden IntegratedCacheItemHitRate
çok daha önemlidir.
LRU yerine aşılması MaxIntegratedCacheStaleness
nedeniyle çoğu veri önbellekten çıkarılırsa, önbelleğiniz gerekenden daha büyük olabilir. ve IntegratedCacheQueryExpirationCount
birleştirilmiş neredeyse kadar IntegratedCacheEvictedEntriesSize
büyükseIntegratedCacheItemExpirationCount
, daha küçük bir ayrılmış ağ geçidi boyutuyla denemeler yapabilir ve performansı karşılaştırabilirsiniz.
Daha fazla ayrılmış ağ geçidi düğümü eklemem gerekip gerekmediğini anlamak istiyorum
Bazı durumlarda gecikme süresi beklenmedik şekilde yüksekse daha büyük düğümler yerine daha fazla ayrılmış ağ geçidi düğümüne ihtiyacınız olabilir. Daha fazla ayrılmış ağ geçidi düğümü eklemenin DedicatedGatewayCPUUsage
gecikme süresini azaltıp azaltmayacağını belirlemek için ve DedicatedGatewayMemoryUsage
öğesini denetleyin. Tümleşik önbelleğin tüm örnekleri birbirinden bağımsız olduğundan, daha fazla ayrılmış ağ geçidi düğümü eklenmesinin IntegratedCacheEvictedEntriesSize
öğesini azaltmayacağını unutmayın. Ancak daha fazla düğüm eklemek, ayrılmış ağ geçidi kümenizin işleyebileceği istek hacmini geliştirir.
Sonraki adımlar
- Tümleşik önbellek hakkında SSS
- Tümleşik önbelleği yapılandırma
- Ayrılmış ağ geçidi
- Azure Cosmos DB'ye geçiş için kapasite planlaması yapmaya mı çalışıyorsunuz? Kapasite planlaması için mevcut veritabanı kümeniz hakkındaki bilgileri kullanabilirsiniz.
- Tek bildiğiniz mevcut veritabanı kümenizdeki sanal çekirdek ve sunucu sayısıysa, sanal çekirdekleri veya vCPU'ları kullanarak istek birimlerini tahmin etme hakkında bilgi edinin
- Geçerli veritabanı iş yükünüz için tipik istek oranlarını biliyorsanız Azure Cosmos DB kapasite planlayıcısı kullanarak istek birimlerini tahmin etme hakkında bilgi edinin