admin管理员组

文章数量:1530517

目录

前言

磁盘空间清理

VACUUM & VACUUM FULL

pg_repack插件

服务端开启pg_repack插件

安装pg_repack插件客户端

使用pg_repack命令清理膨胀空间

参考文档


前言

        VACUUM回收死元组占用的存储空间。在正常的PostgreSQL操作中,被更新删除或废弃的元组不会从它们的表中物理删除;它们一直存在,直到 VACUUM完成。因此有必要定期进行VACUUM,尤其是在频繁更新的表上。

磁盘空间清理

VACUUM & VACUUM FULL

  • VACUUM(不带FULL)只是回收空间并使其可供重用。这种形式的命令可以与正常的表读写并行操作,因为没有获得排他锁。但是,额外的空间不会返回给操作系统(在大多数情况下);它只是保留在同一张表中以供重复使用。
  • VACUUM FULL将表的全部内容重写到没有额外空间的新磁盘文件中,允许将未使用的空间返回给操作系统。这种形式要慢得多,需要一个ACCESS EXCLUSIVE在处理每个表时锁定它

pg_repack插件

        通过插件pg_repack在线清理表空间,有效解决因对全表大量更新等操作引起的表膨胀问题。pg_repack无需获取排它锁,相比CLUSTER或VACUUM FULL更加轻量化。

        pg_repack和VACUUM FULL都可以将释放的空间返回给操作系统,同样期间剩余空间要是被释放空间的两两倍。但pg_repack优势在于执行期间不影响原表的INSERT、UPDATE和DELETE。

服务端开启pg_repack插件

进入需要pg_repack的数据库,执行插件的开启/关闭。

  • 开启插件:CREATE EXTENSION pg_repack;
  • 关闭插件:DROP EXTENSION pg_repack;

安装pg_repack插件客户端

1.安装依赖环境-1

yum install postgresql* redhat-rpm-config openssl-devel readline-devel

 

 踩坑:使用yum install libpq*安装依赖时,有可能libpqxx依赖的postgresql版本为默认的9.2。而后续安装pg_repack时会限制postgresql相关依赖版本过低,需要9.4以上。

        所以安装时需要特别注意,如果yum安装时显示相关postgresql为9.4以上则可以使用yum安装,如果低于9.4则可以考虑rpm包安装(但是依赖巨多)。

查看服务器上安装的postgresql版本

卸载不需要的rpm包

yum remove postgresql
yum remove postgresql-libs

2.安装依赖-libpgxx

2.1 rpm包安装libpqxx-5.0.1-1

(本文使用的postgresql-13,所以相关postgresql也保持一致选择的13对应版本)

rpm包下载:libpqxx-5.0.1-1.rhel7.1.x86-64.rpm以及相关依赖-Linux文档类资源-CSDN下载

也可以到pkgs搜索需要的rpm包:https://pkgs/

可以通过上面的rpm包下载链接下载本次需要的rpm包,解压后使用

yum install *.rpm

2.2 添加环境变量

echo "export PATH=\$PATH:/usr/pgsql-13/bin/" >> /etc/profile

3.安装pg_repack-1.4.6

wget https://github/reorg/pg_repack/archive/refs/tags/ver_1.4.6.tar.gz
tar zxvf ver_1.4.6.tar.gz
cd pg_repack-ver_1.4.6
make && make install

使用pg_repack命令清理膨胀空间

pg_repack --no-superuser-check --echo --no-order -h ip -p 5432 -d databasename -U username --table xxx

pg_repack命令详细用法参考官方文档:

https://reorg.github.io/pg_repack/?spm=a2c4g.11186623.0.0.21eb41a26aBePG

参考文档

postgresql 清理磁盘空间_cuisidong1997的博客-CSDN博客_postgres 清理这种形式的命令可以和表的普通读写操作并行,因为它不会获得一个排他锁。但是,这种形式中额外的空间并没有被还给操作系统(在大多数情况下),它仅仅被保留在同一个表中以备重用。VACUUM FULL将表的整个内容重写到一个新的磁盘文件中,并且不包含额外的空间,这使得没有被使用的空间被还给操作系统。这种形式的命令更慢并且在其被处理时要求在每个表上保持一个排他锁。postgresql 长期使用后会造成删除的历史记录占用磁盘空间未被清理,使用下面的方法可以完成清理工作:VACUUM FULL。...https://blog.csdn/cuisidong1997/article/details/126296392清理表空间(pg_repack)https://help.aliyun/document_detail/212985.htm?spm=a2c4g.11186623.0.0.72a537c5loNqXx#concept-2071228https://reorg.github.io/pg_repack/?spm=a2c4g.11186623.0.0.21eb41a2fwfogOhttps://reorg.github.io/pg_repack/?spm=a2c4g.11186623.0.0.21eb41a2fwfogO

PostgreSQL: Documentation: 13: VACUUMhttps://www.postgresql/docs/13/sql-vacuum.html

本文标签: 磁盘空间postgresql