pg分区表的实践

1、背景:

由于目前项目中使用到了分区表,仔细看了一下和项目的契合度也很高,因此就此来深入了解一下分区表的应用。

以前项目刚开始的时候,用的只是按某个业务id分表,后来随着业务量的增大,出现了一次比较大的事故,就是pg数据库发生了事务回卷的问题。

由于这个表实际上是一个数据表,每天都会有大量的数据插入进来,同时我们需要对历史数据
进行备份和删除处理,在备份完成后,就需要使用delete对原有数据进行删除,但是由于pg数据库的特性,在做了删除操作后,数据库中的磁盘空间并不会立马被释放,pg有AUTOVACUUM会在不影响正常数据库任务的时候做自动清理工作,从而清理磁盘空间。

可能是数据库过于繁忙,新增删除的数据量较大,导致AUTOVACUUM的清理速度一直跟不上事务的
增长速度,所以这个事务id所处的元组不能被正常回收,就会导致发生这种事务回卷的状况。从而使数据库进入到了一个自我保护的状态,导致后续服务的数据库写入请求都失败了。

从这以后,我们就开始进行了对数据库表的改造工作。而pg分区表似乎可以完美的契合我们项目的使用情况,

首先,我们项目基本是个大数据项目,在数据写入之后,几乎不会有修改的的操作,当我们对历史数据进行分析的时候,我们总是通过where条件中带业务时间字段的方式查询数据进行分析的,产出的结果也是5分钟、小时、 和天数据,少部分会有跨天查询的需求, 因此我们就可以就使用这个业务时间的字段进行按天做分区表,大部分的情况直接查询子表就可以了,少部分需要跨天查询的就用主表来查。
主要就是不会有其他字段单独作为条件来查询这张表,因此分区表的效率是很高的。

2、优势所在:

而分区表的优势之一,就是方便历史数据的删除,直接DROP掉历史子表就行了。现在冷热库的数据
备份,直接将子表备份到冷库后,再DROP子表也是更加方便,DROP表与delete from table的方式完全不同,因为子表是分区存储的,DROP表的方式会直接释放掉这个子表所占用的空间,不需要pg自动AUTOVACUUM来回收空间,从而避免pg数据库发生事

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值