Czy procentowe koszty w tym planie SQL Server przekraczają 100% z ważnego powodu?

14

Przeglądam pamięć podręczną planu, szukam nisko wiszących owoców optymalizacji i natrafiłem na ten fragment:

wprowadź opis zdjęcia tutaj

Dlaczego wiele z wymienionych powyżej kosztów wynosi 100%? Czy nie powinno to być niemożliwe?

Max Vernon
źródło
Widziałem nawet koszty do 1 miliona% z szacowanego planu. Po prostu użyj prawdziwych kosztów, powinno być lepiej.
Marian
5
Ponieważ matematyka programu SQL Server jest popsuta. Chwyć nasz darmowy Eksplorator Planu ; nie mamy tego problemu.
Aaron Bertrand
Uwielbiam SQL Sentry Plan Explorer, Aaron - już go używam. Chcę zobaczyć, co robi wersja pro!
Max Vernon

Odpowiedzi:

13

Wizualny kalkulator kosztów to bzdura. Takie rzeczy zdarzają się cały czas. Po prostu idź z najwyższymi, które są najdroższe i zaatakuj je jako pierwsze.

mrdenny
źródło
Czy kiedykolwiek widziałeś to w poprzednich wersjach SQL Server? Jeśli o mnie chodzi, nigdy nie zauważyłem tego na przykład na SS 2008R2.
KookieMonster
5
Widziałem to aż do SQL 2000. O ile wiem, to tylko błąd w SSMS (i EM), gdy robi matematykę, aby obliczyć wartości procentowe.
mrdenny,
2

Byłem również ciekawy, dlaczego czasami niektóre koszty są wyświetlane jako 100%, 200%, 300% ... a nawet więcej. Po przeanalizowaniu pliku XML planu zapytań mam go.

Procent kosztów = mój EstimatedTotalSubtreeCost/ nadrzędny węzełEstimatedTotalSubtreeCost

Na przykład Twój plan zapytań pokazuje Clustered Index Insertkoszt 914%, aby zrozumieć, w jaki sposób oblicza ten odsetek, 1. Move mouse to `Clustered Index Insert` to show popup, you can see the cost `EstimatedTotalSubtreeCost`, e.g, 0.2 2. Move mouse to this node's parent node `COND WITH QUERY`, check the popup to get `EstimatedTotalSubtreeCost`, e.g, 0.0218818 3. Calculate 0.2/0.0218818 = 914%, this is the cost percentage displayed in `Clustered Index Insert` popup

osexp2003
źródło
1
0.002/2.18jest 0.000917(co jest takie samo jak 0.0917%) i nie 914%.
ypercubeᵀᴹ
Dziękuję za Twój komentarz. Zmodyfikuję swoją odpowiedź. W końcu to tylko próbka pokazująca, jak obliczyć procent.
osexp2003