我有一个数据库,每天在一个表中有超过800万次插入(记录随时间分布,大约每秒90-100次)。
每天删除7天以上的所有记录,但表的磁盘空间不会停止增长。
默认设置下,自动真空已打开。删除查询在晚上2:55执行。上一次上桌的自动抽真空大约是3小时后的6:32,并且没有第二次运行。
为什么每天的磁盘空间大约多1gb?
我现在不会自动清理磁盘空间,但是我可以将已删除的行用于新插入。
现在,似乎我正在删除记录,但是我没有将可用空间用于新记录,并且表一直在增长。
每天删除旧记录后,表中大约保留5000万行,它们与存储的大小几乎相同。
Postgres是否有可能想要它认为可以无问题操作的表达到某个大小?我之所以没有这样做,是因为没有太多的可用空间,当空间已满时,我会TRUNCATE
表。
答案 0 :(得分:0)
您的意思是表存储大小而不是内存正确吗?
首先,应检查一些常规事项以确定问题所在
将image
设置为-1以外的值,看看是否生成消息。
注意user.avatar.attach(StringIO.new(image)); user.save
中的自动真空处理。问题表上正在运行任何东西吗?
检查输出
log_autovacuum_min_duration
pg_stat_activity
和SELECT * FROM pg_stat_user_tables
WHERE relname = 'prablemtable';
是什么?
什么是n_live_tup
和n_dead_tup
?
我怀疑自动真空正在运行,但无法执行其工作,因为one of these three things prevents it from cleaning up:
状态为autovacuum_count
的长期交易。