【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.1.0.0
【问题描述】当执行一条sql时,我想看到它每个算子的真实耗时,而不是explain显示的预估时间。我尝试执行后用 v$plan_cache_plan_explain 查看,但是显示算子的cost也是预估的代价,而且没有字段显示算子实际执行时间。那么我应该用什么办法查找到真实耗时,类似pg上explain analyze所展示的信息?
【复现路径】执行一条sql,比如select count(*) from t1,如何查看算子实际执行时间?
【附件及日志】
使用 V$OB_SQL_AUDIT
或 GV$OB_SQL_AUDIT
来试试呢
SQL Trace 可以查看执行的 SQL 请求执行过程中调用链路情况,以及链路中各阶段耗时情况
这个方法可以看到计划和执行阶段的耗时,但是执行阶段里面各个算子的耗时还是看不到。比如这个sql: select b from sorttest_int4_1e where a>10 order by b limit 10; 里面包含scan,sort,这些算子实际耗时各是多少有办法统计吗? 我希望能看到类似这个视图提供的各算子信息,但希望是实际执行耗时而不是预估 v$plan_cache_plan_explain
-
(g)v$plan_cache_plan_stat这张视图是统计维度的执行计划各个算子的执行时间,如果某条SQL只执行一次的话,可以通过这张视图查。
-
如果是一条SQL执行了很多次,就不能用上面的方式来查了。这里面再介绍另一个视图。v$sql_plan_monitor 这张视图是算子维度的,参考文档:OceanBase分布式数据库-海量数据 笔笔算数 不过这张视图不会收录所有的执行SQL,一般是并行的SQL才会进入。
1 个赞
接上一条回复的第二点,如果是并行SQL的话,推荐用obdiag 来分析,OceanBase分布式数据库-海量数据 笔笔算数
obdiag gather scene run --scene=observer.perf_sql --env "{db_connect='-hxx -Pxx -uxx -pxx -Dxx', trace_id='xx'}"
这条命令可以一次帮你收集所有信息,同时里边会产生一份html的报告,里面有所有算子基于时间维度、机器维度的耗时信息。大概长这样。