DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

vacuum(5)





NAME

       VACUUM - garbage-collect and optionally analyze a database


SYNOPSIS

       VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ]
       VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ]


DESCRIPTION

       VACUUM reclaims storage occupied by  deleted  tuples.   In
       normal  PostgreSQL  operation,  tuples that are deleted or
       obsoleted by an update are  not  physically  removed  from
       their  table;  they remain present until a VACUUM is done.
       Therefore it's necessary to do VACUUM periodically,  espe-
       cially on frequently-updated tables.

       With  no  parameter,  VACUUM  processes every table in the
       current database. With a parameter, VACUUM processes  only
       that table.

       VACUUM  ANALYZE  performs a VACUUM and then an ANALYZE for
       each selected table. This is a handy combination form  for
       routine  maintenance scripts. See ANALYZE [analyze(5)] for
       more details about its processing.

       Plain VACUUM (without  FULL)  simply  reclaims  space  and
       makes  it  available  for re-use. This form of the command
       can operate in parallel with normal reading and writing of
       the  table,  as  an exclusive lock is not obtained. VACUUM
       FULL does more extensive processing, including  moving  of
       tuples  across  blocks  to try to compact the table to the
       minimum number of disk blocks. This form  is  much  slower
       and  requires  an exclusive lock on each table while it is
       being processed.


PARAMETERS

       FULL   Selects ``full'' vacuum,  which  may  reclaim  more
              space,  but takes much longer and exclusively locks
              the table.

       FREEZE Selects aggressive ``freezing'' of tuples.   Speci-
              fying  FREEZE  is  equivalent  to performing VACUUM
              with the  vacuum_freeze_min_age  parameter  set  to
              zero.  The  FREEZE option is deprecated and will be
              removed in a  future  release;  set  the  parameter
              instead.

       VERBOSE
              Prints  a  detailed vacuum activity report for each
              table.

       ANALYZE
              Updates statistics used by the planner to determine
              the most efficient way to execute a query.

       table  The  name  (optionally  schema-qualified) of a spe-
              cific table to vacuum. Defaults to  all  tables  in
              the current database.

       column The  name of a specific column to analyze. Defaults
              to all columns.


OUTPUTS

       When VERBOSE is specified, VACUUM emits progress  messages
       to indicate which table is currently being processed. Var-
       ious statistics about the tables are printed as well.


NOTES

       VACUUM cannot be executed inside a transaction block.

       We recommend that active production databases be  vacuumed
       frequently  (at least nightly), in order to remove expired
       rows. After adding or deleting a large number of rows,  it
       may  be  a good idea to issue a VACUUM ANALYZE command for
       the affected table. This will update the  system  catalogs
       with  the  results  of  all  recent changes, and allow the
       PostgreSQL query planner to make better choices  in  plan-
       ning queries.

       The  FULL  option  is not recommended for routine use, but
       may be useful in special cases. An  example  is  when  you
       have  deleted  most  of the rows in a table and would like
       the table to physically shrink to occupy less disk  space.
       VACUUM  FULL  will  usually  shrink  the table more than a
       plain VACUUM would.   The  FULL  option  does  not  shrink
       indexes; a periodic REINDEX is still recommended. In fact,
       it is often faster to drop all indexes, VACUUM  FULL,  and
       recreate the indexes.

       VACUUM causes a substantial increase in I/O traffic, which
       can cause poor  performance  for  other  active  sessions.
       Therefore, it is sometimes advisable to use the cost-based
       vacuum  delay  feature.   See  in  the  documentation  for
       details.

       PostgreSQL  includes  an ``autovacuum'' facility which can
       automate routine vacuum maintenance. For more  information
       about  automatic and manual vacuuming, see in the documen-
       tation.


EXAMPLES

       The following is an example from running VACUUM on a table
       in the regression database:

       regression=# VACUUM VERBOSE ANALYZE onek;
       INFO:  vacuuming "public.onek"
       INFO:  index "onek_unique1" now contains 1000 tuples in 14 pages
       DETAIL:  3000 index tuples were removed.
       0 index pages have been deleted, 0 are currently reusable.
       CPU 0.01s/0.08u sec elapsed 0.18 sec.
       INFO:  index "onek_unique2" now contains 1000 tuples in 16 pages
       DETAIL:  3000 index tuples were removed.
       0 index pages have been deleted, 0 are currently reusable.
       CPU 0.00s/0.07u sec elapsed 0.23 sec.
       INFO:  index "onek_hundred" now contains 1000 tuples in 13 pages
       DETAIL:  3000 index tuples were removed.
       0 index pages have been deleted, 0 are currently reusable.
       CPU 0.01s/0.08u sec elapsed 0.17 sec.
       INFO:  index "onek_stringu1" now contains 1000 tuples in 48 pages
       DETAIL:  3000 index tuples were removed.
       0 index pages have been deleted, 0 are currently reusable.
       CPU 0.01s/0.09u sec elapsed 0.59 sec.
       INFO:  "onek": removed 3000 tuples in 108 pages
       DETAIL:  CPU 0.01s/0.06u sec elapsed 0.07 sec.
       INFO:  "onek": found 3000 removable, 1000 nonremovable tuples in 143 pages
       DETAIL:  0 dead tuples cannot be removed yet.
       There were 0 unused item pointers.
       0 pages are entirely empty.
       CPU 0.07s/0.39u sec elapsed 1.56 sec.
       INFO:  analyzing "public.onek"
       INFO:  "onek": 36 pages, 1000 rows sampled, 1000 estimated total rows
       VACUUM


COMPATIBILITY

       There is no VACUUM statement in the SQL standard.


SEE ALSO

       vacuumdb [vacuumdb(1)], in the documentation

SQL - Language Statements   2008-01-03                   VACUUM()

Man(1) output converted with man2html