应用开发

PostgreSQL 主流压缩表工具推荐

字号+作者:益华科技来源:应用开发2025-11-05 01:21:03我要评论(0)

PostgreSQL数据库表在删除数据后磁盘空间未释放,该怎么办?主流的压缩表工具有哪些?该如何选择? 1、从空间未释放说起近期生产环境出现一张表占用size已达

PostgreSQL数据库表在删除数据后磁盘空间未释放,主流该怎么办?压缩

主流的压缩表工具有哪些?该如何选择?

1、从空间未释放说起

近期生产环境出现一张表占用size已达2T,表工且会定期删除记录,但是具推荐,空间一直未释放,主流是压缩何原因?

原因就在于vacuum,而vacuum怎么存储,表工清理数据的具推荐可参考官方文档进行查看。https://www.postgresql.org/docs/current/routine-vacuuming.html​。主流

出现表一直膨胀,压缩该如何处理?表工开源社区的魅力就在于很多大神会提供很多工具来解决对应的问题,而本问题则有2种主要的具推荐工具:pg_repack和pgcompacttable。

2、主流工具对比

(1)pg_repack

pg_repack的压缩处理方式是创建一张新表,再将历史数据从原表中拷贝一份到新表。表工在拷贝过程中为了避免表被锁定,会创建了一个额外的日志表来记录原表的改动,并添加了一个涉及INSERT、UPDATE、DELETE操作的WordPress模板触发器将变更记录同步到日志表。当原始表中的数据全部导入到新表中,索引重建完毕以及日志表的改动全部完成后,pg_repack会用新表替换旧表,并将原旧表Drop掉。此工具过程简单且靠谱,单需要额外的磁盘空间来报错临时创建的中间表。

(2)pgcompacttable

pgcompacttable利用了PostgreSQL的一个有趣特性:在执行INSERT和UPDATE操作时,会将所有新版本的行移到表最开始的可用空间。此为pgcompacttable工具的关键,因为如果从末端反向开始更新所有行,最终所有可用空间被这些行填充,并将表尾部的空间全部释放以便让定期vacuum进行truncate。这样一来,pgcompacttable通过批量更新和vacuum强制移动,最终整个表被重新整理,达到压缩的效果。此工具对磁盘空间要求低,且性能影响可控。

(3)对比

为了便于大家选择工具,香港云服务器简单做了一个对比说明供参考。

pg_repack

pgcompacttable

是否需要保证性能

是否移动表/索引

是否有足够空间

压缩速率是否高

小结:因很多场景下磁盘空间有限,因而经常选择使用pgcompacttable较多,下面就记录一下pgcompacttable的安装及使用。

3、pgcompacttable部署及使用实例

(1)添加pgstattuple

pgcompacttable工具使用过程中需要依赖pgstattuple,因此需先添加pgstattuple。如果是源码安装的postgresql,则源码里包含了postgresql-contrib,因此,进行编译及安装即可。

复制yum install perl-Time-HiRes perl-DBI perl-DBD-Pg -

y

cd contrib/

make

make install1.2.3.4.

编译完成后会产生几个文件。

lib/pgstattuple.so。

share/extension/pgstattuple*。

之后在所需要使用的数据库里添加pgstattuple。

复制psql -

d testdb

testdb=# create extension if not exists pgstattuple;CREATE EXTENSION1.2.3. (2)部署pgcompacttable

下载依赖及安装包后即可使用。

复制# yum install perl-Time-HiRes perl-DBI perl-DBD-Pg -

y

# su -

postgres

$ git clone https://github.com/dataegret/pgcompacttable.git1.2.3. (3)pgcompacttable使用

pgcompacttable可以对database级别、schema级别、table级别进行压缩。b2b供应网

复制./pgcompacttable -h localhost -U postgres -

d testdb

./pgcompacttable -h localhost -U postgres -d testdb -

n public

./pgcompacttable -h localhost -U postgres -d testdb -n public -t test_table11.2.3.

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • OPPOR9.11手机(OPPOR9.11手机)

    OPPOR9.11手机(OPPOR9.11手机)

    2025-11-05 01:02

  • 小米5尊享版128g手机值得购买吗?(性能强劲,存储空间大,拍照出色,性价比高)

    小米5尊享版128g手机值得购买吗?(性能强劲,存储空间大,拍照出色,性价比高)

    2025-11-05 00:43

  • 华硕台式电脑M32的性能和特点(全面评测华硕M32,解析其性能亮点和用户体验)

    华硕台式电脑M32的性能和特点(全面评测华硕M32,解析其性能亮点和用户体验)

    2025-11-04 23:13

  • Win8.1GHO安装教程(一键安装Win8.1系统,让你轻松拥有最新操作系统)

    Win8.1GHO安装教程(一键安装Win8.1系统,让你轻松拥有最新操作系统)

    2025-11-04 22:41

网友点评