Aracılığıyla paylaş


İfadeler için kardinalite tahmini (CE) geri bildirimi

Şunlar için geçerlidir: SQL Server 2025 (17.x) Azure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Yanlış kardinalite tahminleri genellikle sorgu iyileştirme sırasında düşük performansa neden olur. İfadeler için kardinalite tahmini (CE) geri bildirimi, CE geri bildirim özelliği tarafından başlatılan çerçeveyi genişletir. Amaç, yinelenen ifadeler için kardinalite tahminlerini geliştirmektir. İfadeler için geri bildirim özelliği, uygun CE modeli seçeneklerini bulmak ve öğrendiklerini bu ifadelerin gelecekteki yürütmelerine uygulamak için sorgular arasında ifadelerin önceki yürütmelerinden öğrenir. CE geri bildirimleri gibi model önerileri de test edilir ve gelecekteki sorgu yürütmelerine otomatik olarak uygulanır.

İfadeler için geri bildirim özelliği, belirli bir sorgunun ifadesine ve veri dağıtımına daha uygun bir model varsayımını tanımlar ve kullanır ve bu da sorgu yürütme planı kalitesini artırır. Şu anda ifadeler için geri bildirim özelliği, tahmini satır sayısıyla gerçek satır sayısının çok farklı olduğu plan işleçlerini tanımlayabilir. Önemli model tahmini hataları oluştuğunda ve deneyebileceğiniz uygun bir alternatif model olduğunda sorgu içindeki ifadelere geri bildirim uygulanır.

Veritabanı Altyapısı'nın farklı sürümleri, verilerin nasıl dağıtıldığına ve sorgulandığına bağlı olarak farklı CE modeli varsayımları kullanır.

İfadeler için CE geri bildirimini kullanma

İfadeler için CE Geri Bildirimi sorgu yürütmelerini izler ve sürekli olarak kardinalite yanlışlığına neden olan alt ifadeleri tanımlar. Gözlemlenen desenler temelinde geri bildirim oluşturulur ve tahmin doğruluğunu geliştirmek için sorgu derlemesi sırasında uygulanır.

Önkoşullar ve yapılandırma

İfadeler için CE Geri Bildirimi'ni kullanmak için aşağıdaki önkoşulların karşılanması gerekir:

  • Veritabanı uyumluluk düzeyi 160 veya üzerini kullanmalıdır.
  • CE_FEEDBACK_FOR_EXPRESSIONS Veritabanı kapsamlı yapılandırma etkinleştirilmelidir (varsayılan olarak etkindir).
  • Veritabanı kapsamlı yapılandırmanın geçerli durumunu denetlemek için:
SELECT name,
       value,
       value_for_secondary
FROM sys.database_scoped_configurations
WHERE name = 'CE_FEEDBACK_FOR_EXPRESSIONS';

Özellik, aşağıdaki veritabanı kapsamlı yapılandırma komutuyla bir veritabanında etkinleştirilebilir:

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;

Bir veritabanında ifadeler için geri bildirim özelliğini devre dışı bırakmak amacıyla, CE_FEEDBACK_FOR_EXPRESSIONS veritabanı kapsamındaki yapılandırmayı devre dışı bırakın.

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = OFF;

Nasıl çalışır?

Parmak izleri SQL Server Veritabanı Altyapısı ile yeni bir kavram olmasa da, ifadeler için geri bildirim özelliği bağlamındaki parmak izi , bir ifadenin içinden hesaplanan imzaların birleşimini ifade eder. Örneğin, kurgusal bir işletmedeki bir iş analisti, bu müşterilerin 10.000 TL'den fazla harcama yaptığı müşteri siparişlerinden herhangi biri hakkında bilgi edinmek isteyebilir. Siparişler tablosuna da katılan bir Müşteriler tablosundan veri toplamayı içeren select deyimi, bu tür verileri görüntülemenin bir yolu olabilir:

SELECT *
FROM Customer AS C
     INNER JOIN Orders AS O
         ON C.custkey = O.o_custkey
WHERE O.o_totalprice > 10000;

Bu sorgu için, sorgu iyileştiricisi her tablodan veri almayı seçebilir: Customer, ve ardından Ordersher iki tablodan da ilişkili sütunların tümünü seçebilir ve bir siparişin 10.000 TL'den büyük olduğu verileri (filtreyle) totalprice. Bir sorgu planındaki filtre veya birleştirme gibi her mantıksal ifade, parmak izine katkıda bulunabilecek bir imza oluşturur. İfadeler için CE Geri Bildirimi, genel sorgu yapısı farklı olsa bile benzer alt ifadeleri paylaşan sorgular arasında geri bildirim öğrenmek ve geri bildirim uygulamak için bu parmak izlerini kullanır.

