CBO疑问

请问有什么命令,或者操作可以看到CBO的选择过程,基于那些数据做的选择。
为什么选择了tikv或者为什么选择了tiflash。
这个选择的过程和选择基于的数据是否可以有什么方式获取,或者打印出来。

1 个赞

CBO 就是代价选择,选择资源损耗最小的一种方案,一般是贪心算法

没有命令可以支持直接满足你的需求,,不过可以通过 explain SQL 来对执行计划进行解析,可以查阅相关的算子下推和决策结果

另外,抽样和数据统计的准确性也会影响这个决策结果,满足较高的准确度(健康度),执行计划会更准确。

然后,还有 hit 的方式,可以满足你对 SQL 强制 走 tikv 或者 tiflash 的要求,也可以通过 explain 进行解析;参考文档:
https://docs.pingcap.com/zh/tidb/stable/optimizer-hints
https://docs.pingcap.com/zh/tidb/stable/control-execution-plan#控制执行计划
https://docs.pingcap.com/zh/tidb/stable/use-tiflash#手工-hint
https://docs.pingcap.com/zh/tidb/stable/sql-faq#可以使用-hints-控制优化器行为吗

以上希望对你有所帮助!

4 个赞


即使手动hint指定用tiflash,也不一定真多走tiflash,不知道手动hint的用处是什么。
所以想知道有什么办法可以打出来cbo依据数据,这样就知道为什么了。

2 个赞

手动指定就一定会走 tiflash 了,除非你采用默认策略让系统自动判断
这个通过 explain 就可以看到 结果了,或者你需要实际的结果,也可以采用 explain analyze 的方式

1 个赞

5.4.0版本。默认是tikv,tidb,tiflash。实测,手动hint使用tiflash,explain之后有几率出现走了tikv。
文档也说了,手动hint可以指定engine,但是最后还是cbo在指定engine范围内做选择。

没有类似10053 trace, 有个trace命令可以看执行过程

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。