Gerçekleştirilmiş görünümler

Gerçekleştirilmiş görünümler, bir toplama sorgusunu bir kaynak tablo veya başka bir gerçekleştirilmiş görünüm üzerinden kullanıma sunar.

Gerçekleştirilmiş görünümler her zaman toplama sorgusunun güncel bir sonucunu döndürür (her zaman yenidir). Gerçekleştirilmiş görünümü sorgulamak , toplamayı doğrudan kaynak tablo üzerinde çalıştırmaktan daha yüksek performanslıdır.

Not

Neden gerçekleştirilmiş görünümler kullanmalısınız?

Yaygın olarak kullanılan toplamaların gerçekleştirilmiş görünümleri için kaynaklara (veri depolama, arka plan CPU döngüleri) yatırım yaparak aşağıdaki avantajları elde edersiniz:

  • Performans iyileştirmesi: Gerçekleştirilmiş görünümü sorgulamak genellikle aynı toplama işlevleri için kaynak tabloyu sorgulamaktan daha iyi performans gösterir.

  • Taze: Gerçekleştirilmiş görünüm sorgusu, gerçekleştirmenin en son ne zaman gerçekleştiğinden bağımsız olarak her zaman en güncel sonuçları döndürür. Sorgu, görünümün gerçekleştirilmiş bölümünü kaynak tablodaki kayıtlarla birleştirir ve bu kayıt henüz gerçekleşmemiştir ( delta bölüm), her zaman en güncel sonuçları sağlar.

  • Maliyet azaltma:Gerçekleştirilmiş görünümü sorgulamak , kümeden kaynak tablo üzerinde toplama yapmaktan daha az kaynak tüketir. Kaynak tablonun bekletme ilkesi, yalnızca toplama gerekiyorsa azaltılabilir. Bu kurulum, kaynak tablo için sık erişimli önbellek maliyetlerini azaltır.

Örneğin kullanım örnekleri için bkz . Gerçekleştirilmiş görünüm kullanım örnekleri.

Gerçekleştirilmiş görünümler nasıl çalışır?

Gerçekleştirilmiş görünüm iki bileşenden oluşur:

  • Gerçekleştirilmiş parça: Kaynak tablodan toplanan kayıtların bulunduğu ve zaten işlenmiş olan bir tablo. Bu tablo her zaman toplamanın gruplandırma ölçütü bileşimi başına tek bir kayıt tutar.
  • Delta - kaynak tablodaki henüz işlenmemiş yeni alınan kayıtlar.

Gerçekleştirilmiş görünümü sorgulamak, gerçekleştirilmiş bölümü delta bölümüyle birleştirerek toplama sorgusunun güncel sonucunu sağlar. Çevrimdışı gerçekleştirme işlemi , deltadan gerçekleştirilmiş tabloya yeni kayıtlar alır ve var olan kayıtları değiştirir. Değiştirme, değiştirilecek kayıtları tutan kapsamlar yeniden derlenerek gerçekleştirilir. Deltadaki kayıtlar, gerçekleştirilmiş bölümdeki tüm veri parçalarıyla sürekli kesişiyorsa, her bir gerçekleştirme döngüsü, gerçekleştirilmiş bölümün tamamının yeniden oluşturulmasını gerektirir ve alım hızına ayak uyduramayabilir. Bu durumda görünüm iyi durumda değil hale gelir ve delta sürekli büyür. Gerçekleştirilmiş görünüm izleme sayfasında bu tür durumların nasıl giderildiği açıklanır.

Gerçekleştirilmiş görünüm sorguları

