问题标签 [autovacuum]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
852 浏览

postgresql - Postgres autovacuum 不释放磁盘空间

我有一个数据库,在一个表中,我每天有超过 800 万次插入(记录随时间分布,大约每秒 90-100 次)。

每天我都会删除超过 7 天的所有记录,但表的磁盘空间并没有停止增长。

Autovacuum 使用默认配置“开启”。删除查询在当晚 2 点 55 分执行。表的最后一次自动清空大约在 3 小时后 6:32 并且没有第二次运行。

为什么每天的磁盘空间多出 1GB 左右?

我现在 autovacuum 不会立即释放磁盘空间,但我可以将删除的行用于新插入。

现在,似乎我正在删除记录,但我没有将可用空间用于新记录,并且表格不断增长。

每天删除旧记录后,表中还剩下大约 5000 万行,与存储的大小几乎相同。

Postgres 是否有可能希望它认为可以毫无问题地操作的表达到一定的大小?我没有尝试这个,因为没有那么多可用空间,当空间已满时,我TRUNCATE就在桌子上。

0 投票
1 回答
59 浏览

postgresql - Autovacuum 全局设置是否应用于所有表?

我启用了全局自动清理,sql查询:

显示 autovacuum 设置为“on”。

这是否意味着数据库中的所有表都将定期进行自动清理,或者我需要为每个表单独设置 autovacuum 为“on”以便自动清理它?

0 投票
1 回答
1166 浏览

postgresql - 如何确保 autovacuum 守护程序在我的 PostgreSQL Docker 容器中运行?

我正在针对碎片问题对在 Docker 容器中运行的数据库进行基准测试,并发现 autovacuum 守护程序没有运行。

给出:

因此,我遇到了碎片表演效果:

在此处输入图像描述

当我启动 PostgreSQL Docker 容器时,如何确保这个 autovacuum 守护进程正在运行?

0 投票
1 回答
1363 浏览

database - 数据库导入后 Postgres autovacuum high cpu/disk

我已经将一个 2tb Postgres 9.4 数据库从一台服务器迁移到另一台服务器,导入后 autovacuum 因高 cpu 和磁盘而疯狂了好几天。该数据库有超过 40,000 个模式/表。

我已尝试关闭数据库并重新启动,但使用率仍然很高。我之前在导入后遇到过真空问题,这似乎是 Postgres 的常见问题,有什么办法可以解决吗?导出的数据库很好,没有真空问题,这似乎是由导入引起的。

我试过了:

但是如果由于语句超时而未能完成。除了禁用 autovacuum 之外,还有什么解决办法吗?

G

0 投票
0 回答
89 浏览

greenplum - Greenplum 数据库上的 Vacuumdb 命令被卡住

我正在尝试从 Java 运行时执行 Vacuumdb 命令,但它永远卡住了(没有抛出任何错误)。直接在终端中执行时相同,可以正常工作。我使用的命令:

我也试过这个空数据库(大小不是问题),但结果是一样的。之前有人在 Greenplum 或 Postgres 中遇到过这个问题吗?关于这个问题的任何想法都会非常有帮助。

谢谢!

0 投票
1 回答
83 浏览

c# - 调整 autovacuum 以在数据库模式更改时运行?

每当我通过多次迁移从软件(代码)升级我的数据库模式时,一些数据库操作需要大量时间才能完成。我理解 pgstats,有些事情搞砸了,查询计划也被修改了。手动运行 ANALYZE 后,相同的操作将在 2-3 秒内完成。

深入研究 autovacuum 和分析让我明白了它的作用。但我的要求是在我的数据库模式更新后运行 ANALYZE。

我的应用程序使用实体框架代码优先方法。当我的软件启动和启动时,数据库架构会更新。即使我的 postgres autovacuum 参数设置为 ON,它在模式更新时也不会运行。所以,我需要在我的软件启动后运行 ANALYZE。

在软件启动后和任何点击发生之前,我如何从我的代码中对整个数据库运行 ANALYZE ?它是一个 C# WPF 应用程序。

0 投票
2 回答
964 浏览

postgresql - 如何为 PostgreSql RDS 实例设置 Autovacuum 监控

我需要为 RDS 实例设置 Autovacuum 监控。需要确保 Autovacuuming 在特定于表的 Autovacuuming 上运行良好。有什么完美的方法来设置监控。所有参数应该是监控的一部分。

