Postgresql 中文操作指南

vacuumdb

vacuumdb — 清理和分析 PostgreSQL 数据库

Synopsis

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

Description

vacuumdb 是用于清理 PostgreSQL 数据库的实用程序。vacuumdb 还可以生成 PostgreSQL 查询优化器使用的内部统计信息。

vacuumdb 是一个包装器,用于包裹 SQL 命令 VACUUM 。通过此实用程序和通过其他方法访问服务器来清理和分析数据库,中间没有任何有效差异。

Options

vacuumdb 接受以下命令行参数:

  • -a_—​all_

    • Vacuum all databases.

  • —​buffer-usage-limit _size_

    • 指定特定 vacuumdb 调用的 [role="bare"]glossary.html#GLOSSARY-BUFFER-ACCESS-STRATEGY Buffer Access Strategy 环形缓冲区大小。此大小用于计算作为该策略一部分将被重用的共享缓冲区数量。请参阅 VACUUM

  • [-d] _dbname[--dbname=]_dbname

    • 在未使用 -a / —​all 时,指定要清理或分析的数据库的名称。如果未指定此项,将从环境变量 PGDATABASE 中读取数据库名称。如果该变量未设置,则使用为连接指定的用户名。 dbname 可以是 connection string 。如果是这样,连接字符串参数将覆盖任何冲突的命令行选项。

  • —​disable-page-skipping

    • 禁用根据可见性映射的内容跳过页面。

  • -e_—​echo_

    • 输出 vacuumdb 生成的并发送到服务器的命令。

  • -f_—​full_

    • Perform “full” vacuuming.

  • -F_—​freeze_

    • Aggressively “freeze” tuples.

  • —​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 回绕(请参阅 Section 25.1.5.1 )。

    • 此选项的目的在于,关系的 multixact ID 年龄是主关系及其关联的 TOAST 表(如果存在)的年龄中的最大值。由于 vacuumdb 发出的命令在必要时还会处理关系的 TOAST 表,因此不需要单独考虑它。

  • —​min-xid-age _xid_age_

    • 仅对事务 ID 年龄至少为 xid_age 的表执行 vacuum 或 analyze 命令。此设置有助于确定要处理的表优先级,以防止事务 ID 回绕(请参阅 Section 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

    • Skip the main relation.

  • —​no-process-toast

    • 跳过与要 vacuum 的表关联的 TOAST 表(如果存在)。

  • —​no-truncate

    • 不要截断表末尾的空页面。

  • -P _parallel_workers—​parallel=_parallel_workers

    • 指定 parallel vacuum 的并行工作程序数量。这允许 vacuum 利用多个 CPU 来处理索引。请参阅 VACUUM

  • -q_—​quiet_

    • 不显示进度消息。

  • —​skip-locked

    • 跳过无法立即锁定以进行处理的关系。

  • -t _table [ ( column [,…​]) ] —​table=_table [ ( column_ [,…​]) ]_

    • 只清理或分析 table 。只能通过 —​analyze—​analyze-only 选项指定列名。可以通过编写多个 -t 开关对多个表进行 Vacuum。

  • -v_—​verbose_

    • 在处理过程中打印详细信息。

  • -V_—​version_

    • 打印 vacuumdb 版本并退出。

  • -z_—​analyze_

    • 还为优化器使用计算统计信息。

  • -Z_—​analyze-only_

    • 只计算优化器使用的统计信息(不 Vacuum)。

  • —​analyze-in-stages

    • 只计算优化器使用的统计信息(不 Vacuum),例如 —​analyze-only 。运行三个阶段的分析;第一阶段使用最低可能的统计信息目标(参见 default_statistics_target )以更快生成可用统计信息,后续阶段生成完整统计信息。

    • 此选项仅对当前没有任何统计信息或具有完全不正确的统计信息(例如,如果它刚从还原的转储或 pg_upgrade 填充)的数据库进行分析时才有效。请注意,在具有现有统计信息数据库中使用此选项运行可能会导致查询优化器选择在早期阶段的统计信息目标较低以致短暂变差。

  • -?_—​help_

    • 显示有关 vacuumdb 命令行参数的帮助,并退出。

Tip

如果您指定列,则可能必须对括号使用转义符。 (请参见以下示例。)

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 时,指定要连接到的数据库的名称,以发现应 Vacuum 哪个数据库。如果未指定,将使用 postgres 数据库,或者如果不存在,则使用 template1 。这可以是 connection string 。如果是这样,连接字符串参数将覆盖任何冲突的命令行选项。此外,在连接到其他数据库时,将重新使用除数据库名称本身之外的连接字符串参数。

Environment

  • PGDATABASE_PGHOST_PGPORT__PGUSER

    • Default connection parameters

  • PG_COLOR

    • 指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever

此实用程序与大多数其他 PostgreSQL 实用程序一样,还使用 libpq 支持的环境变量(请参阅 Section 34.15 )。

Diagnostics

如果遇到困难,请参见 VACUUMpsql ,以了解有关潜在问题和错误消息的讨论。数据库服务器必须在目标主机上运行。此外,libpq 前端库使用的任何默认连接设置和环境变量都将应用。

Notes

vacuumdb 可能需要连接到 PostgreSQL 服务器多次,每次都要求输入密码。在这种情况下,方便使用 ~/.pgpass 文件。有关详细信息,请参见 Section 34.16

Examples

清理数据库 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

See Also