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_statistic
和 pg_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
指定是否在診斷訊息中使用顏色。可能的值為 always
、auto
和 never
。
此實用程式以及大多數其他 PostgreSQL 實用程式也使用 libpq 支援的環境變數(請參閱 第 32.15 節)。
清理資料庫 test
$
vacuumdb test
清理併為最佳化器分析名為 bigdb
的資料庫
$
vacuumdb --analyze bigdb
清理名為 xyzzy
的資料庫中的單個表 foo
,併為最佳化器分析表中的單個列 bar
$
vacuumdb --analyze --verbose --table='foo(bar)' xyzzy
清理名為 xyzzy
的資料庫中的 foo
和 bar
模式中的所有表
$
vacuumdb --schema='foo' --schema='bar' xyzzy
如果您在文件中看到任何不正確、與您對特定功能的經驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。