构想下一代优化器MBO:MachineLearning Based Optimizer

 

2016-06-10  朱洁  hadoop技术学习


 

熟悉ORACLE数据库的人,对RBO/CBO肯定很熟。

 

Rule Based Optimizer(RBO)基于规则
Cost Based Optimizer(CBO)基于成本,或者讲统计信息

 

ORACLE 提供了CBO、RBO两种SQL优化器。CBO在ORACLE7 引入,但在ORACLE8i 中才成熟。ORACLE 已经明确声明在ORACLE9i之后的版本中(ORACLE 10G ),RBO将不再支持。因此选择CBO 是必然的趋势。

 

RBO自ORACLE 6版以来被采用,有着一套严格的使用规则,只要你按照它去写SQL语句,无论数据表中的内容怎样,也不会影响到你的“执行计划”,也就是说对数据不“敏感”;CBO计算各种可能“执行计划”的“代价”,即cost,从中选用cost最低的方案,作为实际运行方案。各“执行计划”的cost的计算根据,依赖于数据表中数据的统计分布,ORACLE数据库本身对该统计分布并不清楚,必须要分析表和相关的索引(使用ANALYZE 命令),才能搜集到CBO所需的数据。

 

RBO是一种呆板、过时的优化器,它只认规则,对数据不敏感。毕竟规则是死的,数据是变化的,这样生成的执行计划往往是不可靠的,不是最优的,CBO 相比RBO进步很大。

 

CBO/RBO都是在交易数据中演变成来的,CBO只能统计静态的数据,比如在分析领域的ETL计算,还有很多外部条件,比如数据量和资源的关系,任务之间的相互影响,高SLA任务保障等等,这些通过机器学习算法就可以解决静态统计不能解决的一些问题,因此我在想未来的优化器应该是MBO:MachineLearning Based Optimizer。

 

大家觉得呢?

 

 
 

微信扫一扫
关注该公众号

猜你喜欢

转载自jiezhu2007.iteye.com/blog/2305863