|
|||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
bootable [55]
commercial [7] no-commercial [42] unclassified [20] [7]
Software (10844)
|
PostgreSQL (23) - Optimalizujeme rychlostO optimalizaci dat v tabulkách jsme již v tomto seriálu psali, nyní se podíváme, jaké nástroje nám PostgreSQL server nabízí pro optimalizaci databáze a dotazů.
VyčištěníPgSQL manipuluje se svými datovými soubory stejným způsobem, jaký je v souborových databázích dbf a SQLite. Upravené nebo vymazané věty nejsou ve skutečnosti odstraněny, ale označeny jako neplatné a v případě updatů přibyde v souborech další věta, která je vracena. Dalším „nepořádkem“, který se v databázi hromadí jsou zrušené transakce. To znamená, že databáze, která je používána aktivně, nejen pro čtení, postupně zvětšuje své nároky na diskový prostor i přesto, že v ní je defakto konstantní počet záznamů. Proto je zapotřebí ji občas takzvaně vyčistit, k čemuž server nabízí příkaz Syntaxe je následující:
Použití VACUUM je dosti náročné na výkon stroje, což poznáte především, když máte v tabulkách větší množství dat, proto je vhodné pečlivě zvážit, kdy se bude tento příkaz provádět a vhodně jej načasovat, například krátkým skriptem v Pythonu/Perlu/PHP, který bude spouštěn cronem. Pokud je databáze opravdu aktivně a masivně používána, přičemž drtivě nepřevažjí výběry, je vhodné tuto údržbu provádět denně v době, kdy není žádný, nebo je naprosto minimální provoz. Pokud je situace jiná, je mnoho výběrů, ale minimum, mazání a updatů vět je možné zvolit delší intervaly, například týden, měsíc, 3 měsíce. Mnohem obvyklejší postup je provádět VACUUM denně na opravdu živých tabulkách a na těch, ve kterých dochází ke změnám dat v dlouhých intervalech provádět tento příkaz v delších intervalech. Příkaz VACUUM má ještě jednu modifikaci, která provede nejen vyčištění databáze, ale i sesbírá statistiky, které mohou urychlit, obvykle ve větších databázích opravdu urychlí, výkonnost prováděných příkazů. Syntaxe příkazu je Příklady: -- vycisteni a analyza tabulky dealers podle sloupce active VACUUM VERBOSE ANALYZE dealers(active); -- proste vycisteni cele databaze s vystupem informaci VACUUM FULL VERBOSE; Pokud nechcete psát skript, který byste spouštěli cronem, můžete spouštět přímo konzolový/terminálový příkaz Přerovnání tabulkyPřidávání dat do tabulek, případně jejich mazání, pokud jsou indexovány, provádí server v několika krocích. Napřed přidá novou větu do tabulky, případně ji z tabulky vymaže, a poté občerství všechny indexy, jichž se tato změna dotkla. O významu indexů jsme již v seriálu měli 12. díl. V indexech jsou data uspořádána rozumným způsobem, v tabulkách jsou data za sebou tak, jak byla vkládána, mazána a aktualizována, což je velice neefektivní. Data v tabulce lze přerovnat podle jednoho indexu, k tomu slouží příkaz Syntaxe příkazu CLUSTER je Opět, stejně jako u VACUUM, existuje i pro tuto funkci konzolový ekvivalent Analýza příkazůPgSQL je standardní databázový server ovládaný příkazy v SQL. Co se děje při provádění jednotlivých příkazů, a s jejich následnou analýzou a optimalizací, nám pomůže příkaz, opravdu jen SQL, takže použitelných v psql konzoli, aplikaci či jiném nástroji pro tuto databázi, EXPLAIN, který zobrazí posloupnost operací příkazu uvedeného na EXPLAIN. Příkaz má syntaxi
V zobrazení výstupu tohoto uvidíte nejen časovou náročnost prováděného příkazu, ale i použité indexy a v případě spojování několika tabulek uvidíte i použité způsoby spojení. Tento příkaz prokáže veliké služby při tvorbě databáze a návrhu dotazů, kterými získáváte data. Ve výstupu uvidíte hodnoty cost, které vám ukáží časovou náročnost prováděných příkazů, rows ukazuje počet řádků, které se mohou aktuáně vrátit z databáze a width jejich délky v bytech. EXPLAIN SELECT * FROM lsoft.dealers AS t1 LEFT JOIN lsoft.orders AS t2 ON t1.dealers_id=t2.dealers_id WHERE t1.active=TRUE; --vysledek: QUERY PLAN ---------------------------------------------------------------------- Hash Left Join (cost=1.09..2.21 rows=4 width=356) Hash Cond: ("outer".dealers_id = "inner".dealers_id) -> Seq Scan on dealers t1 (cost=0.00..1.06 rows=4 width=323) Filter: active -> Hash (cost=1.07..1.07 rows=7 width=33) -> Seq Scan on orders t2 (cost=0.00..1.07 rows=7 width=33) (6 řádek) ZávěrV tomto díle jsme se seznámili s nástroji, které nám umožní optimalizovat uspořádání dat v databázích a zjistit, kde máme slabá místa v tvorbě dotazů a indexaci tabulek. V příštím díle se podíváme na to, co jsou to pohledy, které nám při větším množství dat, nebo dlouhých větách mohou významně urychlit práci s databází, případně jednotlivým uživatelům omezit přístup pouze k některým datům.
Related article
PostgreSQL (1) - Historie a pohledy jinam PostgreSQL (2) - Proč PgSQL, data a relace PostgreSQL (3) - Instalace, základní administrace PostgreSQL (4) - Datové typy, vytvoření tabulek PostgreSQL (5) - Další datové typy a práce s časem i binarními řetězci PostgreSQL (6) - Uložení, aktualizace a mazání dat. PostgreSQL (7) - Výběr dat z databáze PostgreSQL (8) - SELECT II. PostgreSQL (9) – SELECT III PostgreSQL (10) - SELECT IV PostgreSQL (11) - Výběr pomocí vzorků PostgreSQL 12 - urychlení výběrů PostgreSQL (13) - Na co se zapomnělo PostgreSQL (14) - omezení dat (Constraints) PostgreSQL (15) - Transakce PostgreSQL (16) - Zamykání PostgreSQL (17) - Datový typ pole PostgreSQL (18) - Datový typ pole II PostgreSQL (19) - Vlastní datové typy PostgreSQL (20) - Vlastní datové typy II PostgreSQL (21) - Spojování dotazů PostgreSQL (22) - Poddotazy PostgreSQL (24) - Views (Pohledy) PostgreSQL (25) - Administrace skupin a uživatelů PostgreSQL (26) - Rozšiřujeme funkčnost Previous Show category (serial) Next
|
Szukanie oprogramowania
|
|||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |