暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在线维护工具pg_repack及pg_squeeze对比

原创 多米爸比 2021-01-13
2910

PostgreSQL中大量更新或者删除记录后,加上autovacuum参数未做优化或设置不当,会导致表及索引膨胀。生产环境除了手动使用vacuum之外,还有两个比较常用的工具:一个是pg_repack,另外一个是pg_squeeze

使用pg_repack或pg_squeeze对表做重组时,比vacuum full对系统的影响小,且性能更高。

pg_repack使用例子

对test数据库下的foo和bar表做在线vacuum full

$ pg_repack --no-order --table foo --table bar test

转移foo表的索引到tbs表空间

$ pg_repack -d test --table foo --only-indexes --tablespace tbs

pg_squeeze使用例子

以注册表方式crontab定期运行“squeeze挤压”

INSERT INTO squeeze.tables (tabschema, tabname, schedule)
VALUES ('public', 'foo', ('{30}', '{22}', NULL, NULL, '{3, 5}'));

手工对public模式下的pgbench_accounts表“squeeze挤压”

SELECT squeeze.squeeze_table('public', 'pgbench_accounts', null, null, null);

pg_repack与pg_squeeze对比

1.支持的PostgreSQL版本

pg_repack 1.4.5 PostgreSQL >= 9.1
pg_repack 1.4.6 PostgreSQL >= 9.4
pg_squeeze PostgreSQL >= 9.4

2.重组表的方式

pg_repack 基于触发器方式实现,对被重组的表,有一定的DML性能影响。
pg_squeeze 基于逻辑复制槽实现,重组时对原表的DML几乎没有性能影响,可能有复制槽争用,注意设置复制槽参数。

3.其它

pg_repack和pg_squeeze都需要表有主键或者非空唯一约束。
pg_squeeze目前支持的功能比pg_repack更灵活些,除了可手工或自动处理,也可以设置参数降低对后端进程的影响。

pg_squeeze当前版本1.3.1测试发现pg_show_plans不能同时使用。

最后修改时间:2022-10-23 09:20:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论