|
blog.pavoocek.net
Řešení problémů v ASP | DELPHI | SQL | WINDOWS |
|
|
16 Říjen 2008
Databázové indexy jsou speciální datové struktury, které úzce souvisejí s tabulkami (někdy i s pohledy – views). Databázový engine je účinně používá k vyhledávání a řazení dat – indexy jsou nezbytné pro rychlé výsledky SQL dotazů odesílaných do databázového engine. Jak jsou v čase modifikována data v tabulkách databáze a tím aktualizovány indexy, stávají se čím dál tím více fragmentovanými. Fragmentace indexu znamená že logické řazení indexu nekorespodnuje s fyzickým uložením dat v databázi. Čím více je index fragmetován, tím více se ztrácí výkon databázového stroje a rychlost zpracování SQL dotazů. V tomto případě je třeba použít buď reorganizaci nebo rebuild indexu. Reorganizace vs. rebuild Fragmentované indexy mohou být opraveny dvěma způsoby: mohou být reorganizovány nebo rebuildovány. Reorganizování indexu způsobí přeskupení dat uvnitř vnějších datových stránek a komprimaci indexu. Žádné další informace nejsou modifikovány, takže index může zůstat po reorganizaci fragmentovaný. Operace nevezme příliš mnoho prostředků a může být provedena i při přístupu ostatních procesů k tabulce a indexu, takže se jedná o “online” operaci. Rebuild indexu pracuje v podstatě tak, že zruší (dropne) daný index a vytvoří jej celý znovu. Tím se samozřejmě také odstraní jakákoli fragmentace původního indexu, protože fyzické řazení u nově vytvořeného indexu koresponduje s logickým řazením. Protože při rebuildu dochází k úplnému odebrání indexu, ostatní procesy jej nemohou použít a tím může dojít k rapidnímu snížení databázového výkonu (zejména u velkých tabulek). Navíc po celou dobu vytváření nového indexu nemohou přistupující procesy uzamknout tabulku, což je zásadní nevýhoda rebuildu databázových indexů. Online rebuild indexů Příklady Zpracování online rebuildu se příliš neliší od časo používaných metod rebuildu indexů. Nejjednodušší cesta k rebuildu indexu je příkaz DROP INDEX následovaný příkazem CREATE INDEX. Ovšem rebuild tímto způsobem ponechává tabulku zcela bez indexu až do kompletního vytvoření nového indexu (což může trvat v některých případech i desítky minut). Z toho důvodu (a spousty dalších) není dropnutí a nové vytvoření indexu doporučováno. Namísto toho můžeme použít klauzuli CREATE INDEX s možností DROP_EXISTING. Tato možnost umožňuje mimo jiné také přesun indexu do jiné souborové skupiny a změnu definice indexu. Další možností je příkaz ALTER INDEX, který umožňuje rebuild clusterového i neclusterových indexů tabulky. ALTER INDEX neumožnuje změnu definice indexu. Oba příkazy mohou použít parametry, které definují online rebuild indexu. Následující příklad provede rebuildu indexu s dropnutím původního, s tím, že rebuild proběhne online bez výpadku přístupu k indexu (možnost ONLINE = ON): CREATE CLUSTERED INDEX cl_SalesHistory_SaleID ON SalesHistory(SaleID)
Příklad rebuildu všech indexů tabulky (jak jinak, než online): ALTER INDEX ALL ON SalesHistory
zdroj: techrepublic Napsat komentář
|
|