Vysvětlit účel vakua a automatického odsávání
Při aktualizaci řádku se každá aktualizace skládá z vložení a odstranění. Změněná data se vloží a starý řádek se odstraní. V PostgreSQL se původní řádek zachová, aby se transakce v případě problému vrátila zpět. Místo odstranění původního řádku se označí k pozdějšímu odstranění, což vede ke vzniku „mrtvých“ řádků (nebo n-tic), které jsou stále na disku, ale již nejsou potřeba.
Správně pojmenovaný vakuový proces trvale odebere tyto řádky, uvolní místo, které by jinak mohlo být ztraceno, a aktualizuje statistiky.
Proces čištění mrtvých řádků se nazývá vakuový proces. Pokud by tyto řádky zůstaly na disku, databáze by zabírala více místa na disku, než potřebuje, což se nazývá "bloat" databáze. Proces VACUUM je důležitý z následujících důvodů:
- Chcete-li obnovit místo na disku obsazené řádky označenými k odstranění.
- Chcete-li aktualizovat statistiky dat pro použití plánovačem dotazů.
- Chcete-li aktualizovat mapu viditelnosti, která zrychluje prohledávání pouze indexů.
- Ochrana před ztrátou starých dat kvůli zabalení ID transakce.
PostgreSQL používá proces označovaný jako vakuum k trvalému odstranění řádků a uvolnění místa. Kromě uvolnění místa zajišťuje také efektivní indexy.
Když se vakuový proces aktivuje automaticky, proces se označuje jako autovacuum. Frekvence, s jakou se má proces spustit, závisí na množství operací aktualizace a odstranění. Můžete také sledovat počet řádků označených k odstranění.
Zajištění pravidelného vysávání zajišťuje, že nebudete:
- Zažívejte "nadměrný nárůst", včetně větších než nezbytně nutných databází a tabulek.
- Mají velké neoptimální indexy.
- Zkušenosti se zvýšenými vstupně-výstupními operacemi.
Pokud chcete monitorovat počet neaktivních řádků v tabulce, můžete spustit dotaz SELECT:
SELECT relname, n_dead_tup, n_live_tup
FROM pg_catalog.pg_stat_all_tables
ORDER BY n_dead_tup DESC;
Pokud chcete proces vakua spustit ručně, zadejte:
vacuum