2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

vacuumdb

vacuumdb — 清理和分析 PostgreSQL 資料庫的垃圾回收程式

概要

vacuumdb [連線選項...] [選項...] [ -t | --table 表名 [( 列名 [,...] )] ] ... [ 資料庫名 | -a | --all ]

vacuumdb [連線選項...] [選項...] [ -n | --schema 模式名 ] ... [ 資料庫名 | -a | --all ]

vacuumdb [連線選項...] [選項...] [ -N | --exclude-schema 模式名 ] ... [ 資料庫名 | -a | --all ]

描述

vacuumdb 是一個用於清理 PostgreSQL 資料庫的實用程式。vacuumdb 還會生成 PostgreSQL 查詢最佳化器使用的內部統計資訊。

vacuumdb 是 SQL 命令 VACUUM 的包裝器。透過此實用程式和透過其他訪問伺服器的方法來清理和分析資料庫之間沒有實際區別。

選項

vacuumdb 接受以下命令列引數

-a
--all

清理所有資料庫。

--buffer-usage-limit 大小

為給定的 vacuumdb 呼叫指定 緩衝區訪問策略 環形緩衝區的大小。此大小用於計算將作為此策略一部分重用的共享緩衝區數量。請參閱 VACUUM

[-d] 資料庫名
[--dbname=]資料庫名

指定要清理或分析的資料庫名稱,當未使用 -a/--all 時。如果未指定,則從環境變數 PGDATABASE 讀取資料庫名。如果未設定,則使用為連線指定的使用者名稱。資料庫名 可以是 連線字串。如果是,則連線字串引數將覆蓋任何衝突的命令列選項。

--disable-page-skipping

根據可見性對映的內容停用頁面跳過。

-e
--echo

回顯 vacuumdb 生成併發送到伺服器的命令。

-f
--full

執行 完整 清理。

-F
--freeze

積極地 凍結 元組。

--force-index-cleanup

始終刪除指向死元組的索引條目。

-j njobs
--jobs=njobs

透過同時執行 njobs 個命令來並行執行清理或分析命令。此選項可能會減少處理時間,但也會增加資料庫伺服器的負載。

vacuumdb 將開啟 njobs 個到資料庫的連線,因此請確保您的 max_connections 設定足夠高以容納所有連線。

請注意,將此模式與 -f (FULL) 選項一起使用可能會在並行處理某些系統目錄時導致死鎖失敗。

--min-mxid-age mxid_age

僅對多事務 ID 年齡至少為 mxid_age 的表執行清理或分析命令。此設定對於確定處理表的優先順序以防止多事務 ID 環繞非常有用(請參閱 第 24.1.5.1 節)。

在此選項的目的中,關係的多事務 ID 年齡是主關係及其關聯的TOAST表(如果存在)的最大年齡。由於 vacuumdb 發出的命令在必要時也會處理關係的TOAST表,因此無需單獨考慮。

--min-xid-age xid_age

僅對事務 ID 年齡至少為 xid_age 的表執行清理或分析命令。此設定對於確定處理表的優先順序以防止事務 ID 環繞非常有用(請參閱 第 24.1.5 節)。

在此選項的目的中,關係事務 ID 年齡是主關係及其關聯的TOAST表(如果存在)的最大年齡。由於 vacuumdb 發出的命令在必要時也會處理關係的TOAST表,因此無需單獨考慮。

--missing-stats-only

僅分析缺少列、索引表示式或擴充套件統計資訊物件的統計資訊的表。與 --analyze-in-stages 一起使用時,此選項可防止 vacuumdb 臨時用由較低統計資訊目標生成的統計資訊替換現有統計資訊,從而避免臨時查詢最佳化器選擇變差。

此選項只能與 --analyze-only--analyze-in-stages 結合使用。

請注意,--missing-stats-only 需要對 pg_statisticpg_statistic_ext_data 具有 SELECT 許可權,這些許可權預設情況下僅限於超級使用者。

-n 模式名
--schema=模式名

僅清理或分析 模式名 中的所有表。可以透過編寫多個 -n 開關來清理多個模式。

-N 模式名
--exclude-schema=模式名

不清理或分析 模式名 中的任何表。可以透過編寫多個 -N 開關來排除多個模式。

--no-index-cleanup

不刪除指向死元組的索引條目。

--no-process-main

跳過主關係。

--no-process-toast

如果存在,則跳過與表關聯的 TOAST 表進行清理。

