VACUUM(7)

NAME
VACUUM - 垃圾收集以及可選地分析一個數據庫

SYNOPSIS

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

DESCRIPTION 描述

VACUUM 回收已刪除元組佔據的儲存空間。 在一般的 PostgreSQL 操作裡， 那些已經 DELETE 的元組或者被 UPDATE 過後過時的元組是沒有從它們所屬的表中物理刪除的； 在完成 VACUUM 之前它們仍然存在。 因此我們有必須週期地執行 VACUUM， 特別是在常更新的表上。

 如果沒有引數，VACUUM 處理當前資料庫裡每個表， 如果有引數，VACUUM 只處理那個表。

VACUUM ANALYZE 先執行一個 VACUUM 然後是給每個選定的表執行一個 ANALYZE。 對於日常維護指令碼而言，這是一個很方便的組合。參閱 ANALYZE [analyze(7)] 獲取更多有關其處理的細節。

 簡單的 VACUUM （沒有FULL） 只是簡單地回收空間並且令其可以再次使用。這種形式的命令可以和對錶的普通讀寫並行操作， 因為沒有請求排他鎖。VACUUM FULL 執行更廣泛的處理，包括跨塊移動元組，以便把表壓縮到最少的磁碟塊數目裡。 這種形式要慢許多並且在處理的時候需要在表上施加一個排它鎖。

FREEZE 是一種特殊用途的選項，它導致元組儘可能快地標記為"凍結(frozen)"， 而不是等到它們已經相當老的時候才標記。如果在同一個資料庫上沒有其它執行著的事務的時候完成這個命令， 那麼系統就保證在資料庫裡的所有元組都是"凍結(frozen)"的， 因此不會有事務 ID 重疊的問題，而和資料庫未清理的時間沒有關係。 我們不建議把 FREEZE 用做日常用途。我們用它的唯一目地是準備和使用者定義的模板資料庫聯接的時候， 或者是其它完全是隻讀的， 不會等到日常維護性 VACUUM 操作的資料庫。 參閱 Chapter 21 ``Routine Database Maintenance'' 獲取細節。

PARAMETERS 引數

FULL
     選擇"完全"清理，這樣可以恢復更多的空間， 但是花的時間更多並且在表上施加了排它鎖。

FREEZE
     選擇激進的元組"凍結"。

VERBOSE
     為每個表列印一份詳細的清理工作報告。

ANALYZE
     更新用於最佳化器的統計資訊，以決定執行查詢的最有效方法。

table
     要清理的表的名稱（可以有模式修飾）。預設時是當前資料庫中的所有表。

column
     要分析的具體的列/欄位名稱。預設是所有列/欄位。

OUTPUTS 輸出

 如果聲明瞭 VERBOSE，VACUUM 發出過程資訊， 以表明當前正在處理那個表。各種有關這些表的統計也會打印出來。

NOTES 注意

 我們建議在經常VACUUMM（清理）（至少每晚一次）生產資料庫， 以保證不斷地刪除失效的行。尤其是在增刪了大量記錄之後， 對受影響的表執行 VACUUM ANALYZE 命令是一個很好的習慣。這樣做將更新系統目錄為最近的更改，並且允許 PostgreSQL 查詢最佳化器在規劃使用者查詢時有更好的選擇。

 我們不建議日常使用 FULL 選項，但是可以在特殊情況下使用。 一個例子就是在你刪除了一個表的大部分行之後，希望從物理上縮小該表以減少磁碟空間佔用。VACUUM FULL 通常要比單純的 VACUUM 收縮更多表的尺寸。

EXAMPLES 例子

 下面是一個在 regression （蛻變）資料庫裡某個表上執行 VACUUM的一個例子：

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

COMPATIBILITY 相容性

SQL 標準裡沒有 VACUUM 語句。

SEE ALSO 參見
vacuumdb [vacuumdb(1)]

譯者
Postgresql 中文網站 何偉平 <laser@pgsqldb.org>

跋
本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃：https://github.com/man-pages-zh/manpages-zh