pg_squeeze插件安装使用
版本信息
系统:Ubuntu 16.04
数据库:PostgreSQL 10.10
pg_squeeze版本:1.2
获取代码
在这个链接里可以选择需要下载的pg_squeeze版本(’-b’后的参数为选择的版本分支 )
git clone -b REL1_2 https://github.com/cybertec-postgresql/pg_squeeze.git
在1.2版本中pg_squeeze只会在schedule时间范围的开始和结束两个时间点调用
在1.0版本中pg_squeeze会在first_check时间第一次调用之后循环调用,时间间隔为task_interval
安装依赖
apt-get install cmake libssl-dev
apt-get install libreadline6 libreadline-dev postgresql-server-dev-10
进入代码目录中,修改MakeFile,添加PG_CONFIG位置
cd pg_squeeze
vi Makefile
添加以下内容:
PG_CONFIG = /usr/bin/pg_config
或者指定版本的postgresql路径例如:
PG_CONFIG = /usr/lib/postgresql/10/bin/pg_config
如果不确定pg_config路径可以使用一下命令查找
sudo find / -name "pg_config" -print
在代码目录中,进行编译安装
make
sudo make install
修改配置文件
vi /etc/postgresql/10/main/postgresql.conf
添加以下内容:
wal_level = logical
max_replication_slots = 1
shared_preload_libraries = 'pg_squeeze'
重启postgresql使修改的配置文件生效
service postgresql restart
使用方法
在数据库中创建扩展
create extension pg_squeeze
查看安装pg_queeze后生成的系统表
表字段说明
- tabschema:表的模式名。
- tabname:表名。
- clustering_index:表示重建表时,表数据的物理顺序按照该索引进行聚簇。
- rel_tablespace:表示表重建时,移动到哪个表空间中。
- ind_tablespace:这个一个二维数组,表示索引和表空间的映射关系。
- schedule:vacuum在一天中运行的时间范围
- free_space_extra:表示空闲空间超过多少时就会对表进行重建,默认是50。
- min_size:表必须占用的最小磁盘空间(兆字节)才有资格进行处理,默认值为8。
- vacuum_max_age:当进行一次vacuum后,认为fsm是有效的最大时间,默认1小时。
- max_retry:当重建表失败时最大的重新尝试的次数,默认是0.
- skip_analyse:跳过对表进行analyse,默认是false。
使用pg_squeeze优化空间之前
创建squeeze任务
insert into squeeze.tables (tabschema, tabname, schedule, free_space_extra) values ('public', 'tbl_test', '{15:00, 19:00}', '10');
启动和关闭pg_squeeze进程
select squeeze.start_worker();
select squeeze.stop_worker();
使用pg_squeeze优化空间之后
pg_squeeze原理和注意点
pg_squeeze不需要建触发器,所以在重组时对原表的DML几乎没有性能影响。pg_squeeze支持自动的重组,即通过设置阈值、比较用户表与阈值,自动启动WORKER进程,将数据复制到重组表,最后加锁,切换FILENODE。
由于pg_squeeze需要使用logical replication,所以必须设置足够多的slots,而且必须注意可能与STANDBY争抢SLOTS,必须预留足够的SLOTS。
另外由于pg_squeeze可以自动,也可以不设置自动的收缩。 对于自动的收缩,建议不要对繁忙的数据库开启,以免在高峰期触发,带来一定的性能影响。