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.
Odpowiedzi:
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 dniale 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.
SELECT
Iterator) 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.
źródło