用 SqlOptTime trace 给 SAP HANA 查询编译慢做一次秒表级拆解
在 SAP HANA 项目里,大家聊性能时很容易把注意力都放在execution:CPU 飙高、I/O 抖动、线程长跑、结果集物化太大导致out of memory……但现实里还有一类非常“隐身”的慢:查询还没跑起来,光在compile阶段就卡了十几秒甚至几分钟。你在应用端看到的现象往往是接口超时、对话框转圈、批处理像“没开始就结束不了”,可数据库里真正忙的,是优化器在反复推演计划。
SqlOptTime trace(也常被称作SQL Optimization Time Debug Trace)正是为这种场景准备的工具:它不像SqlOptStep trace那样把每一步优化树的形状细节都铺满日志,而是用“秒表”的方式,告诉你优化过程每一个阶段、每一条重写规则、每一类枚举器到底花了多少时间。你可以把它理解为:把优化器的黑盒拆成一段段计时分段,定位“编译慢到底慢在什么环节”。
下文会从优化器的工作流讲起,逐步落到SqlOptTime trace的适用边界、解读方法,并结合本地部署的 HANA 与 HANA Cloud 的常见排查路径,给出更贴近真实项目的案例与改写策略。
认识问题本体:编译慢和执行慢不是一回事
在 SAP HANA 的语句生命周期里,compile与execute是两个阶段:前者是优化器把 SQL 解析、改写、枚举并生成执行计划;后者才是算子真正跑在引擎上。很多监控工具会把这两段时间合在一起展示
