关于optimizer_max_permutations参数

浏览: 1864

刚刚做了个10053事件跟踪我的一段小SQL

发现我本机数据库的optimizer_max_permutations = 2000 ,

如果这是Oracle的默认值的话,也就是说:当SQL超过6个表关联时,即便我们的统计信息、直方图都是最新的,生成的执行计划就不一定是最优的。

因为如果有n个表就会有n!个连接顺序。

如A B C三个表,则关联顺序有:

A + B + C

A + C B

B A C

B C A

C A B

C B A


Oracle CBO在生成执行计划的原理是将所有可能的路径都遍历出来,计算出COST最小的一种路径选为finally plan

optimizer_max_permutations就是用来限制CBO执行过程中最大的计算join顺序的。

所以当参数被限制为2000时

7个表的SQL,CBO就已经无法遍历所有表的关联顺序(7!= 5040),无法遍历所有的情况,就无法判断哪种情况最优。

推荐 5
本文由 老头子 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册