VACUUM
名字
VACUUM — 回收垃圾空间和收集优化器统计数据
语法
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ]
描述
VACUUM 命令回收数据库的垃圾空间。如果不带任何参数,
VACUUM
将回收当前数据库中的每个表中的垃圾空间,如果指定了参数,VACUUM只回收指定的表中的垃圾空间。
VACUUM ANALYZE
除了回收垃圾空间还收集优化器统计数据。参考
ANALYZE命令得到收集优化器统计数据的信息。
VACUUM
命令如果没有指定FULL选项,它将进行普通的垃圾收集,将垃圾空间标识为可用的状态。它不会影响其它事务发出的表上的读操作和写操作,因为普通的垃圾收集不会在表上加一个互斥锁。
VACUUM FULL
则会启动完全垃圾收集,完全垃圾收集会在表上加一个互斥锁,对表进行垃圾回收期间,其它的事务不能对表进行读操作和写操作。VACUUM FULL比VACUUM的执行时间要长一些,执行的操作也多一些,它在进行垃圾收集的过程中,可能会将一个记录从一个数据块转移到另一个数据块。
参数
FULL
启动
完全垃圾收集模式。
VERBOSE
输出垃圾收集的详细数据。
ANALYZE
同时进行收集优化器统计数据的操作。
table
表的名字(可以用模式修饰)。将对该表进行垃圾回收操作。
column
列的名字。将对该列进行垃圾回收操作。默认是表中的所有列。
输出
如果指定了
VERBOSE
选项,
VACUUM
将会输出详细的垃圾收集统计数据。
注意
不能在事务里面执行VACUUM命令。如果一个表中增加或删除了大量的数据,应该对该表执行VACUUM ANALYZE命令。
不要经常使用VACUUM FULL,因为它会用互斥的模式锁住表。VACUUM FULL可以减少一个表所占的物理存储空间的大小,从而扫描表中的数据时,花的时间更短。如果一个大表中的大部分数据被删除,可以对该表执行VACUUM FULL操作。VACUUM FULL不会减少表上的索引占的物理存储空间,REINDEX命令才能减少索引占的物理存储空间。有时候,删除表上的索引,对表执行VACUUM FULL,然后再重建索引比对表执行VACUUM FULL,对索引执行REINDEX要快一些。
例子
(1)下面的命令回收表onek中的垃圾空间,同时收集该表的优化器统计数据:
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
兼容性
SQL标准中没有
VACUUM
命令。