一、问题背景与现象
在生产环境的日常运维中,我们遇到了一个典型的SAP HANA告警:/hana/log 日志卷空间使用率持续攀升,即将达到阈值。
登录系统后,进入日志目录 /hana/log/HEP/mnt00001/,执行 du -sh * 命令查看各子目录的空间占用情况:
hanaprd2:/hana/log/HEP/mnt00001 # du -sh * 395G hdb00001 222G hdb00002.00003 3.1G hdb00002.00004 253G hdb00002.00006 50M hdb00003.00003可以发现,hdb00001 等日志卷子目录的空间占用已高达数百GB,亟需进行清理。一个重要的警告是:绝不能在操作系统层面使用 rm 等命令直接删除这些文件,否则极易导致数据库崩溃或无法启动。
二、常规方案与初步尝试:ALTER SYSTEM RECLAIM LOG
面对日志空间问题,标准且安全的清理方法是在数据库层面执行SQL命令 ALTER SYSTEM RECLAIM LOG。
在HANA Studio中打开SQL控制台,执行以下命令:
ALTER SYSTEM RECLAIM LOG;命令提示执行成功(successfully executed),但当我们再次查询日志卷使用情况时,却发现空间并未被释放。
为了深入排查,我们查询了系统视图 SYS.M_LOG_SEGMENTS,以了解当前所有日志段的状态分布:
SELECT STATE, COUNT(*) AS SEGMENT_COUNT, SUM(TOTAL_SIZE)/1024/1024/1024 AS TOTAL_SIZE_GB FROM SYS.M_LOG_SEGMENTS GROUP BY STATE ORDER BY STATE;查询结果如下图所示:
可以看到,几乎所有的日志段都处于 Truncated 状态。问题的初步排查陷入了僵局:为什么 ALTER SYST