在 SAP HANA 数据库的性能分析工作中,我们经常遇到一种棘手的情况,业务系统中的某个存储过程执行时间异常,但把其中执行缓慢的 SQL 语句单独复制出来,却无法重现原来的性能问题。
这种情况在复杂的企业业务系统中并不少见。
以 SAP S/4HANA 的销售订单处理为例,某个数据库存储过程需要读取销售订单、交货计划、物料库存和客户信用信息,并通过多个中间表变量逐步计算订单的可交付数量。
我们通过 SQLScript 性能分析发现,存储过程中的某条查询耗时较长,于是将这条 SQL 提取出来,放到另一个数据库环境中执行。
问题随之出现。
原来的 SQL 依赖存储过程运行期间生成的表变量,部分查询参数来自前面的计算步骤,还有一些临时数据只在当前执行上下文中存在。单独复制 SQL 文本,并不能还原这些依赖关系。
即使手工创建了结构相同的表,导入了部分生产数据,查询结果和执行计划仍然可能与原始环境存在明显差异。
我们真正需要的,不只是把一条 SQL 语句保存到文件中,而是把这条 SQL 执行时所依赖的数据对象、查询参数以及相关数据一并导出,建立一个能够用于后续分析的执行现场。
SAP HANA 提供的 SQLScript Query Export 功能,正是围绕这个需求设计的。
它扩展了数据库原有的EXPORT语句,可以从存储过程内部定位特定的 SQLScript 语句,在执行目标存储过程的过程中,导出相关查询及其依赖的数据对象。
对于需要分析复杂 SQLScript 逻辑的开发人员,这项功能提供了比单纯复制 SQL 文本更加完整的诊断材料。
不过,Query Expor