pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
VACUUM — 垃圾收集并且可选地分析一个数据库
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [table] VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [table[ (column[, ...] ) ] ]
选择“full”清理,它可以回收更多空间,但耗时长得得多,并且对表加排他锁。
选择对元组进行激进的“冻结”。
为每个表打印一份详细的清理活动报告。
更新优化器用来确定执行查询最有效方式所使用的统计信息。
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回收由已删除元组占用的存储空间。在正常的 PostgreSQL操作中,被 DELETEd 或被 UPDATE 作废的元组不会从它们的表中被物理移除;它们会一直存在,直到执行一次VACUUM为止。因此有必要周期性地执行VACUUM,特别是在频繁更新的表上。
不带参数时,VACUUM处理当前数据库中的每个表。带参数时,VACUUM只处理那个表。
VACUUM ANALYZE对每个选中的表先执行一次VACUUM,然后再执行一次ANALYZE。这是例行维护脚本的一种便利组合形式。其处理的更多细节见 ANALYZE 。
普通VACUUM(不带FULL)只是回收空间并使其可被重新使用。这种形式的命令可以与对表的正常读写并行运行。VACUUM FULL做更广泛的处理,包括跨块移动元组以尽量把表压缩到最少的磁盘块数。这种形式要慢得多,并且在处理每个表时需要该表上的排他锁。
FREEZE是一个特殊用途的选项,它使元组尽可能早地被标记为“冻结”,而不是等到它们相当老时。如果在没有同一数据库中其他打开事务的情况下执行它,就可以保证数据库中的所有元组都是“冻结”的,无论数据库多长时间不清理,都不会受到事务 ID 回卷问题的影响。FREEZE不建议例行使用。它唯一预期的用途是在准备用户定义模板数据库、或者其他完全只读且不会接受例行VACUUM维护操作的数据库时使用。细节见管理员指南。
我们建议对活跃的生产数据库频繁地执行VACUUM(至少每晚一次),以移除过期的行。在增加或删除大量记录之后,对受影响的表发出一条VACUUM ANALYZE命令可能是个好主意。这会用所有最近变更的结果更新系统目录,使 PostgreSQL查询优化器在规划用户查询时做出更好的选择。
FULL选项不建议例行使用,但在特殊情况下可能有用。例如,当你删除了一个表中的大部分行并希望该表物理收缩以占用更少的磁盘空间时。VACUUM FULL通常比普通VACUUM能把表收缩得更多。
下面是对回归数据库中的一个表运行VACUUM的例子:
regression=> VACUUM VERBOSE ANALYZE onek;
NOTICE: --Relation onek--
NOTICE: Index onek_unique1: Pages 14; Tuples 1000: Deleted 3000.
CPU 0.00s/0.11u sec elapsed 0.12 sec.
NOTICE: Index onek_unique2: Pages 16; Tuples 1000: Deleted 3000.
CPU 0.00s/0.10u sec elapsed 0.10 sec.
NOTICE: Index onek_hundred: Pages 13; Tuples 1000: Deleted 3000.
CPU 0.00s/0.10u sec elapsed 0.10 sec.
NOTICE: Index onek_stringu1: Pages 31; Tuples 1000: Deleted 3000.
CPU 0.01s/0.09u sec elapsed 0.10 sec.
NOTICE: Removed 3000 tuples in 70 pages.
CPU 0.02s/0.04u sec elapsed 0.07 sec.
NOTICE: Pages 94: Changed 0, Empty 0; Tup 1000: Vac 3000, Keep 0, UnUsed 0.
Total CPU 0.05s/0.45u sec elapsed 0.59 sec.
NOTICE: Analyzing onek
VACUUM
SQL92中没有VACUUM语句。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。