Aracılığıyla paylaş


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

Şunlar için geçerlidir: ✅Microsoft FabricAzure Veri Gezgini

Gerçekleştirilmiş görünümler bir toplama sorgusunu 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ş bir 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ş bir görünümü sorgulamak genellikle aynı toplama işlevleri için kaynak tabloyu sorgulamaktan daha iyi performans gösterir.

  • Güncellik: 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ş bir görünümü sorgulamak, 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ı tutan ve önceden 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 bir sonucunu sağlar. Çevrimdışı gerçekleştirme işlemi, deltadaki yeni kayıtları gerçekleştirilmiş tabloya alır ve mevcut kayıtları güncelleştirir. Delta ile gerçekleştirilmiş bölüm arasındaki kesişim büyükse ve birçok kayıt güncelleştirme gerektiriyorsa, bunun gerçekleştirme işlemi üzerinde olumsuz bir etkisi olabilir. Bu tür durumlarla ilgili sorunları giderme hakkında gerçekleştirilmiş görünümleri izleme konusuna bakın.

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ü kaynak tablodaki henüz gerçekleşmemiş kayıtlarla birleştirir (the 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ümde 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 istediği 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, örneğin telemetri panoları gibi performans için bazı yenilikleri feda etmek istediğiniz senaryolar için kullanışlıdır.

İpucu

Gerçekleştirilmiş kısımdaki sorgular her zaman görünümün tamamını sorgulamaktan daha iyi performans gösterir. Kullanım örneğine 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 aramalarına 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ümler çapraz Eventhouse veya veritabanları arası sorgulara katılır, ancak joker karakter birleşimlerine veya aramalarına dahil değildir.

    • Aşağıdaki örneklerin tümü adıyla ViewNamegerçekleştirilmiş görünümleri içerir:
    cluster("<serviceURL>").database('db').ViewName
    cluster("<serviceURL>").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("<serviceURL>").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ırasında 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 gruplama filtreleri içeriyorsa, görünümün tamamını sorgulama daha iyi bir performans gösterir. Performans ipuçları bölümünde sorgu düzeninize 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ı Type Açıklama
materialized_view_query_optimization_costbased_enabled bool olarak falseayarlanırsa, gerçekleştirilmiş görünüm sorgularında özetleme/birleştirme iyileştirmelerini devre dışı bırakır. Varsayılan stratejileri kullanır. Varsayılan true değeridir.
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.

ingestion_time() gerçekleştirilmiş görünümler bağlamında işlev

ingestion_time() işlevi, görünümün tamamını sorgularsa gerçekleştirilmiş görünüm bağlamında kullanıldığında null değerler döndürür. Görünümün gerçekleştirilmiş bölümünü sorgularken, dönüş değeri gerçekleştirilmiş görünümün türüne bağlıdır:

  • Tek arg_max()/arg_min()take_any()/bir toplama içeren gerçekleştirilmiş görünümlerde , ingestion_time() kaynak tablodaki ilgili kaydın değerine eşittir.ingestion_time()
  • Diğer tüm gerçekleştirilmiş görünümlerde değeri ingestion_time() yaklaşık olarak gerçekleşme zamanıdır (gerçekleştirilmiş görünümlerin nasıl çalıştığına bakın).

Örnekler

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

    ViewName
    
  2. Görünümün gerçekleştirilmiş bölümünü, en son ne zaman gerçekleştirildiğine bakılmaksızı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 anahtarlara göre karıştırma (kullanmaya hint.strategy=shufflebenzer şekilde):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

Performans değerlendirmeleri

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 düşüşe neden olabilir. Küme 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 almaz.
  • Gerçekleştirilmiş verilerle örtüşme: Gerçekleştirme sırasında, son gerçekleştirmeden (delta) bu yana kaynak tabloya alınan tüm yeni kayıtlar işlenir ve görünümde gerçekleştirilir. Yeni kayıtlar ile 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 oranı 1-2 GB/sn'den fazla değildir. Daha yüksek alım oranları yine de iyi performans gösterebilir. Performans veritabanı boyutuna, kullanılabilir kaynaklara ve mevcut verilerle kesişme 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 birçok görünüm kullanılabilir kaynaklarda birbiriyle rekabet eder. Bir kümedeki gerçekleştirilmiş görünüm sayısı için sabit kodlanmış sınır olmasa da, küme çok sayıda tanımlı görünüm 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. Eşzamanlı olarak daha fazla gerçekleştirilmiş görünüm ç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, gerçekleştirilmiş görünüm başka bir gerçekleştirilmiş görünüm üzerinden oluşturulabilir. Özellikle, kaynak gerçekleştirilmiş görünümün toplanması, 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ı sorgulanmaz. Daha fazla bilgi için bkz . Gerçekleştirilmiş görünüm sorguları.