PostgreSQL数据库表在删除数据后磁盘空间未释放,该怎么办?
主流的压缩表工具有哪些?该如何选择?
创新互联始终致力于在企业网站建设领域发展。秉承“创新、求实、诚信、拼搏”的企业精神,致力为企业提供全面的网络宣传与技术应用整体策划方案,为企业提供包括“网站建设、响应式网站建设、手机网站建设、微信网站建设、小程序定制开发、购物商城网站建设、平台网站建设秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
近期生产环境出现一张表占用size已达2T,且会定期删除记录,但是,空间一直未释放,是何原因?
原因就在于vacuum,而vacuum怎么存储,清理数据的可参考官方文档进行查看。https://www.postgresql.org/docs/current/routine-vacuuming.html。
出现表一直膨胀,该如何处理?开源社区的魅力就在于很多大神会提供很多工具来解决对应的问题,而本问题则有2种主要的工具:pg_repack和pgcompacttable。
pg_repack的处理方式是创建一张新表,再将历史数据从原表中拷贝一份到新表。在拷贝过程中为了避免表被锁定,会创建了一个额外的日志表来记录原表的改动,并添加了一个涉及INSERT、UPDATE、DELETE操作的触发器将变更记录同步到日志表。当原始表中的数据全部导入到新表中,索引重建完毕以及日志表的改动全部完成后,pg_repack会用新表替换旧表,并将原旧表Drop掉。此工具过程简单且靠谱,单需要额外的磁盘空间来报错临时创建的中间表。
pgcompacttable利用了PostgreSQL的一个有趣特性:在执行INSERT和UPDATE操作时,会将所有新版本的行移到表最开始的可用空间。此为pgcompacttable工具的关键,因为如果从末端反向开始更新所有行,最终所有可用空间被这些行填充,并将表尾部的空间全部释放以便让定期vacuum进行truncate。这样一来,pgcompacttable通过批量更新和vacuum强制移动,最终整个表被重新整理,达到压缩的效果。此工具对磁盘空间要求低,且性能影响可控。
为了便于大家选择工具,简单做了一个对比说明供参考。
pg_repack |
pgcompacttable | |
是否需要保证性能 |
否 |
是 |
是否移动表/索引 |
是 |
否 |
是否有足够空间 |
是 |
否 |
压缩速率是否高 |
是 |
否 |
小结:因很多场景下磁盘空间有限,因而经常选择使用pgcompacttable较多,下面就记录一下pgcompacttable的安装及使用。
pgcompacttable工具使用过程中需要依赖pgstattuple,因此需先添加pgstattuple。如果是源码安装的postgresql,则源码里包含了postgresql-contrib,因此,进行编译及安装即可。
yum install perl-Time-HiRes perl-DBI perl-DBD-Pg -y
cd contrib/
make
make install
编译完成后会产生几个文件。
lib/pgstattuple.so。
share/extension/pgstattuple*。
之后在所需要使用的数据库里添加pgstattuple。
psql -d testdb
testdb=# create extension if not exists pgstattuple;
CREATE EXTENSION
下载依赖及安装包后即可使用。
# yum install perl-Time-HiRes perl-DBI perl-DBD-Pg -y
# su - postgres
$ git clone https://github.com/dataegret/pgcompacttable.git
pgcompacttable可以对database级别、schema级别、table级别进行压缩。
./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_table1
当前名称:PostgreSQL主流压缩表工具推荐
URL链接:http://www.shufengxianlan.com/qtweb/news45/62545.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联