postgresql是如何求年龄的_PostgreSQL年龄的处理-阿里云开发者社区

本文介绍了如何在PostgreSQL中查询数据库的年龄,并讨论了当年龄较高时如何执行vacuum freeze操作以避免autovacuum。同时,提到了脏数据问题对表膨胀的影响及解决方法,建议在理解autovacuum原理的基础上,监控年龄和脏数据并适时调整参数。
摘要由CSDN通过智能技术生成

1. 查询库的年龄

SELECT   $$nos_db$$ AS env_name ,

Current_database(),

nspname,

CASE relkind

WHEN $$r$$ THEN $$ordinary table$$

WHEN $$t$$ THEN $$toast table$$

END AS relkind,

relname,

age(relfrozenxid),

CASE

WHEN (

substring(reloptions::text,$$autovacuum_freeze_max_age=(\d+)$$)::int8) IS NOT NULL THEN (substring(reloptions::text,$$autovacuum_freeze_max_age=(\d+)$$)::int8)-age(relfrozenxid)

ELSE

(

SELECT setting

FROM   pg_settings

WHERE  name=$$autovacuum_freeze_max_age$$)::int8 - age(relfrozenxid)

END AS age_remain

FROM     pg_class t2

join     pg_namespace t3

ON       t2.relnamespace=t3.oid

WHERE    t2.relkind IN ($$t$$,

$$r$$)

AND      t2.relname LIKE 't_%'

ORDER BY age(relfrozenxid) DESC;

根据vacuum_freeze_min_age、autovacuum_freeze_max_age、vacuum_freeze_table_age等参数,判断是否是因为年龄触发的。 该文档中有说明 http://xmarker.blog.163.com/blog/static/2264840572014524112214193/

2. 如果年龄比较高,则执行vacuum freeze

vacuum freeze 的锁粒度较小,且执行较快。  参考中的vacuum freeze相关的介绍  http://www.postgres.cn/docs/9.3/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND

此时,可以解决由年龄触发的autovacuum。

3. 脏数据

经常更新,很容易造成脏数据,导致表的膨胀,请参考文档中的2.2部分 http://gitbook.cn/books/58db93b8f59193805502b491/index.html

可以先做下vacuum,然后看下表的空间占用是否会下降。必要的话,请做下vacuum full。

4. 业务维护

vacuum full可以解决当前频繁触发autovacuum的问题。正常情况下,autovacuum工作的很好,但鉴于当前业务更新量超大的情况,建议做好年龄和脏数据的监控,并及时处理。 或者在了解autovacuum的原理后,调整参数来适应业务,这个参考  http://www.postgres.cn/docs/9.3/runtime-config-autovacuum.html

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值