sql >> Databáze >  >> RDS >> Sqlserver

Brent Ozar vysvětluje interní a externí fragmentaci SQL Serveru

Podle mistra Microsoft SQL Brenta Ozara udělal během své kariéry několik hrozných rozhodnutí o ladění výkonu databáze. Naštěstí pro nás můžeme těžit z jeho chyb a nemusíme na všechno přijít sami. Svá těžce nabytá moudrost zdarma sdílel během seriálu webového vysílání Quest’s Database Training Days.

Na jednom z jeho sezení jsme se dozvěděli:„Proč defragmentace indexů nepomáhá.“ Ve skutečnosti by to mohlo zhoršit výkon vaší databáze a Brent nám vysvětlil proč. Během toho zdůrazňoval, jak důležité je vědět, co měříte, pokud jde o optimalizaci výkonu SQL Serveru.

Interní versus externí fragmentace

Brent nám poskytl rychlý návod, jak SQL Server ukládá data na 8 kB „stránkách“. V novém nebo přestavěném indexu jsou všechny stránky plné a uložené v pořádku. Ale jak se přidávají další data, stránky se rozdělují:ne všechny stránky jsou plné a vyskytují se mimo pořadí. Toto je zásadní rozdíl mezi vnitřní a vnější fragmentací:

  • Externí fragmentace – odkazuje na stránky, které jsou mimo provoz
  • Interní fragmentace – označuje prázdné místo na stránce

Zaměření méně na rozdělení stránky

Mnoho databázových profesionálů se zaměřuje na rozdělení stránek jako na míru fragmentace databáze, nicméně Brent vysvětlil, že toto číslo nemá smysl, protože k rozdělení stránek dochází jak při přidávání nového řádku do prázdné tabulky, tak při přidávání nové stránky. Takže to nakonec není užitečné.

Jak může externí fragmentace věci zhoršit

V této relaci Brent tvrdil, že externí fragmentace není užitečným měřítkem výkonu databáze, protože pořadí stránek nemá velký vliv na rychlost úloh údržby, spouštění dotazů v RAM nebo čtení dat z disku. Takže databázoví profesionálové, kteří se snaží opravit externí fragmentaci reorganizací a přestavbou indexů, ve skutečnosti zhoršují výkon tím, že zvětšují zálohy a spotřebovávají více času na údržbu.

Databázoví profesionálové, kteří se snaží omezit externí fragmentaci tím, že ponechávají na stránkách prostor nastavením faktoru vyplnění, také způsobují problém horší než ten, který se snaží opravit. Je to z velké části proto, že téměř nikdy nemusíte vkládat data do bodu uprostřed indexu. Takže snaha udržovat stránky v pořádku tím, že na každou jednotlivou stránku umístíte méně dat, ve skutečnosti způsobuje vnitřní fragmentaci.

Monitorování čekací doby

Co byste měli dělat místo toho? Brent doporučuje nastavit faktor plnění na výchozí hodnotu 100 % (nebo alespoň 80 % nebo vyšší) a poté indexy znovu sestavit tak, aby je znovu zabalily. Dále se zaměřte na sledování správného čísla ladění výkonu – čekací doby. Jedním z nejlepších způsobů, jak zobrazit různé aspekty čekací doby napříč instancemi databáze, je použití nástroje pro sledování výkonu, který přesně určí, kde procesy uvízly.

Chcete-li získat ještě více Brentových statistik o fragmentaci indexu, statistikách čekací doby a o tom, co byste měli dělat s údržbou indexu, poslouchejte webcast na vyžádání.

Můžete také získat přístup k dalším odborným radám o výkonu databáze prostřednictvím Quest’s Database Training Days.


  1. MySQL LIKE IN()?

  2. Looping Over Result Sets v MySQL

  3. Kolejnice:PG::UndefinedTable:ERROR:vztah ... neexistuje

  4. 1052:Sloupec 'id' v seznamu polí je nejednoznačný