Gerçekleştirilmiş görünümü sorgulamanın 2 yolu vardır:

  • Görünümün tamamını sorgulama: Gerçekleştirilmiş görünümü, bir tabloyu sorgulamaya benzer şekilde adına göre sorguladığınızda, gerçekleştirilmiş görünüm sorgusu görünümün gerçekleştirilmiş bölümünü henüz gerçekleştirilmemiş kaynak tablodaki kayıtlarla birleştirir ( delta).

    • Gerçekleştirilmiş görünümü sorgulamak, kaynak tabloya alınan tüm kayıtları temel alarak her zaman en güncel sonuçları döndürür. Gerçekleştirilmiş görünümdeki gerçekleştirilmiş ve gerçekleştirilmemiş parçalar hakkında daha fazla bilgi için, gerçekleştirilmiş görünümlerin nasıl çalıştığına bakın.
    • Bu seçenek, bölümü sorgu süresi boyunca gerçekleştirmesi gerektiğinden delta en iyi performansı göstermeyebilir. Bu durumda performans, görünümün yaşına ve sorguya uygulanan filtrelere bağlıdır. Gerçekleştirilmiş görünüm sorgu iyileştiricisi bölümü, görünümün tamamını sorgularken sorgu performansını artırmanın olası yollarını içerir.
  • Yalnızca gerçekleştirilmiş bölümü sorgulama: görünümü sorgulamanın bir diğer yolu da işlevini kullanmaktırmaterialized_view(). Bu seçenek, görünümün yalnızca gerçekleştirilmiş kısmını sorgulamayı desteklerken, kullanıcının tolere etmek için istekli olduğu maksimum gecikme süresini belirtir.

    • Bu seçeneğin en güncel kayıtları döndürmesi garanti değildir, ancak görünümün tamamını sorgulamaktan her zaman daha yüksek performanslı olmalıdır.
    • Bu işlev, performans açısından yeniliği feda etmek istediğiniz senaryolar için kullanışlıdır( örneğin telemetri panoları için).

İpucu

Gerçekleştirilmiş parçadaki sorgular her zaman görünümün tamamını sorgulamaktan daha iyi performans gösterir. Kullanım örneğiniz için uygun olduğunda her zaman işlevini kullanın materialized_view() .

  • Gerçekleştirilmiş görünümler, kümeler arası veya veritabanları arası sorgulara katılır, ancak joker karakter birleşimlerine veya aramalara dahil değildir.

    • Aşağıdaki örneklerin tümü adıyla ViewNamegerçekleştirilmiş görünümleri içerir:
    cluster('cluster1').database('db').ViewName
    cluster('cluster1').database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • Aşağıdaki örnekler gerçekleştirilmiş görünümlerden kayıtlar içermez :
    cluster('cluster1').database('db').*
    database('*').View*
    search in (*)
    search * 
    

Gerçekleştirilmiş görünüm sorgu iyileştiricisi

Görünümün tamamı sorgulanırken, gerçekleştirilmiş bölüm sorgu süresi boyunca ile delta birleştirilir. Bu, öğesini toplamayı delta ve gerçekleştirilmiş parçayla birleştirmeyi içerir.

  • Sorgu, gerçekleştirilmiş görünüm sorgusunun anahtarlarına göre gruplandırma filtrelerini içeriyorsa, görünümün tamamını sorgulamak daha iyi bir performans gösterir. Performans ipuçları bölümünde sorgu deseninize göre gerçekleştirilmiş görünümünüzü oluşturma hakkında daha fazla ipucuna.create materialized-view bakın.
  • Sorgu iyileştiricisi, sorgu performansını geliştirmesi beklenen özetleme/birleştirme stratejilerini seçer. Örneğin, sorgunun karıştırılıp karıştırılmayacağına ilişkin karar kısmen kayıt delta sayısına bağlıdır. Aşağıdaki istemci isteği özellikleri , uygulanan iyileştirmeler üzerinde biraz denetim sağlar. Bu özellikleri gerçekleştirilmiş görünüm sorgularınızla test edebilir ve sorgu performansı üzerindeki etkilerini değerlendirebilirsiniz.
İstemci isteği özellik adı Tür Description
materialized_view_query_optimization_costbased_enabled bool olarak ayarlanırsa false, gerçekleştirilmiş görünüm sorgularında özetleme/birleştirme iyileştirmelerini devre dışı bırakır. Varsayılan stratejileri kullanır. true varsayılan değerdir.
materialized_view_shuffle dynamic Gerçekleştirilmiş görünüm sorgusunu karıştırmaya zorlar ve (isteğe bağlı olarak) karıştırmak için belirli anahtarlar sağlar. Aşağıdaki örneklere bakın.

Örnekler

  1. Görünümün tamamını sorgular. Kaynak tablodaki en son kayıtlar şunlardır:

    ViewName
    
  2. En son ne zaman gerçekleştirildiğine bakılmaksızın görünümün yalnızca gerçekleştirilmiş bölümünü sorgulayın.

    materialized_view("ViewName")
    
  3. Görünümün tamamını sorgulayıp stratejiyi kullanmak shuffle için bir "ipucu" sağlayın. Kaynak tablodaki en son kayıtlar şunlardır:

    • Örnek 1: sütununa Id göre karıştırma (kullanmaya hint.shufflekey=Idbenzer şekilde):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • Örnek 2: Tüm tuşlara göre karıştırma (kullanmaya hint.strategy=shufflebenzer şekilde):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

Performansla ilgili önemli noktalar

