【问题标题】:auto vacuum vs vacuum in postgresqlpostgresql中的自动真空与真空
【发布时间】:2018-01-29 10:39:58
【问题描述】:

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

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

以下是我的数据库的 autovacuum 设置

下面是 pg_stat_all_tables 的输出

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

【问题讨论】:

  • 嗯,这就像在问您应该在汽车中使用手动变速箱还是自动变速箱。普通用户肯定会在自动模式下表现得更好。 Pro会用手动来挤压这最后几滴速度。现在,如果 autovacuum 没有运行,并且您确定它应该发布您的配置和所有必要的数据,我们将对其进行查看。
  • 请。将此线程移至dba.stackexchange.com。与编程无关。

标签: postgresql vacuum autovacuum


【解决方案1】:

您绝对应该使用 autovacuum。

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

这样的表上的手动VACUUM 是否成功?

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

如果系统活动过多,autovacuum 可能无法跟上。在这种情况下,建议将 autovacuum 配置为 more 激进,例如通过设置@987654321@ = 1000

【讨论】:

  • autovacuum 默认开启。我已经为一张这样的桌子运行了手动真空吸尘器,效果很好。
  • 如果您按照我的答案更新中的指示调整 autovacuum,它可能会起作用。
【解决方案2】:

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

PostgreSQL 数据库需要定期维护,称为清理。 对于许多安装,执行抽真空就足够了 由 autovacuum 守护程序,在第 24.1.6 节中描述。你 可能需要调整那里描述的自动吸尘参数 为您的情况获得最佳结果。一些数据库管理员 将想要补充或替换守护进程的活动 手动管理的 VACUUM 命令,通常执行 根据 cron 或任务计划程序脚本的计划。

vacuum 创建重要的 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 以及如何更改它。

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

【讨论】:

  • 使用 cron 作业或任何其他实用程序自动执行手动清理是个好主意吗?
  • 我最依赖 autovacuum。并在需要时进行手动吸尘。 Cronning Vacuum 运行总是以 DBA 忘记某些东西而告终
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
相关资源
最近更新 更多