greenplum(gp)postgre清理pg_xlog释放空间
greenplum数据库在大量数据更新时,会产生大量的pg_xlog,造成磁盘空间占用;系统长时间运行后,pg_log文件夹下日志文件也会越来越大,合理的做法是日志文件的磁盘和数据目录挂载在不同的磁盘路径下或者磁盘扩容;若在同一路径下,可将日志文件备份到其他路径,腾出一部分空间,或清理pg_xlog
【注意】:
pg_xlog下面的日志不能人为的随意删除,例如使用rm -rf命令,否则给数据库带来巨大灾难,服务启动失败
greenplum/PostgreSQL自带了清理wal日志的工具叫pg_resetxlog,其实是通过重置xlog的值来清理xlog文件。但是这个工具通常不建议使用,在无法扩容且磁盘快满等特殊情况下,可以选择清理,但也会有一定几率造成服务启动异常。
一定不能在服务运行的情况下去操作pg_resetxlog
1、查看当前pg_xlog占用大小【gpmaster操作】
cd /home/gpadmin/gpdata/gpmaster/gpseg-1/
或 cd $MASTER_DATA_DIRECTORY
du -sh *
可以看到当前数据目录下pg_xlog
备注:集群的每个数据存储节点上都会存在pg_xlog的空间占用
2、同样操作方式逐个节点实施清理【根据机器清单逐个执行】
gpstate -s | grep -E "Master data directory|Datadir"|awk -F"=" '{print $2}'
3、停止gp集群服务【gpmaster操作】
gpstop -M fast #确保无任务执行
4、清理流程【gpmaster操作】
# 注意操作用户均为gpadmin管理员用户来操作,其他linux普通用户无法操作
# pg_controldata命令读取的pg_control里存储路径的元数据信息
[gpadmin@gpmaster gpseg-1]$ pg_controldata /home/gpadmin/gpdata/gpmaster/gpseg-1 | grep -E "Latest checkpoint's NextXID|Latest checkpoint's NextOID"
Latest checkpoint's NextXID: 0/735
Latest checkpoint's NextOID: 16395
# -o 参数为查询到的NextOID,-x 参数为查询到的NextXID,-f 参数为对应的数据存储目录
[gpadmin@gpmaster gpseg-1]$ pg_resetxlog -o 16395 -x 735 -f /home/gpadmin/gpdata/gpmaster/gpseg-1
WARNING: Do not use this on Greenplum. pg_resetxlog might cause data loss
and render system irrecoverable. Do you wish to proceed? [yes/no] yes
Transaction log reset
[gpadmin@gpmaster gpseg-1]$
5、再次验证数据存储目录【gpmaster操作】
du -sh *
可以看到当前数据目录下pg_xlog 65M大小,已经被清理
备注:
- 涉及的数据路径均以真实环境查询到的数据存储路径清单为准
- NextXID和NextOID均以真实环境查询到的结果为准
- master清理后 应该是64M(没验证是不是绝对),segment节点清理之后是比较大的
6、同样操作方式逐个节点实施清理【根据机器清单逐个执行】
7、启动gp集群服务【gpmaster操作】
gpstart -a