1

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

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

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

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

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

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

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

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

4

1 回答 1

0

您的意思是表存储大小而不是内存对吗?

首先,您应该检查一些常规事项以确定问题:

设置log_autovacuum_min_duration为 -1 以外的值并查看是否生成消息。

注意pg_stat_activity. 你的问题表上有运行吗?

检查输出

SELECT * FROM pg_stat_user_tables
WHERE relname = 'prablemtable';

什么是n_live_tupn_dead_tup?什么是autovacuum_countlast_autovacuum

我怀疑 autovacuum 正在运行,但无法完成它的工作,因为这三件事之一会阻止它清理

于 2019-03-20T14:34:02.683 回答