Příkaz vacuumdb slouží k vyčištění databáze od nepotřebných dat, které vznikají jejím použitím a k uvolnění místa, která tato data zabírá. Navíc dokáže analyzovat data v dabázi a umožňuje tak získat obrázek o tom, jak databáze funguje a jak jsou data uložena. Jedná se pouze o spouštěč SQL příkazu VACUUM, který můžete spustit klasicky přes SQL konzoli.

Jak na to

Nemá smysl zde vyjmenovávat všechny možnosti, které vacuumdb umožňuje. Ty naleznete zde.

Na co ovšem je třeba upozornit je časová náročnost tohoto nástroje, které se při různých nastaveních může nepříjemně zvětšit. Na časovou náročnost má vliv předevčím přepínač -f, který určuje, zda-li se provede full nebo non-full vyčištění. Rozdíl je následující:

  • full čistí databázi tak, že prochází tabulky, každou při svém procházení zablokuje (lock), smaže nepotřebná data, která se vytvořila při jejím používání a přemístí data na disku tak, aby tabulka zabírala co nejméně bloků na disku
  • non-full čistí databázi tak, že prochází tabulky a maže při tom nepotřebná data; nedochází k žádnému blokování tabulek ani k přesouvání dat na disku

Jak vidíte rozdíl je poměrně velký a operace mohou na různě velkých databázích trvat opravdu dlouho. Navíc díky zablokování tabulek při zpracování, může nastat problém s samotnou aplikací, která pak nemůže korektně přistupovat ke svým datům. Full se tedy prvádí většinou po obnově dat ze zálohy, či po narušení databáze. Non-full lze doporučit pro běžnou údržbu databáze.

Naše obvyklé použití je takovéto (doporučuje se provádět každou noc – tím se zejména minimalizuje čas, který je třeba na provedení operace):


vacuumdb -z -v -U user -d database > log.out 2>&1

Přepínač -z zapíná analyzátor databáze, -v pak zapíná detailní výstup z tohoto nástroje, který ukládáme do logu. Takovýto příkaz pak pouštíme automaticky, například pomoci cronu.

Další možností je využít služeb tzv. autovacuum démona. Ten je již připraven k použití v Postgres 8.1 a není tedy důvod ho nevyužít. Zapíná se v konfiguraci databáze (postgresql.conf) pomocí přepínače autovacuum = on. Více naleznete v zmiňované dokumentaci.

Další zajímavé nástroje

Mezi další nástroje, které se hodí při uklízení databáze, je nástroj reindexdb, který je opět pouze spouštěč SQL příkazu REINDEX. Tento nástroj slouží, jak jeho název napovídá, k reindexaci databáze opět kvůli odstranění nepotřebných a zastaralých dat a k uvolnění místa na disku. Podrobnější popis opět najdete v dokumentaci.

Jeho použití je velice snadné:


reindexdb nazev_databaze