it-swarm-eu.dev

Jak přečtu cenu dotazu a je to vždy procento?

V současné době studuji SQL 70-433 (zkouška Microsoft Certification) a mě velmi znepokojuje metrika výkonu „cena za dotaz“.

Podle jakékoli dokumentace, kterou jsem našel přes Google, jsou náklady na dotaz v procentech a představují procento celé dávky zabrané kteroukoli její částí. Zdálo se mi to trochu zvláštní, protože se zajímám o absolutní zásluhu konkrétního dotazu, spíše než o jeho zásluhu ve vztahu k jiným dotazům, které se objevují vedle něj.

Ale pak jsem si myslel, no, možná to, co se od vás očekává, je umístit dva alternativní dotazy vedle sebe, spustit je jako „šarže“, a pak podle toho, kdo má cenu nižší než 50%, je vítěz.

Ale diskuse o nákladech na dotaz v kapitole 6, lekci jedné z Microsoft SQL 70-433 Training Kit, nezdá se, že by s tím souvisel.

Zde je příklad: Ukazují dotaz obsahující dva korelované dílčí dotazy a poté jej vylepšují nahrazením dílčích dotazů VNĚJŠÍM POUŽITÍM. Výsledek: "Tento dotaz má cenu zhruba 76, zatímco cena prvního dotazu byla dvojnásobná, asi 151." Poté dotaz ještě vylepšují a snižují náklady ze 76 na 3,6. Neimplikují, že tato čísla jsou procenta, zatímco naznačují, že se jedná o absolutní čísla, která se vztahují k dotazu jako samostatný objekt, bez odkazu na jakékoli jiné dotazy. Jak vlastně mohl mít první dotaz cenu 151%?

Později v této kapitole ukazují snímek plánu provádění, který má tři části. První říká „Cena: 0%“, druhá říká „Cena: 1%“ a poslední říká „Cena: 99%“, ale text (samotné knihy) pod snímkem obrazovky „Cena tohoto dotazu je 0,56“ . Hádám, že to znamená nějaký jiný druh nákladů, ale jinde na to nemůžu najít odkaz.

Může někdo pomoci? Jsem úplně zmatená.

34

Náklady na dotaz se vykazují v prováděcích plánech jako „odhadované náklady na podstrom“. Toto je absolutní číslo, například 1.5. Conor Cunningham zmínil v prezentace SQLBits , že původně odkazoval na počet sekund potřebných k provedení na konkrétním počítači zaměstnance společnosti Microsoft ( „Nickův stroj“ ) na serveru SQL Server 7 dny

enter image description here

ale nyní by měla být interpretována jako jednotková míra celkových nákladů.

Realizační plán je strom. Každému iterátoru ve stromu je dána odhadovaná cena procesoru a odhadovaná cena IO= cena) a tyto náklady se sčítají, aby se získaly celkové náklady (relativní váhy lze upravit pomocí pár nezdokumentované příkazy DBCC ). Odhadované náklady podstromu zahrnují náklady na samotný iterátor a všechny jeho potomky. Chcete-li vidět příklad použitých vzorců kalkulace, můžete se podívat na tento článek .

Chcete-li určit odhadovanou cenu celého dotazu v SSMS, vyberte kořenový iterátor (např. Iterátor SELECT) vlevo od grafického plánu a podívejte se na tuto metriku v okně vlastností SSMS.

Při spuštění více dotazů (ať už ve stejné dávce nebo ne) se procento vypočítá tak, že se sčítají všechny tyto hodnoty a vypočítá se procento, jak byste očekávali.

Měli byste si uvědomit, že i ve skutečných prováděcích plánech je tato cena založena na odhadech a její použití k porovnání relativních výhod dvou různých dotazů může být žalostně špatné v případech, kdy jsou odhady nepřesné.

43
Martin Smith