症状
SAP GUI的显示状态
服务器内存使用状态
原因
1.hana数据库未做内存限制,官方解决方案snote 3414873
2.属于我司造成的原因是备份未成功,造成备份日志填充到内存中造成
解决方案
1.由于我司备份方案采用是dell networker + Data Domain ,由于networker长期无人管理,造成Data Domain磁盘空间满了,无法给我司SAP提供备份.那么先解决networker备份文件太多的问题,networker管理接口有三种:GUI,WEB,Console.由于备份的文件太多,通过GUI方式查看存储集的时候,已经完全打不开了。由于networker在实施初期没有做Web方式的部署,所以也看不到存储集的情况,如果能看到存储集,可以对存储集做过期处理,让networker自动删除这些备份文件。目前只能通过Console的方式来处理这些备份文件,厂商在实施networker的时候,根本没有提交Console的方式。通过chatgpt的帮助,我对console方式有了大体的了解,需要找到存储集的ssid,通过ssid可以删除相关的备份文件。我编写了一个寻找ssid并自动删除相关存储集的脚本,运行两天之后发现networker根本没有删除任何存储集。
脚本内容如下
(1)查找ssid的命令
mminfo -avot -q "volume=nws.dddefault.001" -r "ssid" >> delete_ssids.txt # nws.dddefault.001这个卷名称可以GUI中找到
(2)删除存储集的脚本
#!/bin/bash
# 文件名:delete_ssids.sh
# SSID文件路径
SSID_FILE="delete_ssids.txt"
# 检查文件是否存在
if [[ ! -f "$SSID_FILE" ]]; then
echo "文件 $SSID_FILE 未找到!"
exit 1
fi
# 循环读取文件中的每个SSID并删除
while IFS= read -r ssid || [[ -n "$ssid" ]]; do
if [[ -n "$ssid" ]]; then
echo "删除SSID: $ssid"
yes | nsrmm -d -S "$ssid"
fi
done < "$SSID_FILE"
echo "批量删除完成。"
(3) 对于networker存储集一直存在的情况,我有个疑惑,就是networker的自动过期机制应该没有生效,造成Data Domain数据空间全部满了,自动过期机制是所有备份软件的标准功能,但是为什么networker没有启用呢?在2023年底,有同事也报告过networker磁盘空间满了,当时解决此问题的人没有深入研究,让官方重做了networker,不过我现在的疑问应该有标准的解决方案,让自动文件自动过期删除。这次在networker的官方社区,我找到了这个命令
nsrim -X
(4)networker删除过期文件的问题解Data Domain不会自动释放空间,需要做一个cleaning动作。
查看Data Domain空间使用情况的命令
filesys show space
回收空间的命令
filesys clean start
查看回收命令状态的命令(执行了9个半小时)
filesys clean watch
(5)解决了networker和Data Domain问题之后,磁盘空间终于释放了,可是通过networker GUI的方式,发现磁盘空间回收的很慢,大约回收了2天才完成。
2.我原以为步骤1是触发问题的主动原因,但是SAP的备份仍然不能执行,我猜想应该是SAP备份是触发问题的主动原因,这是我们需要拆除SAP中第三方备份机制,我在hana Studio中
把红色方框中内容都修改为默认值,保存之后立即生效了。
/usr/sap/DVL/HDB00/backup/log
在这个目录中立即就收到了备份日志,我在SAP DB13中启动了一个全备,可是在
/usr/sap/DVL/HDB00/backup/data
没有收到任何数据,DB13中备份一直处于运行状态,运行几个小时也没有结果,也没有任何的消息提示,不过
/usr/sap/DVL/HDB00/backup/log
这个目录很快就爆满了,运行一天就让SAP磁盘空间满了,我也不知道什么原因。
现在的问题是全备无法执行,日志备份太猛。
通过比对hana studio中备份配置,我找到了其中的原因
第三方的全备路径是/nsr/res/hana.utl,而本地备份的路径是/usr/sap/DVL/HDB000/backup/data,其中DVL是hana的SID
日志的备份频率也从15分钟调整为48小时。
这样在SAP DB13启动全备之后,在/usr/sap/DVL/HDB00/backup/data终于看到了DVL租户的备份文件,而对于SYSTEM数据库,是通过备份脚本实现的,可以在hana数据库用户dvladm的crontab中找到这个定时任务。
3.步骤2已经完美解决备份问题,但是备份文件需要定期删除,这样hana数据库才不至于用完服务器的磁盘空间,所以我们要引入备份自动删除的机制。
SAP的实施厂商已经给我们留下了自动删除备份的脚本,可是对于我们的现状来说,已经不能用了,因为我们需要找到一个BACKUP_ID的数值,因为我司SAP长期备份失效,已经很难找到有效了BACKUP_ID 了,恰好我们在步骤2中完成了全备,正好在DVL和SYSTEM两个数据库都生成了BACKUP_ID ,我们可以利用这个BACKUP_ID 来删除以前的历史备份记录,因为这些历史备份记录的存在,造成hana studio中很难打开备份目录中backup catalog标签,现在需要分别登录DVL和SYSTEM两个数据库,执行下面的语句
SELECT * FROM M_BACKUP_CATALOG WHERE ENTRY_TYPE_NAME='complete data backup' AND STATE_NAME='successful' ORDER BY BACKUP_ID DESC
BACKUP CATALOG DELETE ALL BEFORE BACKUP_ID xxxx COMPLETE
4.问题完美解决之后,服务器的内存使用状况如下: