Sorgu planlarının yeniden kullanılabilirlik ifadesine bölünmesi daha iyi olur mu?


11

Sorgu planları tarafından nasıl derlendiğini, depolandığı ve alındığı hakkında sınırlı bilgimden, bir çoklu ifade sorgusunun veya saklı yordamın, gelecekteki yürütmelerde sorgu tarafından kullanılacak sorgu planı önbelleğinde depolanacak olan sorgu planını üreteceğini anlıyorum.

Bu plan sorgu karma ile sorgu planı önbellekten alınır, yani sorgu düzenlenmiş ve yürütme karma farklı ve hiçbir eşleşen karma sorgu planı önbelleğinde bulunamadı gibi yeni bir plan oluşturulur anlamına gelir.

Benim sorum: Bir kullanıcı, çoklu ifade sorgusundaki ifadelerden biri olan bir deyimi çalıştırırsa, çoklu deyim sorgusu için zaten önbellekteki sorgu planının ilgili bölümünü kullanabilir mi? Karma değerlerin açıkça eşleşmeyeceği için cevabın hayır olmasını bekliyorum, ancak sorgudan tek tek ifadeler çalıştıran kullanıcılar tarafından kullanılabilecek şekilde her ifadeyi çok ifadeli bir sorguda hash etmek daha iyi olur mu?

Ben dikkate almıyorum komplikasyonlar bekliyoruz (Ve ben gerçekten bilmek istiyorum bunlar) ama daha fazla yer kaplayan ve daha fazla alan birçok sorgu planlarında aynı 'ifade planı' saklamak olabilir gibi görünüyor CPU ve oluşturma zamanı.

Yine de cehaletimi gösterebilirdim.


dbidve objectidher ikisinde de var, is_cache_key=1böylece farklı derlenmiş nesneler arasında planların yeniden kullanılmasını sağlayamazsınız.
Martin Smith

Yanıtlar:


11

Bir kullanıcı, çoklu ifade sorgusundaki ifadelerden biri olan bir ifade çalıştırırsa, çoklu plan sorgusu için zaten önbellekte olan sorgu planının ilgili bölümünü kullanabilir mi?

Hayır. SQL Server'da planın yeniden kullanılmasının temel birimi toplu iştir .

Sorgudan tek tek ifadeler çalıştıran kullanıcılar tarafından kullanılabilmeleri için her ifadeyi çok ifadeli bir sorguda toplamak daha iyi olur mu?

Yüksek düzeyde plan yeniden kullanımı için ayarlanmış bir sistem, ortak kodu (uygun ayrıntı düzeyinde) SQL Server'daki yeniden kullanılabilir nesnelere (örn. Yordamlar, işlevler, tetikleyiciler) yerleştirir. Ayrıca, uygulama tarafından oluşturulan veya istemci tarafı kodlarını da açıkça parametrelendirecektir. Maksimum plan yeniden kullanımı için, oluşturulan bu gruplar sadece parametre değerlerinde farklılık göstermelidir.

Ben dikkate almadığım komplikasyonlar olmasını bekliyorum

SQL Server'ın neden önbellek düzeyinde değil, toplu iş düzeyinde önbelleğe almak ve yeniden kullanmak üzere tasarlandığını soruyor gibisiniz . Orijinal tasarımcıların yanı sıra bu soruyu yetkili olarak cevaplayabileceklerinden şüpheliyim. Her neyse, bana göre, bir parti, doğal olarak bağımsız bir iş birimi olduğundan ve uygulama karmaşıklığı ile planın yeniden kullanım olasılığı arasında makul bir dengeyi temsil ettiği için kullanılacak doğal bir ayrıntıdır.

Toplu işlerin tamamen bağımsız olmasını sağlayan birkaç şey vardır (örneğin, saklı yordam sınırları içinde oluşturulan ve başvurulan yerel geçici tablolar). Bu istisnalar dikeyliği azaltır ve yıllar boyunca beklenmedik 'tasarımdan' davranış ve hatalarla ilişkilendirilmiştir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.