一、背景
后台一直往 Greenplum 数据库生成数据,由于没关注磁盘空间,导致数据存储空间利用率达到100%,数据库宕机无法启动。
当然上述情况是可以通过很多方式规避的:
- 利用率达到70%时扩展空间
- 利用率达到70%时清理数据库无用数据
- 在数据目录下放置大文件,在没有足够空间启动时通过删除大文件获取足够空间启动
- ......
二、解决办法
2.1、删除 pg_log 目录下的文件
在每个节点的数据存放目录下会生成 pg_log 目录,如下:
greenplum_01.pngpg_log 目录下记录的是数据库活动日志,一般是记录服务器与 DB 的状态,比如各种 Error 信息,定位慢查询 SQL ,数据库的启动关闭信息,发生 checkpoint 过于频繁等的告警信息,诸如此类。该日志有 .csv 格式和 .log。
如果生产系统 pg_log 日志没有定期清理, log 日志会轻松占用 1G 以上的空间,如果数据库宕机无法启动,可以通过清理所有节点该目录下的数据文件(master 节点的 log 日志很大, segment 节点 log 日志稍小);清理完后,尝试启动数据库,此时一般不会有问题,都能正常启动。
这里要注意不能删错 pg_xlog 和 pg_clog 目录的信息。pg_xlog 与 pg_clog 记录数据库的事务信息,不得随意删除更新。
2.2、移动 base 目录下的文件
现场的 pg_log 保留时间太短,删完了也无法启动。
此时还有一种移动文件的办法,可以先查看一下base目录(数据存储的实际目录,和 pg_log 处在同一目录下),找到下面数字较大的文件夹,把里面的几个大文件复制备份一下,然后删除,这样空间就足够启动了,启动数据库后,尽快清理部分表数据后,将原来的数据文件移动回来,保证数据完整性,否则会导致一些表不可用。
这种方法是不正规的操作,建议少用。使用前一定要做好备份工作,因为涉及删除生产数据,一旦误操作,可能导致数据无法恢复。
2.2、其他方法
也许还有其他的方法,后续有资料后再做记录。
三、总结
初次使用 greenplum 没有经验,可能会有磁盘占用满的风险,后续应该注意这个问题,尽量规避,少踩一些坑。
网友评论