谢谢。

0 投票
0 回答
1239 浏览

postgresql - Autovacuum 的调整建议

AUTOVACUUM 守护进程由多个进程组成,这些进程通过从数据库中删除过时的数据或元组来回收存储。它检查具有大量插入、更新或删除记录的表,并根据配置设置清理这些表

  1. 您可以通过运行以下查询来确定数据库中的表是否需要清理:

    SELECT datname, age(datfrozenxid) FROM pg_database ORDER BY age(datfrozenxid) desc limit 20;

  2. 当您连接到数据库时,运行以下查询将有助于查看 autovacuum 认为符合清理条件的表的列表:

    /li>
  3. 一些参数会影响 autovacuum 的行为,运行以下查询会显示一些直接影响 autovacuum 及其行为的参数的值:

    /li>

虽然这些都会影响 autovacuum,但其中一些最重要的是:

以下是其中一些重要选项的定义/解释:

Autovacuum_freeze_max_age 指定表的 pg_class.relfrozenxid 字段在强制执行 VACUUM 操作以防止表内的事务 ID 回绕之前可以达到的最大年龄(以事务为单位)。请注意,即使在 autovacuum 以其他方式禁用时,系统也会启动 autovacuum 进程以防止回绕。

autovacuum_max_workers (integer) 此选项指定可能在任何时候运行的最大自动清理进程数,因为清理不会在单个自动清理进程中发生。默认值为三 (3)。

autovacuum_vacuum_cost_limit 此选项指定将在自动 VACUUM 操作中使用的成本限制值。如果指定了 -1(这是默认值),则将使用常规的 Vacuum_cost_limit 值。请注意,该值会按比例分配给正在运行的 autovacuum 工作人员(如果有多个工作人员),因此每个工作人员的限制总和不会超过此变量的值。

autovacuum_vacuum_cost_delay 此选项指定将在自动 VACUUM 操作中使用的成本延迟值。如果指定了 -1,将使用常规的 Vacuum_cost_delay 值。默认值为 20 毫秒。

autovacuum_vacuum_scale_factor 此选项指定触发 autovacuum 的频率。如果您希望 autovacuum 更频繁地运行,我建议 autovacuum_vacuum_scale_factor 使用较小的值(例如 0.02 或 0.01)。此参数的值越小,autovacuum 每次处理的死元组数就越少。对于大型表,这意味着 autovacuum 可以花费更少的 I/O 和更少的时间来完成。

注意:对于小型表,可能会担心 autovacuum 会不必要地频繁运行并产生开销。如果您的表具有不同的大小或不同的写入模式,我建议您在表级别使用不同的值设置此参数,而不是在数据库级别设置一个值。有关 Autovacuum 选项的进一步定义,请查看此文档 [2]

[1]Autovacuum 调整 - https://www.2ndquadrant.com/en/blog/autovacuum-tuning-basics/ [2]进一步 Autovacuum 选项定义 - https://www.postgresql.org/docs/9.6/runtime- config-autovacuum.html#GUC-AUTOVACUUM-MAX-WORKERS

0 投票
3 回答
1131 浏览

postgresql - Postgres auto-vacuum 不会回收死元组空间导致磁盘已满问题

我有一个用例,每分钟同时在另一端插入 100 000 行,少数线程会获取这些行并将它们从我的表中删除。所以肯定会在我的表中创建很多死元组。

我的自动真空配置是

从“pg_stat_user_tables”我可以发现自动真空正在我的表上运行,但在几个小时内我的磁盘将满(500 GB),我无法插入任何新行。

在第二次尝试时,我更改了以下配置

这次我的模拟和自动真空运行良好,最大磁盘大小为 180 GB。

这里我的疑问是,如果我将“autovacuum_vacuum_cost_delay”更改为零毫秒,自动真空如何释放死元组空间并 PG 重用它?如果我将值设置为 20 毫秒,为什么它不能按预期工作?

0 投票
1 回答
1299 浏览

postgresql - PostgreSQL 中的 autovacuum 中的 autovacuum_vacuum_cost_delay 是什么?

我正在尝试使用配置文件中的以下配置参数来调整 PostgreSQL 服务器:

我想了解是什么autovacuum_vacuum_cost_delay。我尝试在谷歌上搜索很多,但没有得到任何足以理解的东西。