sql >> Databáze >  >> RDS >> Database

Recenze knihy :Benjamin Nevarez:Query Tuning &Optimization

Moje kopie Microsoft SQL Server 2014 Query Tuning &Optimization (k dispozici také na Kindle) od Benjamina Nevareze dorazila minulý týden. Nebyla jsem schopná se k ní dostat okamžitě, ale o víkendu jsem ji konečně mohla proplout mezi přebalováním a výletem do zoo.

TL;DR:Stojí za ty peníze

Benjamin předkládá důkladné vysvětlení celého procesu optimalizace dotazů a spoustu pozadí, které budete potřebovat, abyste tomu všemu dali smysl. Zabývá se indexy, statistikami a ukládáním plánů do mezipaměti a také tím, jak se vypořádat s běžnými problémy, jako je sniffování parametrů. Vysvětluje oblíbené možnosti, jako je Optimalizace pro Ad Hoc pracovní zatížení a Vynucená parametrizace, a jak mění způsob ukládání a opětovného použití plánů. Diskutuje také o mnoha nezdokumentovaných funkcích a trasovacích příznacích, které vám mohou pomoci lépe porozumět (nebo vynutit) přístup SQL Serveru k vašemu dotazu a jak používat příkazy Trace, Extended Events a DBCC ke kontrole rozhodnutí, která optimalizátor učinil, a jejich dopadu. měl jsem.

Velká část obsahu je také věnována mnoha novým funkcím SQL Server 2014, včetně In-Memory OLTP ("Hekaton"), indexů seskupených sloupců, přírůstkových statistik a nového odhadu mohutnosti. Během psaní knihy ještě nebyly publikovány ukázkové databáze AdventureWorks pro SQL Server 2014, ale jsou nyní k dispozici.

Kniha končí složitou, ale informativní kapitolou o omezeních optimalizátoru dotazů, která vedou k neoptimálním plánům, a o tom, jak je obejít pomocí rad a plánů.

Některá omezení

I když je to celkem úplný odkaz na ladění dotazů, pár věcí, o kterých jsem si myslel, že by mohly být lepší:

  • Benjamin mluví o shromažďování informací ShowPlan z Trace a Extended Events a správně poukazuje na to, že Profiler není způsob, jakým chcete provádět trasování, kvůli příšerné a dobře zdokumentované režii výkonu. To je dobrá věc, protože trasování je zastaralé a Profiler je to, co lidé obvykle používají jako výchozí. Je zde menší varování o režii query_post_execution_showplan událost, na kterou si myslím, že mohla být věnována trochu větší důraz, s připomenutím, že by se měla používat pouze pro velmi cílené ladění a odstraňování problémů. Shromažďování těchto údajů pro každý dotaz ve vaší pracovní zátěži pravděpodobně způsobí více škody než užitku.
  • Rozebírá filtrované indexy a statistiky, ale zapomíná na skutečnost, že jsou problematické, pokud jde o automatické aktualizace, protože se nepoužívá žádný speciální algoritmus, přestože index představuje pouze podmnožinu tabulky. Společnost Microsoft potvrzuje, že se jedná o problém, ale v tuto chvíli nemá v plánu jej opravit. Další informace naleznete v části Připojení #509638 a Připojení #333532. Podívejte se také na tento blogový příspěvek, kde najdete spoustu dalších omezení filtrovaného indexu, která je třeba zvážit.
  • I když bylo pokrytí funkcí z roku 2014 docela obsáhlé, překvapilo mě, že jsem nenašel žádnou zmínku o sys.dm_exec_query_profiles , nový DMV pro sledování průběhu dotazů v reálném čase – až po jednotlivého operátora. Není to však zásadní informace pro každého, protože se nejedná o extrémně široký případ použití (IMHO je to opravdu užitečné pouze pro obzvláště dlouhotrvající dotazy).
  • Jedná se o totální hnidopich, ale u technických titulů je to běžné:index je mírně nepřesný. Například odkaz na SQL Sentry Plan Explorer ukazuje na stránku 13, ale relevantní obsah je ve skutečnosti na straně 14. Jak jsem řekl, velmi malá hnidopich, prostě mě to zaujalo, protože to byla úplně první věc, na kterou jsem se podíval nahoru v indexu. :-)

Samy o sobě bych o těchto stížnostech neuvažoval. Žádná kniha nemůže obsahovat do posledního detailu všechno. Zvažte je tedy prosím jako dodatek. :-)

Shrnutí

To se pro mě rychle stalo vhodnou referencí; psí uši už nahrazují několik mých záložek blogových příspěvků, které náhodou zmiňují nějaký nejasný detail nebo stopu, a v mnoha případech to Benjamin popsal podrobněji a/nebo to zarámoval do lepšího kontextu. Mezi touto knihou a několika níže uvedenými tituly si myslím, že každý, kdo je obeznámen s T-SQL, by se mohl dostat do tempa docela rychle, dokonce i bez znalosti optimalizátoru, než se do toho pustí.

Doplňkové materiály

Další knihy, které bych doporučil k doplnění tohoto titulu:

  • Ladění výkonu dotazů SQL Serveru Grant Fritchey
  • Indexování expertního výkonu Jasona Stratea pro SQL Server 2012
  • Plány provádění SQL serveru Grant Fritchey

A samozřejmě existuje nekonečná zásoba blogových příspěvků a dalších článků, které vám pomohou pochopit ladění a optimalizaci. Jsem tak trochu zaujatý materiálem Paula Whitea – jsou asi tak hluboké, jak by si smrtelníci kdy přáli jít, ale můžete z nich dostat spoustu věcí pouhým přelétnutím. Grant a Gail Shaw mají také nějaký cenný obsah o dotazech a plánech provádění a Kimberly Tripp a Erin Stellato jsou skvělými zdroji pro vše, co souvisí s indexy nebo statistikami.

  • Paul White:SQLPerformance.com | sql.kiwi
  • Grant Fritchey (a zdroje)
  • Gail Shaw
  • Kimberly Tripp
  • Erin Stellato

Možná najdete nějaké překrývání, ale já jsem velkým zastáncem konzumace informací z více zdrojů. Někdy prezentují stejné informace, ale žárovka cvaká podle toho, jak to jedna osoba řekla, nebo podle kontextu, který uvedl. Také mi pravděpodobně chybělo asi 50 dalších lidí se skvělým materiálem.

Jo, a zmínil jsem se o našem bezplatném nástroji Plan Explorer, který s tím může také pomoci? Moje aktualizovaná demo sada projde řadou příkladů.


  1. Nativní podpora JSON v MYSQL 5.7:jaké jsou výhody a nevýhody datového typu JSON v MYSQL?

  2. Musím v Oracle vytvářet indexy cizích klíčů?

  3. Jak funguje MYSQL Self-Join?

  4. S tímto dotazem implementujte funkci stránkování (přeskočit / vzít).