0
点赞
收藏
分享

微信扫一扫

你知道你的Oracle用的什么优化器吗--小谈Oralce的优化器设置


 


Oracle的优化器提供CBO和RBO两种方式,在9i以前的时代,8i系统都是用RBO来作为默认优化器的,
9i时,Oracle公司对Oracle整个产品进行了很大的改进,成为抢占数据库市场的武器。所有优化器
也做了很大的优化。默认情况下是用RBO作为数据库的默认优化器。

我们可以通过optimizer_mode这个系统参数来查看优化器的模式

引用:

SQL> show parameter optimizer_mode;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string ALL_ROWS




类似出现这样的记录,我这里对应的optimizer_mode的模式就是CBO的模式,而且是用最快返回所有记录的方式来优化CBO。



也不知道怎样查看所有的optimizer_mode的可选值,只好用最土的方式


SQL> alter system set optimizer_mode=ALL_ROW scope=both;


alter system set optimizer_mode=ALL_ROW scope=both


*


引用:

第 1 行出现错误:
ORA-00096: 值 ALL_ROW 对参数 optimizer_mode 无效, 它必须来自 first_rows_1000,
first_rows_100, first_rows_10, first_rows_1, first_rows, all_rows, choose, rule
之间




这里可以看到,optimizer_mode的可选值有


引用:

CHOOSE模式 默认
是一个选择模式的优化器,如果对数据库schema或者对象做个统计的话,那么会使用CBO来进行优化。如果没有的话,就是用RBO的模式



引用:

RULE模式
这个就是RBO了。更加规则来进行优化。




引用:

ALL_ROWS模式
就是我的实例中列举出来的模式,是基于cost的。而且是以用最快返回所有记录的方式来优化CBO。




引用:

FIRST_ROWS模式
也是CBO,基于cost的。和试探法相结合,查找一种可以最快返回前面少数行的方法的CBO




引用:

FIRST_ROWS_n模式
和上面的模式一样,基于cost成本的,而且是一最快的方式返回指定的前n行记录


如果需要修改的话,我们通过alter system set optimizer_mode=XXXX scope=both;的方式来进行修改

例如:


引用:

SQL>alter system set optimizer_mode=CHOOSE scope=both;


  • Inthirties关注Oracle数据库 维护,优化,安全,备份,恢复,迁移,故障处理
  • 网站:​​http://www.inthirties.com​​
  • 论坛:​​http://bbs.inthirties.com​​


 

举报

相关推荐

0 条评论