SAP单SQL语句导致Hana内存溢出警告 您所在的位置:网站首页 爆单语句 SAP单SQL语句导致Hana内存溢出警告

SAP单SQL语句导致Hana内存溢出警告

2024-07-14 14:54| 来源: 网络整理| 查看: 265

单SQL语句导致Hana内存溢出警告 1. S4-HANA系统突发卡滞2. DB02确认HANA内存耗用3.Hana studio 查询系统日志4.Hana studio 查询耗用较大的语句,找到异常语句5.分析语句异常原因6.对策1:优化SQL,降低运行时耗用内存7.对策2:优化Hana参数,对单SQL语句执行限制最大内存7.1 打开HANA内存资源追踪7.2 设置单语句内存限制 8. 参考资料SAP帮助文档,设置SQL内存限制

1. S4-HANA系统突发卡滞

某日SAP系统突发卡滞,用户反馈事物无法执行,大量接口访问失败。系统版本,S4HANA1809。

2. DB02确认HANA内存耗用

SAP GUI/事务码DB02查询HANA数据库内存耗用,发现对应时间点2021/04/30日9点前出现突然内存耗用达到90%以上,与发生时间吻合(前1天也发生过1次)。 在这里插入图片描述

3.Hana studio 查询系统日志

发现8点55分出现一次alert警告,但从该警告内部仅知道发生内存溢出,未找到出错的语句。 在这里插入图片描述

4.Hana studio 查询耗用较大的语句,找到异常语句

前提,Hana-studio中开启了耗用大的语句追踪 在这里插入图片描述 此处我们设置的暂时是30秒以上 在这里插入图片描述 在HANA-STUDIO中,使用SQL如下,注:此处仅查询出错的语句 ERROR > 0 ,否则会把所有耗时语句都找出来,稍微难找一些。

SELECT "HOST", "PORT", "CONNECTION_ID", "TRANSACTION_ID", "STATEMENT_ID", "DB_USER", "APP_USER", "START_TIME", "DURATION_MICROSEC", "OBJECT_NAME", "OPERATION", "RECORDS", "STATEMENT_STRING", "PARAMETERS", "ERROR_CODE", "ERROR_TEXT", "LOCK_WAIT_COUNT", "LOCK_WAIT_DURATION", "ALLOC_MEM_SIZE_ROWSTORE", "ALLOC_MEM_SIZE_COLSTORE", "MEMORY_SIZE", "REUSED_MEMORY_SIZE", "CPU_TIME" FROM "PUBLIC"."M_EXPENSIVE_STATEMENTS" WHERE ERROR_CODE > 0 ORDER BY START_TIME DESC;

发现8:48分,有一条语句因为内存耗用过大,失败,执行时长406秒,该语句在29日下午16点43分也执行过一次,与DB02监控中记录吻合 在这里插入图片描述 有问题的语句如下,该语句使用MSEG表2次关联,此次查询未输入日期范围:

select a1.MATNR, a3.MAKTX, a1.CHARG, --批次 to_char(A1.BUDAT_MKPF,'yyyy-MM-dd') as indateymd,--批次对应入库日期 a1.MENGE as pcmenge,---批次对应入库数量 a2.BWART, a2.LIFNR,---供方 a2.MENGE, a2.MBLNR from H4P.saphanadb.NSDM_V_MSEG a1 left join H4P.saphanadb.NSDM_V_MSEG a2 on a1.CHARG=a2.CHARG and a1.MATNR=a2.MATNR and a2.BWART!='101' left join H4P.saphanadb.MAKT a3 on a1.MATNR=a3.MATNR and a1.mandt=a3.mandt where a1.mandt=800 and a1.BWART='101' and length(a1.matnr)>1 and 1=1 ${if(len(MATNR)==0,"","and a1.MATNR like '%"+MATNR+"%'")} and 1=1 ${if(len(CHARG)==0,"","and a1.CHARG like '%"+CHARG+"%'")} order by a1.MATNR,a1.BUDAT_MKPF,a2.BUDAT_MKPF 5.分析语句异常原因

在测试环境还原,确认该语句Join后的条数巨大,执行过程中占用的内存肯定会非常大。 在这里插入图片描述

6.对策1:优化SQL,降低运行时耗用内存

通过限制取数范围,补充缺少的join条件等。

7.对策2:优化Hana参数,对单SQL语句执行限制最大内存 7.1 打开HANA内存资源追踪

Hana-studio 配置参数,打开内存资源追踪 在这里插入图片描述 2个参数 enable_tracking/memory_tracking 为on状态 在这里插入图片描述

7.2 设置单语句内存限制

有如下3个相关参数: statement_memory_Limit 限制单个SQL最大执行内存,根据公司数据量/程序现状设置,保障系统和正常业务能够执行,此处我们设置150G statement_memory_Limit_threshold 启用单语句限制的门槛,为百分比,即当系统实时耗用内存占比达到这个比例时,才启用单语句内存限制 total_statement_memory_limit,限制所有SQL使用的总内存,此处我们暂时没有用 在这里插入图片描述

8. 参考资料 SAP帮助文档,设置SQL内存限制

Setting a Memory Limit for SQL Statements



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有