vacuumdb — 垃圾回收并分析 PostgreSQL 数据库
vacuumdb
[connection-option
...] [option
...] [ -t
| --table
table
[( column
[,...] )] ] ... [dbname
]
vacuumdb
[connection-option
...] [option
...] [ [ -n
| --schema
schema
] | [ -N
| --exclude-schema
schema
] ] ... [dbname
]
vacuumdb
[connection-option
...] [option
...] -a
| --all
vacuumdb 是一个用于清理 PostgreSQL 数据库的实用程序。 vacuumdb 还将生成 PostgreSQL 查询优化器使用的内部统计信息。
vacuumdb 是 SQL 命令 VACUUM
的一个包装器。通过此实用程序和通过其他访问服务器的方法来对数据库进行 vacuum 和分析之间没有实际区别。
vacuumdb 接受以下命令行参数
-a
--all
对所有数据库进行 vacuum。
--buffer-usage-limit size
指定 vacuumdb 的给定调用中的 Buffer Access Strategy 环形缓冲区大小。此大小用于计算将作为此策略的一部分重新使用的共享缓冲区的数量。请参阅 VACUUM。
[-d] dbname
[--dbname=]dbname
指定要清理或分析的数据库的名称,当未使用 -a
/--all
时。如果未指定,则从环境变量 PGDATABASE
中读取数据库名称。如果未设置,则使用为连接指定的用户名。 dbname
可以是 连接字符串。如果是这样,连接字符串参数将覆盖任何冲突的命令行选项。
--disable-page-skipping
根据可见性映射的内容禁用跳过页面。
-e
--echo
显示 vacuumdb 生成的并发送到服务器的命令。
-f
--full
执行 “full” vacuum。
-F
--freeze
激进地“冻结”元组。
--force-index-cleanup
始终移除指向死元组的索引条目。
-j njobs
--jobs=njobs
通过同时运行njobs
个命令,并行执行vacuum或analyze命令。此选项可以减少处理时间,但也会增加数据库服务器的负载。
vacuumdb将打开njobs
个到数据库的连接,因此请确保您的max_connections设置足够高,以容纳所有连接。
请注意,如果并行处理某些系统目录,则将此模式与-f
(FULL
)选项一起使用可能会导致死锁故障。
--min-mxid-age mxid_age
仅对multixact ID年龄至少为mxid_age
的表执行vacuum或analyze命令。此设置对于优先处理表以防止multixact ID环绕非常有用(请参阅第 25.1.5.1 节)。
对于此选项而言,关系的multixact ID年龄是主关系及其关联的TOAST表(如果存在)的年龄中最大的一个。由于vacuumdb发出的命令在必要时也会处理关系的TOAST表,因此无需单独考虑。
--min-xid-age xid_age
仅对事务 ID 年龄至少为xid_age
的表执行vacuum或analyze命令。此设置对于优先处理表以防止事务 ID 环绕非常有用(请参阅第 25.1.5 节)。
对于此选项而言,关系的事务 ID 年龄是主关系及其关联的TOAST表(如果存在)的年龄中最大的一个。由于vacuumdb发出的命令在必要时也会处理关系的TOAST表,因此无需单独考虑。
-n schema
--schema=schema
仅清理或分析 schema
中的所有表。可以通过编写多个 -n
开关来对多个模式进行 vacuum。
-N schema
--exclude-schema=schema
不清理或分析 schema
中的任何表。可以通过编写多个 -N
开关来排除多个模式。
--no-index-cleanup
不删除指向死元组的索引条目。
--no-process-main
跳过主关系。
--no-process-toast
跳过与要 vacuum 的表关联的 TOAST 表(如果有)。
--no-truncate
不截断表末尾的空页面。
-P parallel_workers
--parallel=parallel_workers
为 并行 vacuum 指定并行工作程序的数量。这允许 vacuum 利用多个 CPU 来处理索引。请参阅 VACUUM。
-q
--quiet
不显示进度消息。
--skip-locked
跳过无法立即锁定以进行处理的关系。
-t table
[ (column
[,...]) ]
--table=table
[ (column
[,...]) ]
仅清理或分析 table
。列名称只能与 --analyze
或 --analyze-only
选项结合使用。可以通过编写多个 -t
开关来对多个表进行 vacuum。
如果您指定列,则可能必须从 shell 转义括号。(请参阅以下示例。)
-v
--verbose
在处理期间打印详细信息。
-V
--version
打印 vacuumdb 版本并退出。
-z
--analyze
还计算优化器可用的统计信息。
-Z
--analyze-only
仅计算优化器使用的统计信息(不执行 vacuum)。
--analyze-in-stages
仅计算优化器使用的统计信息(不执行 vacuum),如 --analyze-only
。运行三个分析阶段;第一阶段使用最低的统计信息目标(参见 default_statistics_target)以更快地生成可用统计信息,后续阶段构建完整统计信息。
此选项仅适用于分析当前没有统计信息或统计信息完全不正确的数据库,例如从还原的转储或通过 pg_upgrade
新填充的数据库。请注意,在具有现有统计信息的数据库中运行此选项可能会导致查询优化器选择暂时变差,这是因为早期阶段的统计信息目标较低。
-?
--help
显示有关 vacuumdb 命令行参数的帮助,然后退出。
vacuumdb 还接受以下用于连接参数的命令行参数
-h host
--host=host
指定服务器运行所在机器的主机名。如果值以斜杠开头,则将其用作 Unix 域套接字的目录。
-p port
--port=port
指定服务器侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。
-U username
--username=username
以其身份进行连接的用户名。
-w
--no-password
从不发出密码提示。如果服务器需要密码认证,并且无法通过 .pgpass
文件等其他方式获得密码,则连接尝试将失败。此选项可用于没有用户输入密码的批处理作业和脚本中。
-W
--password
强制 vacuumdb 在连接到数据库之前提示输入密码。
此选项绝非必要,因为如果服务器要求密码认证,vacuumdb 将自动提示输入密码。但是,vacuumdb 会浪费一次连接尝试来找出服务器是否需要密码。在某些情况下,值得键入 -W
以避免额外的连接尝试。
--maintenance-db=dbname
指定连接到数据库的名称以发现应清理哪些数据库,当使用 -a
/--all
时。如果未指定,将使用 postgres
数据库,如果不存在,将使用 template1
。这可以是 连接字符串。如果是,连接字符串参数将覆盖任何冲突的命令行选项。此外,连接到其他数据库时,将重新使用除数据库名称本身之外的连接字符串参数。
PGDATABASE
PGHOST
PGPORT
PGUSER
默认连接参数
PG_COLOR
指定是否在诊断消息中使用颜色。可能的值为 always
、auto
和 never
。
此实用程序与大多数其他 PostgreSQL 实用程序一样,也使用 libpq 支持的环境变量(参见 第 34.15 节)。
vacuumdb 可能需要多次连接到 PostgreSQL 服务器,每次都要求输入密码。在这种情况下,拥有 ~/.pgpass
文件会很方便。有关更多信息,请参阅 第 34.16 节。
要清理数据库 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