VACUUM

名称

VACUUM — 清理和分析 Postgres 数据库

语法

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

输入

VERBOSE
为每个表打印一份详细的清理工作报告.
ANALYZE
更新用于优化器的列/字段统计信息,以决定执行查询的最有效方法.这些统计信息反映了每列/字段里的数据的支出.当(查询有)多条执行路径的可能时,这些信息就是非常珍贵的.
table
要清理的表的名称.缺省时是所有表.
column
要分析的具体的列/字段名称.缺省是所有列/字段.

输出

VACUUM
命令被接受并且数据库被清理了.
NOTICE: --Relation table--
table 的报告头.
NOTICE: Pages 98: Changed 25, Reapped 74, Empty 0, New 0; Tup 1000: Vac 3000, Crash 0, UnUsed 0, MinLen 188, MaxLen 188; Re-using: Free/Avail. Space 586952/586952; EndEmpty/Avail. Pages 0/74. Elapsed 0/0 sec.
table 自身的分析.
NOTICE: Index index: Pages 28; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
目标表的索引的分析.

描述

VACUUM 在 Postgres 里有两个用途,一个是重新整理存储区,另一个是为优化器收集信息.

VACUUM 打开数据库中每个表,将回卷的事务的记录清除,并且更新系统目录里的统计信息.(数据库)维护的统计信息包括记录条数和所有表使用的存储页面数.

VACUUM ANALYZE 收集代表每一行数据的开销的统计信息.当存在多个可能的执行路径时,这些信息是非常珍贵的.
 

定期地运行 VACUUM 可以提高数据库处理用户查询的速度.

注意

打开的数据库是 VACUUM 的目标.

我们建议在每天夜间清理生产数据库,以保证统计数据足够新.不过,VACUUM 查询可以在任何时候进行.尤其是在向 Postgres 中拷贝了一个大表或删除了大量记录后,执行一个 VACUUM ANALYZE 查询是一个很好的习惯.这样做将更新系统目录为最近的更改,并且允许 Postgres 查询优化器在规划用户查询时有更好的选择.

用法

下面是一个在 regression (回归)数据库里某个表上执行 VACUUM 的一个例子:
regression=> vacuum verbose analyze onek;
NOTICE:  --Relation onek--
NOTICE:  Pages 98: Changed 25, Reapped 74, Empty 0, New 0;
         Tup 1000: Vac 3000, Crash 0, UnUsed 0, MinLen 188, MaxLen 188;
         Re-using: Free/Avail. Space 586952/586952; EndEmpty/Avail. Pages 0/74.
         Elapsed 0/0 sec.
NOTICE:  Index onek_stringu1: Pages 28; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE:  Index onek_hundred: Pages 12; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE:  Index onek_unique2: Pages 19; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE:  Index onek_unique1: Pages 17; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE:  Rel onek: Pages: 98 --> 25; Tuple(s) moved: 1000. Elapsed 0/1 sec.
NOTICE:  Index onek_stringu1: Pages 28; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
NOTICE:  Index onek_hundred: Pages 12; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
NOTICE:  Index onek_unique2: Pages 19; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
NOTICE:  Index onek_unique1: Pages 17; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
VACUUM

兼容性

SQL92