清理表空间(pg_repack) 本小节主要介绍RDSPostgreSQL的pgrepack插件使用方法。 操作场景 RDSPostgreSQL支持通过 pgrepack 插件在线清理表空间,有效解决因对全表大量更新等操作引起的表膨胀问题。pgrepack无需获取排它锁,相比CLUSTER或VACUUM FULL更加轻量化。 前提条件 请确保您的实例内核大版本满足,本插件所支持的内核版本,请参考支持的版本插件列表。 注意事项 pgrepack需要额外的存储空间。全表repack时,剩余存储空间大小需要至少是待repack表大小的2倍。 pgrepack无法操作临时表。 pgrepack无法操作GiST索引。 重建表和索引时会占用较多的磁盘IO,使用时请提前评估是否影响业务。 在pgrepack运行期间,目标表上不能执行除vacuum和analyze之外的任何DDL指令。 插件使用 安装插件 CREATE EXTENSION IF NOT EXISTS pgrepack; 卸载插件 DROP EXTENSION IF EXISTSpgrepack; 使用示例 使用 pgrepack插件清理表。 1. 创建测试表 sql create table pgrepacktest(id bigint primary key, name varchar); insert into pgrepacktest select i , tochar(random()100000, 'FM000000') from generateseries(1, 1000000) i; delete from pgrepacktest where id in (select i from generateseries(1, 600000, 2) i); select pgsizepretty(pgrelationsize('pgrepacktest')); 2. 清理测试表 shell cd . setenv.sh cd bin ./pgrepack host port dbname usernameroot nosuperusercheck nokillbackend t pgrepacktest :RDSPostgreSQL实例的安装目录 :RDSPostgreSQL实例的IP地址。 :RDSPostgreSQL实例的端口。 :表pgrepacktest所在的数据库。 3. 查看清理后的表大小 sql select pgsizepretty(pgrelationsize('pgrepacktest'));