SEÇENEĞİ (YENİDEN) her Zaman daha Hızlıdır; Neden? | Netgez.com
SORU
1 Ocak 2014, ÇARŞAMBA


SEÇENEĞİ (YENİDEN) her Zaman daha Hızlıdır; Neden?

Sorgu şey beş dakika içinde almak için neden atlama sırasında benim sorgu için OPTION (RECOMPILE) ekleme yarım saniye içinde çalışmasına neden burada garip bir durumla karşılaştım,.

Bu sorguyu Sorgu Çözümleyicisi ya benim C çalıştırıldığında durumda# SqlCommand.ExecuteReader()) program. Arama (arama) DBCC FREEPROCCACHE DBCC dropcleanbuffers hiç fark etmez; Sorgu sonuçları her zaman anında OPTION (RECOMPILE) ve onsuz beş dakikadan fazla iade ediliyor. Sorgu her zaman aynı parametreler [bu test uğruna] denir.

SQL Server 2008 kullanıyorum.

Bu forumda mesaj tarama kadar SQL yazma konusunda oldukça rahatım ama daha önce hiç bir sorgu OPTION Bir komut kullanmış ve plan önbelleğe kavramı ile tanıdık değildi. Mesaj anladığım OPTION (RECOMPILE) pahalı bir işlemdir. Görünüşe göre sorgu için yeni bir arama stratejisi oluşturur. Neden OPTION (RECOMPILE) atlayın, sonraki sorgu çok yavaş oluyor da, bu kadar mı? Sonraki sorgu derleme ipucu yer aldığı bir önceki çağrı hesaplandı arama stratejisi kullanmak gerekmez mi?

Son derece sıra dışı her çağrı üzerine derleme bir ipucu gerektiren bir sorgu var mı?

Pardon giriş seviyesi bir soru ama gerçekten bu yazı tura gelemeyeceğim.

GÜNCELLEME: sorgu göndermek için buradayım.

select acctNo,min(date) earliestDate 
from( 
    select acctNo,tradeDate as date 
    from datafeed_trans 
    where feedid=@feedID and feedDate=@feedDate 

    union 

    select acctNo,feedDate as date 
    from datafeed_money 
    where feedid=@feedID and feedDate=@feedDate 

    union 

    select acctNo,feedDate as date 
    from datafeed_jnl 
    where feedid=@feedID and feedDate=@feedDate 
)t1 
group by t1.acctNo
OPTION(RECOMPILE)

Sorgu Çözümleyicisi ' test çalıştırırken, aşağıdaki satırları ben önüne:

declare @feedID int
select @feedID=20

declare @feedDate datetime
select @feedDate='1/2/2009'

Benim C onu çağırırken# program parametreleri SqlCommand.Parameters mülkiyet üzerinden geçirilir.

Bu tartışma amacıyla, parametreleri alt-optimal parametre nedeni olarak kokulu eleyebiliriz yani hiç bir değişiklik kabul edilebilir.

CEVAP
29 Mayıs 2014, PERŞEMBE


