你知道你的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

 

你可能感兴趣的:(你知道你的Oracle用的什么优化器吗--小谈Oralce的优化器设置)