Kusto单查询中now()返回相同值 如何实现查询性能打点监控?
Kusto 查询性能打点常见问题解答
问题原因:多次调用now()返回相同值的原因
Kusto 中的 now() 函数会在查询编译阶段统一求值一次,整个查询的执行生命周期内值固定,和调用位置、执行顺序无关,且不支持修改该默认行为,因此无法通过多次调用now()实现阶段耗时打点。
可行的性能打点方案
1. 内置查询统计功能(最推荐)
无需修改查询代码,查询执行完成后,在Kusto Explorer或Azure Data Explorer Web UI的结果面板下方,打开「查询详情」/「性能」标签页即可获取全量性能数据:
- 整个查询的总执行耗时、CPU占用、内存占用
- 执行计划每个算子的分步耗时、处理行数、扫描数据量
- 客户端耗时、服务端耗时、缓存命中情况等明细维度统计
2. 拆分查询分段统计
如果需要单独验证某一段逻辑的耗时,将对应逻辑拆分为独立查询单独执行,直接查看该查询的统计耗时即可。
3. 内置函数实现查询内耗时返回
如果需要在查询结果中直接返回指定逻辑的执行耗时,可以配合get_consumption_stats()实现,示例代码如下:
// 定义要测试的目标查询逻辑 let target_logic = () { // 替换为你实际的耗时查询语句 range x from 1 to 10000000 step 1 | summarize sum(x) }; // 打点计算耗时 let start = get_consumption_stats(); target_logic(); let end = get_consumption_stats(); print 目标逻辑执行耗时 = end.Time - start.Time
4. 自定义诊断标记打点
如果需要在查询执行日志中打自定义阶段标记,可以使用trace算子,执行后可以在查询的诊断日志中查看每个标记的触发时间,示例代码如下:
trace "第一阶段逻辑开始执行" // 第一阶段逻辑 | range x from 1 to 1000 step 1 | trace "第一阶段执行完成,第二阶段开始" // 第二阶段逻辑 | extend y = x * 2 | trace "全部逻辑执行完成"
内容的提问来源于stack exchange,提问作者Rajanikanth Ragula
相关产品推荐
相关产品推荐

