0
点赞
收藏
分享

微信扫一扫

PostgreSQL表膨胀小结

1. 全局膨胀点

1.1. 哪些垃圾不能被回收?

    1、年龄小于vacuum_defer_cleanup_age设置的垃圾记录

    2、当前实例中最老事务快照之后产生的垃圾记录

    3、SLOT catalog_xmin后产生的垃圾记录

    4、备库开启了feedback后,备库中最老事务快照(包括catalog_xmin, global xmin)之后产生的垃圾记录


1.2. 什么时候可能膨胀?

    1、vacuum_defer_cleanup_age 设置太大

    2、整个实例中的 : 长事务, 慢SQL, 慢2pc

    3、慢/dead slot(catalog_xmin, 影响catalog垃圾回收)

    4、standby 开启了 feedback (且standby有慢事务, LONG SQL, 慢/dead slot)


2. 库级膨胀点

2.1. 哪些垃圾不能被回收?

    1、年龄小于vacuum_defer_cleanup_age设置的垃圾记录

    2、当前数据库中最老事务快照之后产生的垃圾记录

    3、备库开启了feedback后,备库返回的最老事务快照(包括catalog_xmin, global xmin)之后产生的垃圾记录

    4、SLOT catalog_xmin后产生的垃圾记录(create table, drop table, pg_class, pg_att等)。影响全局(所有DB)


2.2. 什么时候可能膨胀?

    1、vacuum_defer_cleanup_age 设置太大

    2、当前数据库中的 : 长事务, 慢SQL, 慢2pc

    3、standby 开启了 feedback (且standby有慢事务, LONG SQL, 慢/dead slot)

    4、慢/dead slot(catalog_xmin, 影响catalog垃圾回收)


3. 普通对象 膨胀点

    用户创建的表、物化视图、索引等。


3.1. 哪些垃圾不能被回收?

    1、年龄小于vacuum_defer_cleanup_age设置的垃圾记录

    2、当前数据库中最老事务快照之后产生的垃圾记录

    3、备库开启了feedback后,备库返回的最老事务快照(仅指 global xmin)之后产生的垃圾记录。(catalog xmin无影响)


3.2. 什么时候可能膨胀?

    1、vacuum_defer_cleanup_age 设置太大

    2、当前数据库中的 : 长事务, 慢SQL, 慢2pc

    3、standby 开启了 feedback (且standby有慢事务, LONG SQL)


4. WAL文件膨胀点

    WAL是指PG的REDO文件。


4.1. 哪些WAL不能被回收或不能被重复利用?

    1、从最后一次已正常结束的检查点(检查点开始时刻, 不是结束时刻)开始,所有的REDO文件都不能被回收

    2、归档开启后,所有未归档的REDO。(.ready对应的redo文件)

    3、启用SLOT后,还没有被SLOT消费的REDO文件

    4、设置wal_keep_segments时,当REDO文件数还没有达到wal_keep_segments个时


4.2. 什么时候可能膨胀?

    1、archive failed ,归档失败

    2、user defined archive BUG,用户开启了归档,但是没有正常的将.ready改成.done,使得WAL堆积

    3、wal_keep_segments 设置太大,WAL保留过多

    4、max_wal_size设置太大,并且checkpoint_completion_target设置太大,导致检查点跨度很大,保留WAL文件很多

    5、slot slow(dead) ,包括(physical | logical replication) ,restart_lsn 开始的所有WAL文件都要被保留

 


举报

相关推荐

0 条评论