情况描述:
KADB集群数据空间使用过快
分析过程:
使用gpssh命令查看集群个节点的数据空间使用情况,定位空间使用最大的目录(文件)。在集群当前的master节点(126)上执行:
gpssh –f hostfile –e ‘df –h’ | grep ‘/data’
其中hostfile文件内容为集群所以节点的主机名
该命令将集群所有节点的’/data‘(数据目录)目录空间使用情况进行输出,从而定位空间使用最多的节点。
确定上述信息后,登录到126节点(目前126的数据目录使用最多),分别对该节点上的master实例和segment实例空间进行查看
cd /data/kadb/dbdata/
du –sh *
上述命令打印126节点的/data目录下,master实例(对应数据目录:master),segment实例(对应数据目录:primary),master实例备份目录(master_backup)分别占用的空间大小
在125节点上同样执行上述操作,并对比两种实例使用空间情况
发现126节点的master实例备份目录比125节点大1T左右。Master实例备份目录是在master实例发生切换时 对master数据目录的备份。里面的信息在集群运行正常的情况下可以删除,从而释放数据目录的总体空间
进一步查看master和segment实例的集群运行日志(pg_log目录)空间。集群的运行日志参数设置为保留一个星期,但对每天产生的日志大小没有限制。从每天的日志文件大小看,集群的一个segment实例一天产生的日志文件大小约为800GB,是导致集群数据目录空间使用过快的原因。
查看segment实例的日志文件,发现包含大量INSERT语句的日志,并且对集权执行的每条语句的执行时间进行了记录。
根据上述情况,采取调整数据库参数的方式进行改进:
- 将log_statement参数的值由‘ddl’进一步调整为‘none’,日志不记录sql语句
- 将log_duration参数的值由‘on’调整为‘off’,日志不记录语句的执行时间
分析结论:
集群数据空间和日志空间共用一个数据目录、master实例和segment实例在节点上混合部署,导致日志占用数据的空间,master节点的备份信息占用数据的空间。最终的现象表现为数据空间不足。
针对上述情况,采取限制日志记录信息的方式,争取减少日志文件的过快增长
后续方案:
- 调整参数,限制日志文件记录的内容,从而减少日志占用的空间
- 配置数据目录的监控,检测数据目录每一个小时的数据增长量。
126节点配置定时任务:
0 * * * * /home/mppadmin/kadb/bin/gpssh –f hostfile –e ‘df –h’ | grep ‘/data’ >> /tmp/df.log
根据本步骤的检测结果,决定是否对日志采取进一步的设置。
- 改变目前对日志文件的设置参数,由保留一个星期但不限制文件大小,改为限制文件大小和数量。
处理结果:
经监控,数据库日志未见异常增长,监控信息如下:
数据目录空间使用率,各个节点约为12%。问题解决