Sık sık Çalıştırmak ciddi bir fark, bir Sorgu Çalıştırmak için olduğunda, genellikle 5 sorunlardan biri olduğunu bulmak.

  1. İSTATİSTİKLER- İstatistikler güncel değil. Bir veritabanı, Tablolar ve Dizinler üzerinde çeşitli sütundaki değerlerin türleri aralığı ve dağılımı istatistiklerini depolar. Bu yardımcı olur Sorgu Motoru geliştirmek için bir "Plan" saldırı için ne yapacak sorgu, örneğin türü, yöntemi kullanmak için maç anahtarları arasında tabloları kullanarak bir hash veya seyir boyunca tüm set. Tüm veritabanı İstatistikleri Güncelleştirme veya sadece belirli bir Tablo veya Dizin arama yapabilirsiniz. Bu istatistikler güncel değilse, büyük olasılıkla Sorgu Planı aynı Sorgu için yeni eklenen veya değiştirilen veriler için uygun değildir, çünkü başka bir çalışma sorgu yavaşlatır. (daha sonra anlatılacak) biraz havai olacak gibi hemen Üretim veritabanı İstatistikleri Güncelleştirmek için uygun olmayabilir, yavaş ve örnek veri miktarına bağlı olarak gecikme. Ayrıca İstatistikleri güncelleştirmek için Tam bir Tarama veya Örnekleme kullanmak için seçebilirsiniz. Eğer Sorgu Planı bakarsanız, o zaman da kullanılan Dizinler üzerinde istatistikleri böyle komutunu kullanarak görüntüleyebilirsinizDBCC SHOW_STATISTICS (tablename, ındexname). Bu querey planı yaklaşımı baz kullanarak anahtar dağıtımı ve aralıkları gösterir.

  2. PARAMETRE OLARAK ALGILAMASI- Önbelleğe alınan sorgu planı sorguyu kendisi değişmiş olsa bile geçirmeden, belirli Parametreleri için ideal değil. Örneğin, geçişte bir Parametre olan tek alır 10 üzerinden 1.000.000 satır, sonra Sorgu Planı oluşturuldu kullanabilir Karma Birleştirme, ancak eğer Parametre geçecek kullanın 750,000 1,000,000 bu satırlar, Plan oluşturulmuş bir Tablo veya Dizin Tarama, Tarama. Böyle bir durumda SQL deyimi seçeneği kullanmak için söyleyebilirimSEÇENEĞİ (YENİDEN)ya da YENİDEN kullanmak için bir SP. Bu "Tek kullanımlık büyük olasılıkla geçerli değildir." ve Önbelleğe alınmış bir Plan kullanmak için bir Plan vardır Motor söylemek Bu kararı nasıl kural yok, Sorgu kullanıcılar tarafından kullanılacak şekilde onlar bilerek bağlıdır.

  3. DİZİNLER- Sorgu Olası değişti değil, ama bir değişiklik başka bir yerde çok kullanışlı bir dizinin kaldırılması gibi sorgu yavaşladı.

  4. SATIR DEĞİŞTİ- Sorgu olduğunuz satırları büyük ölçüde ara ara değişir. Genellikle istatistik otomatik olarak bu gibi durumlarda güncellenir. Ancak eğer dinamik SQL bina ya da sıkı bir döngü içinde SQL arıyorsanız, satır veya istatistik yanlış köklü sayısına göre modası geçmiş bir Sorgu Planı kullanarak bir olasılık var. Yine bu durumdaSEÇENEĞİ (YENİDEN)faydalı.

  5. MANTIĞIMantık, sorgu satırları küçük bir sayı için hava hoştu, ama artık terazi artık etkilidir. Bu genellikle bir Sorgu Planını daha derinlemesine analizini içerir. Örneğin, artık bir şeyler yapmak toplu, ama bir Yığın şey ve daha küçük İşler veya ürünler arası iyi için daha küçük bir set ama şimdi alır CPU ve Bellek olarak daha büyük ölçeklerde, bu da doğru kullanarak FARKLI, sizi çağıran bir işlev için her satır, anahtar kibrit kullanmayın bir dizin dolayı DÖKÜM türü dönüştürme veya BOŞLUK veya fonksiyonları... Çok fazla ihtimal var.

Bir sorgu yazdığınızda, genel olarak, belirli bir veri tablosu içinde dağıtılır kabaca bazı zihinsel resim var. Bir sütun için bir örnek, bir eÅŸit olarak dağıtılmış çok sayıda deÄŸiÅŸik deÄŸerler, ya da olabilir çarpık, € zaman özel bir set deÄŸerleri, ister dağıtım olacak deÄŸiÅŸen sık sık an oldukça durgun. Bu, etkili bir sorgu oluÅŸturmak için nasıl daha iyi bir fikir verecektir. Ama aynı zamanda hata ayıklama sorgu performansı yavaÅŸ veya verimsiz olarak neden bir hipotez kurulması için bir temel var.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Damien Walters

    Damien Walte

    20 AÄžUSTOS 2006
  • george sarintzotis

    george sarin

    2 Aralık 2007
  • hydejiaqi

    hydejiaqi

    12 Mart 2008