--no-truncate

不截斷表末尾的空頁面。

-P parallel_workers
--parallel=parallel_workers

並行清理 指定並行工作程式數量。這允許清理利用多個 CPU 來處理索引。請參閱 VACUUM

-q
--quiet

不顯示進度訊息。

--skip-locked

跳過無法立即鎖定以進行處理的關係。

-t 表名 [ (列名 [,...]) ]
--table=表名 [ (列名 [,...]) ]

僅清理或分析 表名。列名只能與 --analyze--analyze-only 選項結合使用。可以透過編寫多個 -t 開關來清理多個表。

提示

如果您指定了列,則可能需要從 shell 中轉義括號。(請參閱下面的示例。)

-v
--verbose

在處理過程中顯示詳細資訊。

-V
--version

顯示 vacuumdb 版本並退出。

-z
--analyze

同時為最佳化器計算統計資訊。

-Z
--analyze-only

僅為最佳化器計算統計資訊(不清理)。

--analyze-in-stages

僅為最佳化器計算統計資訊(不清理),類似於 --analyze-only。執行三個階段的分析;第一階段使用可能的最低統計資訊目標(請參閱 default_statistics_target)以更快地生成可用統計資訊,後續階段構建完整的統計資訊。

此選項僅對當前沒有統計資訊或具有完全不正確統計資訊的資料庫(例如,剛從恢復的轉儲或 pg_upgrade 填充的資料庫)進行分析有用。請注意,在具有現有統計資訊的資料庫中使用此選項執行時,由於早期階段的統計資訊目標較低,查詢最佳化器選擇可能會暫時變差。

-?
--help

顯示關於 vacuumdb 命令列引數的幫助,然後退出。

vacuumdb 還接受以下用於連線引數的命令列引數

-h 主機
--host=主機

指定伺服器執行所在計算機的主機名。如果值以斜槓開頭,則用作 Unix 域套接字目錄。

-p
--port=

指定伺服器正在監聽連線的 TCP 埠或本地 Unix 域套接字副檔名。

-U 使用者名稱
--username=使用者名稱

要連線的使用者。:

-w
--no-password

絕不發出密碼提示。如果伺服器需要密碼身份驗證且密碼不可用(例如透過 .pgpass 檔案),則連線嘗試將失敗。此選項在沒有使用者在場輸入密碼的批處理作業和指令碼中很有用。

-W
--password

強制 vacuumdb 在連線到資料庫之前提示輸入密碼。

此選項永遠不是必需的,因為如果伺服器要求密碼身份驗證,vacuumdb 會自動提示輸入密碼。但是,vacuumdb 會浪費一次連線嘗試來發現伺服器需要密碼。在某些情況下,輸入 -W 以避免額外的連線嘗試是值得的。

--maintenance-db=資料庫名

當使用 -a/--all 時,連線到此資料庫以收集要清理的資料庫列表。如果未指定,則使用 postgres 資料庫,如果該資料庫不存在,則使用 template1 資料庫。這可以是一個 連線字串。如果是,則連線字串引數將覆蓋任何衝突的命令列選項。此外,連線到其他資料庫時,除了資料庫名稱本身以外的連線字串引數將被重用。

環境變數

PGDATABASE
PGHOST
PGPORT
PGUSER

預設連線引數

PG_COLOR

指定是否在診斷訊息中使用顏色。可能的值為 alwaysautonever

此實用程式以及大多數其他 PostgreSQL 實用程式也使用 libpq 支援的環境變數(請參閱 第 32.15 節)。

診斷

如果遇到困難,請參閱 VACUUMpsql 以瞭解潛在問題和錯誤訊息的討論。資料庫伺服器必須在目標主機上執行。此外,libpq 前端庫使用的任何預設連線設定和環境變數都將適用。

示例

清理資料庫 test

$ vacuumdb test

清理併為最佳化器分析名為 bigdb 的資料庫

$ vacuumdb --analyze bigdb

清理名為 xyzzy 的資料庫中的單個表 foo,併為最佳化器分析表中的單個列 bar

$ vacuumdb --analyze --verbose --table='foo(bar)' xyzzy

清理名為 xyzzy 的資料庫中的 foobar 模式中的所有表

$ vacuumdb --schema='foo' --schema='bar' xyzzy

另請參閱

VACUUM

提交更正

如果您在文件中看到任何不正確、與您對特定功能的經驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。