目录

前言

磁盘空间清理

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 -y

2.安装依赖-libpgxx

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

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

2.1 rpm包安装libpqxx-5.0.1-1

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

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

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

2.2 添加环境变量

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

3.安装pg_repack-1.4.6

wget https://github.com/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

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

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

参考文档

ps://reorg.github.io/pg_repack/?spm=a2c4g.11186623.0.0.21eb41a2fwfogO


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

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