3

Postgresql 具有 Vacuum 的功能,用于回收死元组占用的空间。自动吸尘默认开启并根据配置设置运行。

当我检查 pg_stat_all_tables 的输出,即 last_vacuum 和 last_autovacuum 时,从未对数据库中具有足够数量的死元组(超过 1K)的大多数表运行 autovacuum。当这些表很少使用时,我们还会获得 2-3 小时的时间窗口。

以下是我的数据库的 autovacuum 设置 在此处输入图像描述

下面是 pg_stat_all_tables 的输出 在此处输入图像描述

我想问一下,只依靠自动吸尘器是个好主意吗?autovacuum 是否需要任何特殊设置才能正常运行?
我们应该设置手动吸尘器吗?我们应该同时使用两者还是只关闭自动吸尘器并仅使用手动吸尘器?

4

2 回答 2

3

你绝对应该使用 autovacuum。

当前是否有任何 autovacuum 进程正在运行?

VACUUM这种桌子上的手册是否成功?

设置log_autovacuum_min_duration = 0以在日志中获取有关 autovacuum 处理的信息。

如果系统活动太高,autovacuum 可能无法跟上。在这种情况下,建议将 autovacuum 配置为更具侵略性,例如通过设置autovacuum_vacuum_cost_limit = 1000.

于 2018-01-29T11:07:11.850 回答
2

https://www.postgresql.org/docs/current/static/routine-vacuuming.html

PostgreSQL 数据库需要定期维护,称为清理。对于许多安装,让 autovacuum 守护进程执行清理就足够了,这在第 24.1.6 节中进行了描述。您可能需要调整此处描述的自动吸尘参数以获得适合您情况的最佳结果。一些数据库管理员会希望使用手动管理的 VACUUM 命令来补充或替换守护程序的活动,这些命令通常由 cron 或任务调度程序脚本根据计划执行。

真空创建重要的 IO,就像https://www.postgresql.org/docs/current/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-VACUUM-COST以满足您的需求。

您还可以为每个表设置 autovacuum 设置,使其更加“自定义” https://www.postgresql.org/docs/current/static/sql-createtable.html#SQL-CREATETABLE-STORAGE-PARAMETERS

以上将让您了解为什么您的 1K 死元组可能不足以进行 autovacuum 以及如何更改它。

手动VACUUM是一次性运行的完美解决方案,而要运行系统我肯定会依赖 autovacuum 守护进程

于 2018-01-29T11:08:56.190 回答