使用方法:
1.设置autovacuum=off
酌情配置,小表可以不用关闭,大表酌情配置
2.把sample/sys_repack目录下的两个sql文件拷贝到bin目录下
3.修改sys_repack--1.0.sql文件里的libdir,改成绝对路径
4.\i sys_repack--1.0.sql (注意:每个库都要执行)
5.简单用例环境准备:
create table repack_test(n_id int primary key,c_name varchar(3000));
insert into repack_test select generate_series(1,4000000),'张三';
update repack_test set c_name = '张三-1' where n_id <=2000000;
analyze repack_test;
select * from sys_class where relname='REPACK_TEST';
6.测试:
./sys_repack -h localhost -p 8001 -U SYSTEM -WMANAGER -d TEST --no-order --elevel=debug --table repack_test
7.查看relfilenode是否改变和relpages是否变小
select * from sys_class where relname='REPACK_TEST';
注意:
(1)repack前评估一下数据量大小,添加足够的数据文件以及临时文件
(2)当sys_repack工具运行途中异常中断,可能会遗留一些临时对象在repack模式下。可以通过执行sys_repack--unpackaged--1.0.sql卸载工具再重装来解决。
(3)sys_repack被kill掉或者异常退出的时候,可能会遗留3个触发器repack_trigger_insert,repack_trigger_delete,repack_trigger_update。排除非客户触发器后手动删除即可。
(4)处理大表的时候建议先执行一次vacuum,减少sys_repack执行中触发vacuum。
(5)访问频率比较高的表建议配合-D 和 -T参数使用,让sys_repack等待足够长的时间来不停地尝试加锁
./sys_repack -h localhost -p 8001 -U SYSTEM -WMANAGER -d TEST --no-order --elevel=debug --table repack_test -D -T 1800