
在 SAP S/4HANA 系统里,有一类 SQL 特别容易成为性能热点。底层表可能有几千万甚至上亿条数据,业务程序反复按照公司代码、年度、分类账、销售组织或者其他维度做SUM、COUNT、AVG之类的聚合,而且相同或者非常相似的查询会被大量并发请求重复执行。数据库当然能够算出结果。真正的问题在于,同一类昂贵计算为什么要一遍又一遍重新做。SAP HANA 本身已经是一套以内存计算为核心的数据库,但内存数据库并不等于所有 SQL 都没有成本。读取数千万条列存数据、执行过滤、完成分组、计算聚合、构造结果集,这些操作仍然需要 CPU、内存带宽以及执行引擎资源。当几十个甚至几百个请求同时计算类似结果时,重复计算带来的成本会变得非常明显。Dynamic Cache就是为这类问题准备的。在 ABAP 世界里,Dynamic Cache 是一个 ABAP Dictionary 开发对象,通过 DDIC DDL 的define dynamic cache定义。它属于 SAP HANA tuning object 的一部分,相当于 ABAP Dictionary 为 SAP HANA Dynamic Result Cache 提供的一层开发模型封装。开发人员不需要直接在数据库层手工维护相关 SQL View 和 Cache 定义,而是可以像维护其他 DDIC 对象一样,把缓存定义纳入 ABAP Repository、语法检查、激活以及 Transport Request 生命周期。SAP 官方文档也明确把 DDIC Dynamic Cache 定义为 SAP