在 SAP HANA 数据库中排查存储过程的性能问题时,我们经常会遇到一种情况,某个存储过程执行了十几秒,但单独检查其中的 SQL 语句,却没有找到明显的慢查询。查看数据库的 CPU 使用率,可能没有持续处于高位,检查内存占用,也未必能够直接定位到异常操作。即使通过 SQL 执行计划发现了一个耗时较长的算子,也很难判断它究竟属于存储过程中的哪一段业务逻辑。
这种情况在复杂的 SQLScript 程序中并不少见。
一段完整的 SQLScript 程序可能包含多个表变量赋值、条件判断、循环、SQL 查询以及嵌套存储过程调用。数据库执行这些语句时,还会涉及编译、执行计划生成、线程调度、并行计算以及中间结果物化等内部操作。
传统的 SQL 执行计划主要帮助我们理解一条 SQL 语句的执行过程,但对于整个 SQLScript 程序的运行过程,仅仅分析单条 SQL 往往不够。
我们需要知道,数据库花费了多少时间执行 SQLScript 自身的控制逻辑,多少时间用于真正执行 SQL,多个操作之间是否存在并行关系,哪些操作产生了较大的中间结果,以及嵌套调用究竟把执行时间消耗在了哪里。
SAP HANA 提供的 SQLScript Plan Profiler 正是为这类性能诊断工作设计的。
它能够在存储过程执行期间采集各个操作的运行信息,并将执行时间、CPU 时间、内存使用情况、线程信息以及操作之间的父子关系组织成结构化的分析结果。
其中,M_SQLSCRIPT_PLAN_PROFILER_RESULTS是保存和查询这些分析结果的重要系统监控视图。
通过这个视图,我们不仅能够观察整个存储过程的执行情况,还能深入到具体的 SQLScr