在一个已经运行多年的 SAP S/4HANA 系统里,性能问题很少单纯来自某一条 ABAP 语句。很多时候,SQL 本身没有明显问题,CDS View 的关联关系也设计得比较合理,但某些页面、接口或者批处理程序仍然会反复读取同一批基础数据,或者一遍又一遍地执行相同的聚合计算。
这类场景很容易把开发人员带到一个熟悉的方向,继续修改 CDS View,增加过滤条件,调整 Join,减少 Association,甚至直接进入 SAP HANA 层研究执行计划。
SAP 提供的 Tuning Object 则给出了另一条思路。
Tuning Object 可以在不改变业务数据模型语义的情况下,为现有数据模型附加运行时技术设置。业务模型继续描述数据是什么、字段之间是什么关系、哪些数据允许访问,而 Tuning Object 专门处理另一个问题,系统应该怎样更高效地运行这个模型。
SAP 官方将 Tuning Object 定义为一种 Repository Object,它为另外一个 Repository Object 定义技术设置,并且可以独立于被调优对象创建、激活和传输。当前体系中主要可以看到 ABAP Tuning Object 和 HANA Tuning Object 两大方向。前者主要面向 AS ABAP 上的 CDS Entity 运行时行为,后者则通过 ABAP Dictionary 管理 SAP HANA 数据库层面的技术设置。
这个设计看起来只是把配置拆成了另一个开发对象,实际上它对现代 SAP 数据模型的可维护性相当重要。
假如一个 CDS View 同时承担业务语义、授权控制、UI 元数据、数据库优化提示、缓存策略和环境差异配置,那么这个 CDS View 很快就