Bu özellik, sorgular arasında tutarlı kardinaliteye sahip aşırı tahmin/düşük tahmin içeren ifadelere odaklanır. Şu anda CE geri bildirimi için uygun olmayan iki farklı iş yükü deseni analiz eder:

  • Yinelenen yürütmeleri olmayan ancak yinelenen ifade desenleri olan iş yükleri. Örneğin, yaygın olarak kullanılan birleştirme deseni.

  • Sorgunun bir bölümünün aynı sorgunun başka bir bölümünden farklı bir CE modelinden yararlanabileceği sorgular. Örneğin, tablolar A ve B arasındaki birleştirme basit kapsama gerektirebilir ve tablolar C ve D arasındaki birleştirme temel kapsama gerektirebilir.

İfadeler için geri bildirim özelliği, aşağıdakiler gibi yanlış tahmin sorunlarını düzeltmek için filtre ve birleştirme varsayımlarını uygular:

Filters:

  • ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
  • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
  • ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES

Joins:

  • ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
  • Temel içerme varsayımı (ipucu belirtilmesine gerek duyulmaz)

Bu varsayımlar, kapsama ve bağımsızlık gibi farklı CE modeli stratejilerini yansıtır. Daha kavramsal arka plan için bkz . Kate Smith Tarafından Açıklanan Kardinalite Tahmini Geri Bildirimi ve SQL Server 2016'da Bağıntılı Sütunlar için Kardinalite Tahmini.

İpucu yaşam döngüsü

Geri bildirim, aşağıdaki durumlarda ilerlemeye ilişkin ipuçları sağlar:

  • İzleme: Sistem, bir alt ifadenin yinelenen yürütmelerini gözlemler ve kardinalite yanlışlığının devam edip etmediğini izler.
  • Uygulama: Yanlış tahmin devam ederse, CE modelini ayarlamak için sorgu derlemesi sırasında bir geri bildirim ipucu oluşturulabilir ve uygulanabilir.
  • Engellendi: Uygulanan ipucu en iyi olmayan kardinalite tahminiyle sonuçlanırsa gelecekte kullanılması engellenir.

Bu yaşam döngüsü, geri bildirimin yalnızca yararlı olduğunda uygulanmasını sağlar ve tahmin kalitesinde regresyondan kaçınmaktadır.

Regresyon koruması

İfadeler için CE geri bildirimi regresyon korumasını içerir. bir ipucu, öncekinden daha kötü bir kardinalite tahminlerine neden olursa engellenir. Ancak bu koruma kardinalite tahminiyle sınırlıdır ve sorgu yürütme süresini değerlendirmez. Yürütme/çalışma zamanıyla ilgili regresyonlar için otomatik plan düzeltmesi müdahale edebilir. Otomatik plan düzeltme özelliği etkinleştirilmemişse, özelliğin gerçekleştireceği eylemler sys.dm_db_tuning_recommendations dinamik yönetim görünümü sorgulanarak kaydedilir ve kullanılabilir.

Telemetri ve izleme

İfadeler için CE Geri Bildirimi etkinliği aşağıdaki araçlar kullanılarak izlenebilir:

  • Genişletilmiş olaylar:
    • adhoc_ce_feedback_query_level_telemetry
    • query_adhoc_ce_feedback_expression_hint
    • query_adhoc_ce_feedback_hint

CE Geri Bildirimi genişletilmiş olayları query_ce_feedback_begin_analysis ve query_ce_feedback_telemetry özelliğin etkinliğini izlerken de yararlı olabilir.

  • Parmak izi verileri, AdHocCEFeedbackCache adlı özel bir bellek yazıcısında önbelleğe alınır. Bu önbelleğe sistem kataloğu görünümü sys.dm_exec_ce_feedback_cachearacılığıyla erişilebilir.

  • Showplan entegrasyonu

    İfadeler için CE geri bildirimi ipucu uygulandığında, sorgu planı Showplan XML'de bir CardinalityFeedback öznitelik içerir. Bu etiket, belirli bir alt ifade için kardinalite tahminini ayarlamak için geri bildirimin kullanıldığını gösterir.

Önbellek ve kalıcılık

Kalıcı geri bildirim bir iç Sorgu Deposu tablosunda (sys.plan_persist_ce_feedback_for_expressions) depolanır ve başlangıçta yeniden yüklenir. Bu, sistemin önceden karşılaştığı parmak izleriyle ilgili geri bildirimde bulunmak zorunda olmamasını sağlar. Önbellek kalıcılık mekanizması doğası gereği kayıptır, yani geri bildirim yalnızca düzenli aralıklarla diskte kalıcı hale getirilir. Kalıcılığın sıklığı şu anda yapılandırılamaz.

SQL Server örneği yeniden başlatılırsa veya bellek bir sonraki kalıcılık döngüsünden önce temizlenirse, son temizlemeden sonra oluşturulan geri bildirim kaybolabilir.

Limitations

Şu anda Sorgu Mağazası için kullanılabilir ikincil sunucularda kalıcılık mevcut değildir. İfadeler için CE geri bildirimi, birincil ve ikincil replikalarda farklı şekillerde uygulanabilir. Ancak, geri bildirim ikincil çoğaltmalarda kalıcı değildir ve bu senaryoda yalnızca bellek tabanlı önbellek içinde bulunur. Bir yük devretme olayı oluşursa, okunabilir ikincil öğelerden herhangi birinde öğrenilen geri bildirim kaybolur.