SAP系统月结当天,S4系统报错 “DBSQL_SQL_INTERNAL_DB_ERROR" .
查ST22得以下错误
Database error number: SQL CODE :2048
Database error text: " SQL message: column store error: [2617] executor: plan operation execution failed with an exeception"
以及
Database error number: SQL CODE :2048
Database error text: "SQL message: column store error: search table error: [9] Memory allocation failed"
在网上查到以下处理方法,提示清除SQL语句的内存限制。
同时在数据库系统中找到了内存的DUMP文件,为单个SQL语句使用内存超过了200GB,导致了DUMP。(曾经因单个SQL语句耗尽所有内存而导致系统崩溃,故设置了200G的限制)
将SQL限制大小从200GB改为300GB后,此报错消失。
之后,顾问反应系统事务CON2变的缓慢。
用STAD查询顾问运行的记录,顾问帐号运行了CON2十分钟(之后强制中断了事务),时间都消耗在Processing time,判断为应用端问题,但是检查了相关的点,都没有找到异常。
后用户继续反应速度慢。再次查询用户的运行记录,用户的运行记录则都消耗在了DB上。
检查DB状态,内存在修改限制后,最大使用量有了较大的提升,CPU负载偶尔达到70%,SAP系统内其它操作速度正常。
判断为单个事务的问题。
在studio检查EXPENSIVE 语句,查询到多条COSS的语句,运行时长都超过了500秒。
通过statement_hash查询host_sql_plan_cache,发现在此SQL在内存限制调整后的执行时间,由原来的100多秒增加至500多秒。
判断为物理环境变更后,SQL的执行计划没有做相应的自动更新。
处理方法为手动重新编译此执行计划:
alter system recompile sql plan cache entry '<PLAN ID>'
可以在m_sql_plan_cache中的有效性中观察到变更。
重新编译后,用户回馈CON2的速度变正常。
查询plan历史表,平均时间由之前的500+秒,下降至8秒左右。