qq_42328945 2021-07-29 11:26 采纳率: 0%
浏览 147

postgresql 集群中的一张表膨胀且无法vacuum的问题

img

img

img
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 也试过,运行了几天后空间仍未释放,来个专家指导一下我吧,不管是是猜测还是确认的解决办法都希望大家能分享一下。

  • 写回答

1条回答 默认 最新

  • CSDN专家-文盲老顾 2021-07-30 14:29
    关注

    https://blog.csdn.net/pg_hgdb/article/details/79363298

    https://blog.csdn.net/cuichao1900/article/details/100394795

    参考这两个文章,进行调试,先删除最后一条记录试试能不能收缩空间,如果还是无法执行,出现报错,参考第二个文章,看看是哪个环节出现的问题(oldestXmin)

    评论

报告相同问题?

问题事件

  • 创建了问题 7月29日

悬赏问题

  • ¥15 优质github账号直接兑换rmb,感兴趣伙伴可以私信
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)