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文件都要被保留