Optimize ediciye ihtiyaç duyduğu süre boyunca veya daha fazla süre vermek mümkün mü?


18

Optimize edicinin, bazen kesilebileceği tüm olası yürütme planlarını keşfetmek için ihtiyaç duyduğu her zaman alamayacağı göz önüne alındığında (yürütme süresini en aza indirmeli ve katkıda bulunmamalıdır).

Ihtiyacınız olan her zaman (veya milisaniye belirli bir miktarda) optimize edici verebilir böylece bu geçersiz kılınmış olup olmadığını merak ediyordum .

Bu (atm) için bir ihtiyaç yok ama karmaşık bir sorgu sıkı bir döngüde yürütülür ve optimal plan ile gelip elden önce önbellek istediğiniz bir senaryo hayal edebiliyorum.

Tabii ki sıkı bir döngü var, böylece gider gider ama benimle ayı sorguyu yeniden yazmalısınız.

Bu daha çok bir merak meselesi ve bazen kısa devreli bir optimizasyon ve tam bir optimizasyon arasında bir fark olup olmadığını görmek.

İzleyici 2301 bayrağı ile optimize ediciye daha fazla zaman verebileceğiniz ortaya çıkıyor. Tam olarak sorduğum şey değil ama yaklaşıyor.

Bu konuda bulduğum en iyi bilgi Ian Jose tarafından SQL Server 2005 SP1'de Sorgu İşlemci Modelleme Uzantıları .

Bu izleme bayrağını dikkatli kullanın! Ancak daha iyi planlar hazırlarken faydalı olabilir. Ayrıca bakınız:

Birleştirme siparişi için çözüm alanının katlanarak patladığı çok sayıda birleşime sahip sorgular düşünüyordum. SQL Server'ın kullandığı sezgisel tarama oldukça iyidir, ancak optimizasyon cihazının daha fazla zamana sahip olması durumunda (saniye veya hatta dakika aralığında) farklı bir sipariş teklif edip etmeyeceğini merak ediyordum.

Yanıtlar:


16

İz bayrağı 2301'in yanında, optimize ediciyi 'daha sıkı çalışmasını' gerçekten sağlayan 8780 vardır, çünkü sadece daha fazla zaman verir ( burada ayrıntılı olarak açıklandığı gibi (rusça) ve burada daha az ayrıntılı) , daha fazlasını yapar).

Rusça makalenin orijinal yazarının İngilizce ayrıntılı açıklaması. yazarın kendi uyarısını içeren:

üretimde kullanılması tavsiye edilmez .

İkisini birleştirip (çok seçmeli olarak sorgu ipucu OPTION (QUERYTRACEON 2301, QUERYTRACEON 8780) aracılığıyla 4 seviyeli iç içe satır içi TVF'lerin (altta yalnızca bir tanesinin herhangi bir gerçek iş yapacağı ve üst düzeylerin sonuçları ilişkilendireceği) uygulayarak EXISTS alt sorguları aracılığıyla) hoş bir MERGE JOIN ve yürütme süresini yarı yarıya azaltan birkaç LAZY SPOOL ile sonuçlandı.


4

Hayır, yapamazsınız.

Sorgularınızı nasıl çalıştığını anlayarak (optimize edici dostu) yapabilirsiniz (karmaşık canavar, içten dışa bilmek gerekli değildir). Ben çok kritik bir şey varsa, o zaman SQL Server'ın çalışma şeklini değiştirmek yerine sorguyu düzeltmek öneririz.

Örneğin, veri hacmi + veri dağıtımı değiştikçe bir sorgunun O (n) değerinden daha az etkili bir şekilde ölçeklenmeye başladığını bilmek istersiniz: optimize ediciye daha fazla zaman ayırmak burada değer katmaz.

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.