pg的表膨胀问题实在是太烦人了,一不注意就会顶上去下不来。full vacuum又要锁表,相信没几个系统能这么干的。那么为了避免膨胀的问题,首先需要了解这个机制。
1. og的表是追加更新的。删除的数据也不是真的删除。这是PG实现MVCC机制。根子上决定了会存在膨胀的问题。
2 那么老的数据应该需要被及时清理掉,这样回收空间。这种回收就是vacuum来实现。pg的自动vacuum是可以解决膨胀问题的。因此设置好自动vacuum的机制很重要。但是vacuum是要考虑mvcc的,也就是当前最老的那个活动事务号之前的数据都可以清理。这就要求我们监控好活动事务,不能留长事务。
3 对于定期清理历史数据的表,这种使用采用时间分区的表,这样drop表分区就可以把空间腾出来,这是最好的方式。
随意对策就是:
1. 设置自动vacuum
2. 监控和杀长事务
3. 利用好分区表
4。监控表的大小和膨胀率,及时发现问题。
pg 膨胀就是个灾难问题。哈,个人认为,咋处理都有点那个!!!!硬伤!
我这处理的经验基本有几个点,基本都是为了避免膨胀后者避免碰撞带来的效率问题(io)!
1场景 比如临时表的使用,在自己的session 里面把需要做的 u d 都做了。到最后的状态放到结果表里。
2 场景, 评估一下数据的修改次数和概率,一个块的填充率设置就小点。尽量在一个块了折腾,减少io
3 把活数据和死数据分区管理,这样在对数据维护的时候就可以只针对有ud 操作的分区表处理,大大减少运维时间。
4 对大的表尽量设置人工回收,不要让pg自己去搞,感觉会更安心些
5 对慢的sql 监控一下,有很多时候并不是因为膨胀而引起的副作用
其实也不用过度的去担心这个。现在把磁盘弄大点(ssd更好)这应该不是多大的事在一般系统里!
收起