Postgres autovacuum无法释放磁盘空间

时间:2019-03-20 14:17:13

标签: postgresql autovacuum

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

每天删除7天以上的所有记录,但表的磁盘空间不会停止增长。

默认设置下,自动真空已打开。删除查询在晚上2:55执行。上一次上桌的自动抽真空大约是3小时后的6:32,并且没有第二次运行。

为什么每天的磁盘空间大约多1gb?

我现在不会自动清理磁盘空间,但是我可以将已删除的行用于新插入。

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

每天删除旧记录后,表中大约保留5000万行,它们与存储的大小几乎相同。

Postgres是否有可能想要它认为可以无问题操作的表达到某个大小?我之所以没有这样做,是因为没有太多的可用空间,当空间已满时,我会TRUNCATE表。

1 个答案:

答案 0 :(得分:0)

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

首先,应检查一些常规事项以确定问题所在

image设置为-1以外的值,看看是否生成消息。

注意user.avatar.attach(StringIO.new(image)); user.save中的自动真空处理。问题表上正在运行任何东西吗?

检查输出

log_autovacuum_min_duration

pg_stat_activitySELECT * FROM pg_stat_user_tables WHERE relname = 'prablemtable'; 是什么? 什么是n_live_tupn_dead_tup

我怀疑自动真空正在运行,但无法执行其工作,因为one of these three things prevents it from cleaning up