Sorgu Maliyeti'ni nasıl okurum ve bu her zaman bir yüzde mi?


34

Şu anda SQL 70-433 (Microsoft Sertifikasyon sınavı) için çalışıyorum ve "sorgu maliyeti" performans ölçütü hakkında kafam çok karıştı.

Google üzerinden bulabildiğim herhangi bir belgeye göre, sorgu maliyeti yüzdedir ve bu işlemin herhangi bir kısmı tarafından alınan tüm grubun yüzdesini gösterir. Belirli bir sorgunun mutlak değeriyle ilgilendiğim için, yanında görünmekte olan diğer sorgulara göre hakikaten bu zaten bana biraz garip geldi.

Ama sonra düşündüm de, belki de yapmanız gereken, iki alternatif soruyu yan yana koymak, bunları "toplu iş" olarak çalıştırmak ve hangisinin% 50'sinden daha düşük bir maliyeti varsa hangisidir.

Ancak, 6. bölümdeki sorgu maliyetinin tartışılması, Microsoft’un SQL 70-433 Eğitim Seti’nden birinin dersiyle ilgisi yok gibi görünüyor.

İşte bir örnek: İki ilişkili alt sorguyu içeren bir sorgu gösterirler ve daha sonra alt sorguları bir OUTER APPLY ile değiştirerek daha iyi hale getirirler. Sonuç: "Bu sorgunun kabaca 76 bir bedeli varken, ilk sorgunun maliyeti ikiye katlandı, yaklaşık 151." Ardından sorguyu daha da iyileştirir ve maliyeti 76'dan 3.6'ya düşürürler. Bu rakamların yüzdeleri olduğu anlamına gelmez, oysa, sorguya bağımsız bir nesne olarak ilgili olan, başka sorgulara referans vermeyen mutlak rakamlar oldukları anlamına gelir. Her neyse, ilk sorgu nasıl% 151 maliyete sahip olabilir?

Bölümün ilerleyen bölümlerinde üç bölümden oluşan bir yürütme planının ekran görüntüsü gösterilir. Birincisi "Maliyet:% 0", ikincisi "Maliyet:% 1" ve sonuncusu "Maliyet:% 99" yazıyor, ancak ekranın altındaki metin (bu kitabın maliyeti 0,56). . Sanırım başka bir maliyet anlamına geliyorlar, ancak başka bir yerde referans bulamıyorum.

Birisi yardım edebilir mi? Kafam karıştı.


Not: İcra planlarında gösterilen yüzdelerden başka bir şeye işaret ettiklerini varsayarsak ... SSMS'yi bana alıntı yaptıkları rakamları gösterme konusunda nasıl sağlayabilirim? SET STATISTICS TIME ON gibi bir şeye ihtiyacım var, ancak Mesajlar sekmesinde bana "maliyet" rakamını gösterecek başka bir komutla mı?

Yanıtlar:


43

Sorgu maliyeti, yürütme planlarında "tahmini alt ağaç maliyeti" olarak bildirilir. Bu gibi mutlak bir rakamdır 1.5. Bir SQLBits sunumunda Conor Cunningham , başlangıçta, belirli bir Microsoft çalışanının makinesinde ( "Nick'in Makinesi" ) SQL Server 7 günde yürütülmesi için geçen saniye sayısını ifade etti.

görüntü tanımını buraya girin

ancak şimdi toplam maliyetin birimsiz bir ölçüsü olarak yorumlanmalıdır.

Uygulama planı bir ağaç. Ağaçtaki her bir yineleyiciye tahmini bir CPU maliyeti ve tahmini bir IO maliyeti verilir ve bunlar toplam maliyeti elde etmek için bir araya getirilir (göreceli ağırlıklar belgelenmemiş DBCC komutları ile ayarlanabilir ). Tahmini alt ağaç maliyeti, yineleyicinin kendisinin ve tüm torunlarının maliyetini içerir. Kullanılan maliyetlendirme formüllerinin bir örneğini görmek için bu makaleye bakabilirsiniz .

SSMS'deki tüm bir sorgunun tahmini maliyetini belirlemek için SELECT, grafik planın solundaki kök yineleyiciyi (örneğin yineleyici) seçin ve bu metriğe SSMS özellikleri penceresinde bakın.

Birden fazla sorgu çalıştırırken (aynı partide olsun veya olmasın), yüzde bu değerlerin tümünü toplayarak ve beklediğiniz şekilde yüzdeyi hesaplayarak hesaplanır.

Gerçek uygulama planlarında bile, bu maliyet rakamının tahminlere dayandığını ve tahminlerin yanlış olduğu durumlarda iki farklı sorgunun göreceli değerlerini karşılaştırmak için bunu kullanmanın çok yanlış olduğunu bilmelisiniz.


Teşekkür ederim, bu gerçekten yardımcı oldu. Ve hiç belli değil! Acaba bu rakam neden daha açık bir şekilde işaretlenmedi?

4
Her zaman ölçü birimini merak ettim, nihayet öğrenmekten memnun oldum. İnsanlara (komik) "SQL Doları" olduğunu açıkladım. Bir sorgu maliyeti 1.0 ise, bu bir fincan kahve için 1 dolar ödemek gibidir. Fena bir fiyat değil. Bir bardak için 300 dolar verir misin? Olmaz!
datagod
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.