Načítáte velká data? Pro větší rychlost předtřídění a hromadné načtení
Nalezení vyšší rychlosti při načítání velkých dat je výzvou v indexu ETL, reorg a velmi velké databáze (VLDB) naplnit operace. Jedním ze způsobů rychlejšího načítání velkých dat je jejich předběžné třídění, takže databáze nemusí třídit. IBM a další poskytovatelé databází na sálových počítačích dávají tyto rady po desetiletí a stále platí pro relační databáze používané v současnosti na Unixu a dalších „otevřených systémech“, včetně Oracle, DB2, Sybase a SQL Server.
Benchmarky v této oblasti ukazují zlepšení oproti netříděným zátěžím v závislosti na objemu, ale dodavatelé řazení jako IRI tvrdí, že výkon zátěže se zlepšil dvakrát až desetkrát. Ve zprávě TUSC Consulting „Srovnávací index dopadu na rychlost zatížení OLTP a přestavbu velikosti online databázových bloků v Oracle“ samotný test 100 000 řádků s jedním indexem vložení ukázal, že předtříděná data se načítají o 58 % rychleji a vyžadují o 49 % méně místa:
- Načítání v seřazeném pořadí mělo o 42 % nižší trvalou míru načítání řádků za sekundu
- Netříděné vkládání do indexů vyžaduje více práce s interní databází (správa bloků a reorganizace prostoru)
- V indexech seřazených podle zatížení bude faktor shlukování blízký počtu listových bloků
- Pořadí načtených dat je rozhodující pro výkon načítání.
O mnoho let později Sam R. Alapati (Miro Consulting) v kapitole 13 své příručky „Expert Oracle Database 11g Administration“ doporučil předběžné třídění ve spojení s přímým načtením cesty jako nejrychlejší způsob hromadného načtení Oracle (oproti vkládání):
„Načítání přímou cestou volba nepoužívá příkaz SQL INSERT k vkládání dat do tabulek; spíše formátuje datové bloky Oracle a zapisuje je přímo do databázových souborů. Tento proces přímého zápisu eliminuje velkou část režie související s prováděním příkazů SQL pro načítání tabulek. Protože metoda načítání přímou cestou nezatěžuje databázové zdroje, načte data mnohem rychleji než konvenční načítání dat. Pro větší zatížení dat je nejvhodnější metoda načítání s přímou cestou a může to být jediná životaschopná metoda načítání dat do tabulek z prostého důvodu, že konvenční načítání může vyžadovat více času, než je k dispozici.“
Pro administrátory VLDB dnes přichází CoSort, protože:
„Kromě zjevných výhod kratší doby načítání vám přímé načítání také pomáhá znovu sestavit indexy a předřadit data tabulky.“
CoSort se tradičně používá v externím předběžném třídění plochého souboru, který bude importem do zátěže specifikující „direct=true“ a tuto možnost:
“SORTED INDEXES:Parametr SORTED_INDEXES signalizuje SQL*Loaderu, že data jsou tříděna podle zadaného indexu, což zlepšuje výkon načítání.“
Podobně dokumentace k Microsoft SQL Server specifikuje předtřídění souborů jako jednu z „metod pro optimalizaci hromadného importu“:
Operace hromadného importu standardně předpokládá, že datový soubor není uspořádaný. Pokud má tabulka seskupený index, bcp obslužný program, příkaz BULK INSERT a funkce OPENROWSET(BULK…) (Transact-SQL) umožňují určit, jak jsou data v datovém souboru řazena během operace hromadného importu. Data v datovém souboru mohou být řazena ve stejném pořadí jako tabulka. Výkon operace hromadného importu však můžete zlepšit, pokud pro datový soubor určíte stejné pořadí jako pro tabulku.
Pole /KEY ve skriptu CoSort SortCL by obvykle bylo nejdelším indexovým (primárním) klíčem v tabulce, ale nemusí to tak být. Podle TUSC pro podobné sloupce:
- Méně delších indexů je vhodnější než více kratších indexů
- Vedoucí sloupec určuje náklady na načtení indexu
Všimněte si také, že:
- U Vertica a dalších primerů RDBMS optimalizuje výkon dotazů udržování sloupců v seřazených pořadích. Dokonce i stará rada v DEC's Rdb/VMS Guide to Database Maintenance and Performance je stále pravdivá:
„Před načtením do databáze záznamy, které plánujete uložit do tabulky, předem seřaďte podle hodnoty primárního klíče. Když jsou záznamy načteny, budou spolu fyzicky sousedit nebo seskupit, dokud nebudou v databázi uloženy další záznamy. Zachování tohoto uspořádání prospívá dotazům, které vybírají řádky na základě rozsahu hodnot nebo které spojují mnoho řádků jedné tabulky s řádky ve stejné tabulce.“
- Předběžné třídění dat v tabulkách může ušetřit čas i v zobrazeních. Podle “Oracle Database 10g:The Complete Reference” od Kevina Loneyho:
„Roztřídění dat v pohledu může zjednodušit vývoj vaší aplikace. Pokud váš kód například prochází sadou záznamů, může vám předtřídění těchto záznamů usnadnit zpracování a kontrolu chyb. Při vývoji vaší aplikace budete vědět, že vám data budou vždy vrácena v pořádku.“
- Pan Alapati varuje správce databází před omezením přímého načítání cesty:
“Poznámka:Při přímém načítání nemůžete používat žádné funkce SQL. Pokud potřebujete provést velké zatížení dat a také transformovat data během načítání, máte problém. Konvenční načítání dat vám umožní používat funkce SQL k transformaci dat, ale metoda je ve srovnání s přímým načítáním velmi pomalá. V případě velkého zatížení dat proto možná budete chtít zvážit použití jedné z novějších technik načítání/transformace, jako jsou externí tabulky nebo tabulkové funkce.“
Program SortCL společnosti CoSort však dokáže transformovat načítaná data během předběžného třídění; tj. kombinací stejného typu funkcí SQL ve stejném skriptu úlohy a I/O průchodu, včetně:spojení, agregací, křížových výpočtů, vyhledávání, funkcí výběru/filtru, podřetězců a instringů a spousty cílů přeformátování a vlastních sestav — ve stejné operaci předběžného třídění.
- Nová utilita offline reorg v IRI Workbench (GUI Eclipse) používá IRI FACT (Fast Extract) k rychlému uvolnění dat tabulky přes OCI, používá CoSort k předběžnému třídění na primárním klíči a zapisuje a spouští SQL*Loader přímo. načte cestu k optimalizaci a kombinaci každého z těchto kroků.