Jak odczytać koszt zapytania i czy zawsze jest to procent?

34

Obecnie studiuję pod kątem SQL 70-433 (egzamin Microsoft Certification) i jestem bardzo zdezorientowany co do pomiaru wydajności „kosztu zapytania”.

Zgodnie z dowolną dokumentacją, którą mogłem znaleźć za pośrednictwem Google, koszt zapytania jest wartością procentową i reprezentuje procent całej partii zajętej przez dowolną jego część. To już wydawało mi się trochę dziwne, ponieważ jestem zainteresowany absolutną wartością konkretnego zapytania, a nie jego wartością w stosunku do innych zapytań, które pojawiają się obok niego.

Ale potem pomyślałem, no cóż, może to, czego oczekujesz, to umieszczenie obok siebie dwóch alternatywnych zapytań, uruchomienie ich jako „partii”, a wtedy wygrana zależy od tego, które z nich kosztuje mniej niż 50%.

Ale dyskusja na temat kosztów zapytań w rozdziale 6, lekcja pierwsza zestawu szkoleniowego Microsoft SQL 70-433 Microsoft nie wydaje się mieć z tym żadnego związku.

Oto przykład: pokazują zapytanie zawierające dwa skorelowane pod-zapytania, a następnie ulepszają je, zastępując pod-zapytania przez ZASTOSOWANIE ZEWNĘTRZNE. Wynik: „Koszt tego zapytania wynosi około 76, podczas gdy koszt pierwszego zapytania był dwa razy większy, około 151”. Następnie jeszcze bardziej ulepszają zapytanie i zmniejszają koszty z 76 do 3,6. Nie sugerują, że te liczby są procentami, podczas gdy implikują, że są to liczby bezwzględne, które odnoszą się do zapytania jako samodzielnego obiektu, bez odniesienia do jakichkolwiek innych zapytań. Zresztą, w jaki sposób pierwsze zapytanie może kosztować 151%?

W dalszej części rozdziału pokazują zrzut ekranu planu wykonania, który składa się z trzech części. Pierwszy mówi „Koszt: 0%”, drugi mówi „Koszt: 1%”, a ostatni „Koszt: 99%”, ale tekst (samej książki) pod zrzutem ekranu „Koszt tego zapytania wynosi 0,56” . Zgaduję, że oznaczają one inny rodzaj kosztów, ale nie mogę znaleźć odniesienia do tego gdzie indziej.

Czy ktoś może pomóc? Jestem całkowicie zdezorientowany.


źródło
PS Zakładając, że odnoszą się one do czegoś innego niż wartości procentowe pokazane w planach wykonania ... w jaki sposób uzyskać SSMS, aby pokazał mi liczby, które podają? Czy potrzebuję czegoś takiego, jak USTAW CZAS WŁĄCZENIA STATYSTYCZNEGO, ale z innym poleceniem, które pokaże mi liczbę „kosztów” na karcie Wiadomości?

Odpowiedzi:

43

Koszt zapytania jest zgłaszany w planach wykonania jako „szacowany koszt poddrzewa”. Jest to liczba bezwzględna, taka jak 1.5. Conor Cunningham wspomniał w prezentacji SQLBits , że początkowo odwoływał się do liczby sekund potrzebnych do wykonania na konkretnym komputerze pracownika Microsoftu ( „Maszyna Nicka” ) w SQL Server 7 dni

wprowadź opis zdjęcia tutaj

ale teraz należy to interpretować jako jednostkową miarę kosztów całkowitych.

Plan wykonania jest drzewem. Każdemu iteratorowi w drzewie przypisywany jest szacowany koszt procesora i szacowany koszt operacji we / wy, które są sumowane, aby uzyskać całkowity koszt (względne wagi można dostosować za pomocą kilku nieudokumentowanych poleceń DBCC ). Szacowany koszt poddrzewa obejmuje koszt samego iteratora i wszystkich jego potomków. Aby zobaczyć przykład zastosowanych wzorów kalkulacji kosztów, zapoznaj się z tym artykułem .

Aby określić szacunkowy koszt całego zapytania w SSMS, wybierz iterator root (np. SELECTIterator) po lewej stronie planu graficznego i spójrz na tę metrykę w oknie właściwości SSMS.

Podczas uruchamiania wielu zapytań (czy to w tej samej partii, czy nie) wartość procentowa jest obliczana poprzez zsumowanie wszystkich tych wartości i obliczenie wartości procentowej zgodnie z oczekiwaniami.

Należy pamiętać, że nawet w rzeczywistych planach wykonania ta liczba kosztów oparta jest na szacunkach, a użycie tego do porównania względnych zalet dwóch różnych zapytań może być bardzo błędne w przypadkach, w których szacunki są niedokładne.

Martin Smith
źródło
Dziękuję, to jest naprawdę pomocne. I wcale nie oczywiste! Zastanawiam się, dlaczego ta postać nie jest oznaczona wyraźniej?
4
Zawsze zastanawiałem się nad jednostką miary, cieszę się, że w końcu się dowiedziałem. Wyjaśniłem ludziom (komicznie), że jest to „SQL Dollars”. Jeśli koszt zapytania wynosi 1,0, to znaczy płacić 1 dolara za filiżankę kawy. Niezła cena. Czy zapłaciłbyś 300 $ za filiżankę? Nie ma mowy!
datagod