在排查 SAP HANA 性能问题时,很多人都会有一种似曾相识的挫败感:同一条 SQL,有时 200 ms 结束,有时 20 s 才返回;PlanViz 里看起来像是执行阶段在慢,可你把表扫描、Join 顺序、并行度都检查了一遍,仍然找不到罪魁祸首。更麻烦的是,一些看似执行慢的现象,本质上可能是编译慢:SQL 还没真正跑起来,就在优化、编译、生成计划的过程中耗掉了大量时间。要把这类问题拆解清楚,最有效的手段之一,就是把SQL 优化的过程从时间维度切开,精确看到从编译开始到执行开始之间究竟发生了什么,以及每一段分别花了多久。SAP HANA 提供的SQL optimization trace家族里,SqlOptStep更像是一台显微镜,告诉你优化树每一步怎么变形;而SqlOptTime更像是一块秒表,告诉你每一步到底耗了多少时间。两者配合起来,常常能把那些表面像执行慢的问题当场抓现行。为什么要把编译与执行分开看HANA 的 SQL 处理链路里,编译并不只是语法解析这么简单。优化器会做规则改写与代价枚举等一系列工作,最终生成可执行计划;这也是为什么SQL optimization step debug trace会强调它记录的是查询优化树在每一步的形态与内容,并且覆盖规则改写与基于代价的枚举这两大类优化动作 (