Gerçekleştirilmiş görünüm durumunu etkileyebilecek başlıca katkıda bulunanlar şunlardır:

  • Küme kaynakları: Kümede çalışan diğer işlemler gibi gerçekleştirilmiş görünümler de kümedeki kaynakları (CPU, bellek) kullanır. Küme aşırı yüklenmişse, kümeye gerçekleştirilmiş görünümler eklemek kümenin performansında bir düşüşe neden olabilir. Küme sistem durumu ölçümlerini kullanarak kümenizin durumunu izleyin. İyileştirilmiş otomatik ölçeklendirme şu anda otomatik ölçeklendirme kurallarının bir parçası olarak gerçekleştirilmiş görünümlerin sistem durumunu dikkate almamaktadır.

  • Gerçekleştirilmiş verilerle çakışma: Gerçekleştirme sırasında, son gerçekleştirmeden (delta) sonra kaynak tabloya alınan tüm yeni kayıtlar işlenir ve görünümde gerçekleştirilir. Yeni kayıtlar ve zaten gerçekleştirilmiş kayıtlar arasındaki kesişim ne kadar yüksek olursa, gerçekleştirilmiş görünümün performansı o kadar kötü olur. Gerçekleştirilmiş görünüm, güncelleştirilen kayıt sayısı (örneğin, görünümde arg_max ) kaynak tablonun küçük bir alt kümesiyse en iyi sonucu verir. Gerçekleştirilmiş görünüm kayıtlarının tümünün veya çoğunun her gerçekleştirme döngüsünde güncelleştirilmesi gerekiyorsa, gerçekleştirilmiş görünüm iyi performans göstermeyebilir.

  • Alım oranı: Gerçekleştirilmiş görünümün kaynak tablosunda veri hacminde veya alım hızında sabit kodlanmış sınır yoktur. Ancak, gerçekleştirilmiş görünümler için önerilen alım hızı 1-2 GB/sn'den fazla değildir. Daha yüksek alım oranları hala iyi performans gösterebilir. Performans küme boyutuna, kullanılabilir kaynaklara ve mevcut verilerle kesişim miktarına bağlıdır.

  • Kümedeki gerçekleştirilmiş görünümlerin sayısı: Yukarıdaki önemli noktalar, kümede tanımlanan her bir gerçekleştirilmiş görünüm için geçerlidir. Her görünüm kendi kaynaklarını kullanır ve kullanılabilir kaynaklarda birçok görünüm birbiriyle rekabet eder. Bir kümedeki gerçekleştirilmiş görünümlerin sayısı için sabit kodlanmış sınır olmasa da, küme çok fazla tanımlı olduğunda tüm gerçekleştirilmiş görünümleri işleyemeyebilir. Kümede tek bir gerçekleştirilmiş görünümden fazlası varsa kapasite ilkesi ayarlanabilir. Daha gerçekleştirilmiş görünümleri eşzamanlı olarak çalıştırmak için ilkedeki değerini ClusterMinimumConcurrentOperations artırın.

  • Gerçekleştirilmiş görünüm tanımı: Gerçekleştirilmiş görünüm tanımı, en iyi sorgu performansı için sorgu en iyi yöntemlerine göre tanımlanmalıdır. Daha fazla bilgi için bkz. Komut performansı ipuçları oluşturma.

Gerçekleştirilmiş görünüm üzerinde gerçekleştirilmiş görünüm

Kaynak gerçekleştirilmiş görünüm yinelenenleri kaldırma görünümüyse, başka bir gerçekleştirilmiş görünüm üzerinden gerçekleştirilmiş görünüm oluşturulabilir. Özellikle, kaynak gerçekleştirilmiş görünümün toplaması, kaynak kayıtların yinelenenlerini kaldırmak için olmalıdır take_any(*) . İkinci gerçekleştirilmiş görünüm desteklenen toplama işlevlerini kullanabilir. Gerçekleştirilmiş görünüm üzerinde gerçekleştirilmiş görünüm oluşturma hakkında belirli bilgiler için bkz .create materialized-view . komut.

İpucu

Başka bir gerçekleştirilmiş görünümde tanımlanan gerçekleştirilmiş bir görünümü sorgularken, gerçekleştirilmiş bölümü yalnızca işlevini kullanarak materialized_view() sorgulamanızı öneririz. Her iki görünüm de tam olarak gerçekleştirilmediğinde görünümün tamamını sorgulamak iyi performans sağlamaz. Daha fazla bilgi için bkz . Gerçekleştirilmiş görünüm sorguları.