目录
前言
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 readlin

本文围绕PostgreSQL磁盘空间清理展开。介绍了VACUUM和VACUUM FULL的作用及区别,前者回收空间供表重用,后者可将未使用空间返回给操作系统。还阐述了pg_repack插件,能在线清理表空间,解决表膨胀问题,同时说明了其服务端开启、客户端安装及命令使用方法。

3941

被折叠的 条评论
为什么被折叠?



