Pg_squeeze 安装使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012551524/article/details/88802570

插件版本:

OS:Ubuntu 16.04

Postgresql:9.6


目的:

为了回收和再利用通过表更新或者删除行所占用的磁盘空间,我们要对表进行定时的清理,利用VACUUM FULL这种形式会出现较长时间锁表情况,导致该表无法进行读写,只有等整个过程完成后才可以进行正常使用,因此考虑采用Pg_squeeze这一扩展插件,解决如上问题

Pg_squeeze工作原理:

安装:

1、下载插件

https://github.com/cybertec-postgresql/pg_squeeze

根据PG版本下载指定版本

2、编译安装

make && make install

3、如果遇到如下问题

解决:修改MakeFile,添加PG_CONFIG位置,如下

如何查看本机PG_CONFIG可用目录位置:

sudo find / -name "pg_config" -print

4、配置Posgresql,修改postgresql.conf添加如下配置

wal_level = logical

max_replication_slots = 1 # 大于等于1

shared_preload_libraries = 'pg_squeeze'

5、重启Postgresql

使用

1、引入扩展插件pg_squeeze

postgres=# create extension pg_squeeze;

2、创建一张测试表

postgres=# create table test(id int primary key);

3、导入一批数据

postgres=# insert into test select generate_series(1,5000000);

4、查看安装pg_queeze后生成的系统表

postgres=# set search_path to squeeze;

postgres=# \d

主要看一下squeeze.tables的表结构

字段解释:

tabschema:schema name

tabname:table name 

clustering_index:用来在表重构结束后对表元组做物理排序的索引

rel_tablespace:表示表重建时,移动到哪个表空间中 

ind_tablespaces:这个一个二维数组,表示索引和表空间的映射关系 

task_interval:表示检查表膨胀是否超过阀值的时间间隔 

first_check:表示第一次检查时间 

free_space_extra:表示空闲空间超过多少时就会对表进行重建,默认是50

min_size:被处理的最小的表占用的磁盘空间 

vacuum_max_age:当进行一次vacuum后,认为fsm是有效的最大时间,默认1小时 

max_retry:当重建表失败时最大的重新尝试的次数,默认是0 

skip_analyze:跳过对表进行analyse,默认是false

5、向squeeze.tables插入一条数据,定期清理test表,5分钟一次,

insert into squeeze.tables (tabschema,tabname,first_check,free_space_extra,task_interval) values('public','test',now(),20,interval '5 minutes');

6、启动pg_squeeze的进程需要调用

SELECT squeeze.start_worker();

关闭:SELECT squeeze.stop_worker();

7、查看当前表的膨胀情况

此时test表大小

8、删除test表一半数据

postgres=# delete from test where id < 2500000;

DELETE 2499999

9、查看当前表的膨胀情况

如图,free_space为44,大于我们设置的20,进程已经开始清理表膨胀,还没有处理完

查看当前test大小

如图,表大小没有变化,由于进程没有结束,表空间没有释放

10、待表清理完,再次查看tables_internal

如图,表已清理完毕,再次查看表大小

如图,空间已释放,测试成功

参考:

https://github.com/cybertec-postgresql/pg_squeeze

https://www.cybertec-postgresql.com/en/products/pg_squeeze/

猜你喜欢

转载自blog.csdn.net/u012551524/article/details/88802570