jcca31a 的数据只有几千条,但是占用了11G的磁盘空间,手动vacuum命令会报这个错
VACUUM jcca31a
WARNING: oldest xmin is far in the past
HINT: Close open transactions soon to avoid wraparound problems.
OK
时间: 9.775s
关于auto_vacuum的配置文件
#----------------------------------
#autovacuum相关参数
#----------------------------------
默认为on,表示是否开起autovacuum。默认开起。特别的,当需要冻结xid时,尽管此值为off,PG也会进行vacuum。
autovacuum=on
两次vacuum间隔时间,默认10min。 这个naptime会被vacuum launcher分配到每个DB上。autovacuum_naptime/num of db。
autovacuum_naptime=1min
在规定时长内未完成的vacuum予以记录日志,单位ms,当vacuum动作超过此值时。 "-1"表示不记录。"0"表示每次都记录。
log_autovacuum_min_duration=500
默认值是3。 autovacuum最大线程数,CPU核多,并且IO好的情况下,可多点
autovacuum_max_workers=3
每个worker可使用的最大内存数。
autovacuum_work_mem=64MB
当update,delete的tuples数量超过 autovacuum_vacuum_scale_factor * table_size + autovacuum_vacuum_threshold 时,进行vacuum。如果要使vacuum清理频繁,则将以下两个参数改小。
清理阀值,与autovacuum_vacuum_scale_factor配合使用,默认50。
autovacuum_vacuum_threshold=50
清理的缩放系数,默认值为0.2。
autovacuum_vacuum_scale_factor=0.2
以下两个参数控制analyze运行,和上面的两个参数配置类似。
#当update,insert,delete的tuples数量超过 autovacuum_analyze_scale_factor * table_size + autovacuum_analyze_threshold时,进行analyze。
analyze阀值,与autovacuum_analyze_scale_factor配合使用,默认50。
autovacuum_analyze_threshold=50
analyze的缩放系数,默认值为0.1。
autovacuum_analyze_scale_factor=0.1
设置需要强制对数据库进行清理的XID上限值。
autovacuum_freeze_max_age=200000000
autovacuum_multixact_freeze_max_age=400000000
运行一次vacuum的时长,如果超过此值则休眠然后起来接着vacuum(vacuum很好I/O),如果为-1,取vacuum_cost_delay值。
autovacuum_vacuum_cost_delay=20ms
这个值是所有worker的累加值,如果为-1,取vacuum_cost_limit的值
autovacuum_vacuum_cost_limit=200
设置感觉也没问题,但这个表既不启动autovacuum,手动Vacuum又报错,vacuum full 也试过,运行了几天后空间仍未释放,来个专家指导一下我吧,不管是是猜测还是确认的解决办法都希望大家能分享一下。