VACUUM --数据库中 回收垃圾空间和收集优化器统计数据的语句

来源:互联网 发布:淘宝网童装男童秋装 编辑:程序博客网 时间:2024/06/08 05:47

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命令。

原创粉丝点击