pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
VACUUM — 清理并分析一个 Postgres 数据库
VACUUM [ VERBOSE ] [ ANALYZE ] [table] VACUUM [ VERBOSE ] ANALYZE [table[ (column[, ...] ) ] ]
为每个表打印一份详细的清理活动报告。
更新优化器用来确定执行查询最有效方式所使用的列统计信息。
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收集表示每列数据 disbursion(离散度)的统计信息。当存在多条可能的查询执行路径时,这些信息很有价值。
周期性地运行VACUUM将提高数据库处理用户查询的速度。
打开的数据库是 VACUUM 的目标。
我们建议对活跃的生产数据库每晚执行一次 VACUUMM,以持续清除 过期的行。在把一个大类复制进 Postgres或删除大量记录之后,对受影响的表发出一条VACUUM ANALYZE查询可能是个好主意。这会用所有最近变更的结果更新系统目录,使 Postgres查询优化器在规划用户查询时做出更好的选择。
下面是对回归数据库中的一个表运行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中没有VACUUM语句。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。