"为什么同样表结构在不同机器上执行计划不一致"?比如在机器A上所有的表的执行计划都走索引.
而在机器B上却是有的表走索引,有的表不走索引.找过DBA,他说两机器配置是一样的.
现在很晕啊.
也不知道这位DBA大哥说的是不是正确的.来这里请大家帮帮忙.
大家都有什么见解都说出来.也好讨论一下,也为了解决我的问题.
谢谢大家啊!!!
而在机器B上却是有的表走索引,有的表不走索引.找过DBA,他说两机器配置是一样的.
现在很晕啊.
也不知道这位DBA大哥说的是不是正确的.来这里请大家帮帮忙.
大家都有什么见解都说出来.也好讨论一下,也为了解决我的问题.
谢谢大家啊!!!
查询表最后一次分析的时间点还有,两个数据库的优化模式是否一致呢?
执行计划里面是否都是有cost值?
select TABLE_NAME,LAST_ANALYZED from all_tables where table_name=upper('yourtablename');
结果贴出来看看
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_dynamic_sampling integer 1
optimizer_features_enable string 9.2.0
optimizer_index_caching integer 0
optimizer_index_cost_adj integer 100
optimizer_max_permutations integer 2000
optimizer_mode string CHOOSEoptimizer_mode = first_row
optimizer_mode = all_rows
optimizer_mode = choose 的时候,如果sql from 子句后面任何一个的表或表的索引带有statictics(dba_tables.last_analyzed 字段非空),则采用cbo,否则采用rbo。例如:
Select last_analyzed,table_name from dba_tables where table_name in ('SAS_COLLECT', 'SAS_EMPLOYEE', 'SAS_GROUP',’ PSCP_SMS_SENT’)
若结果为:
LAST_ANALY TABLE_NAME
---------- ------------------------------
SAS_COLLECT
10-10月-05 SAS_EMPLOYEE ――则整个sql语句为CBO优化模式
SAS_GROUP 使用了hints的sql必定是cbo!
 使用了ordered提示,必定是cbo!如:/*+ORDERED*/
SQL> show parameter optimizer;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_dynamic_sampling integer 1
optimizer_features_enable string 9.2.0
optimizer_index_caching integer 0
optimizer_index_cost_adj integer 100
optimizer_max_permutations integer 2000
optimizer_mode string CHOOSEB库结果
SQL> show parameter optimizer;B库结果为空.
SQL> show parameter optimizer;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_dynamic_sampling integer 1
optimizer_features_enable string 9.2.0
optimizer_index_caching integer 0
optimizer_index_cost_adj integer 100
optimizer_max_permutations integer 2000
optimizer_mode string CHOOSE
和A是一样的
内容如下SQL> exec dbms_stats.gather_table_stats (rep_hlj=>'cch',tm_f_subscrb=>'cch_interactions_motive',degree=>2,cascade=>TRUE);begin dbms_stats.gather_table_stats (rep_hlj=>'cch',tm_f_subscrb=>'cch_interactions_motive',degree=>2,cascade=>TRUE); end;ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GATHER_TABLE_STATS'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
exec dbms_stats.gather_table_stats (ownname=>'rep_hlj',tabname=>'tm_f_subscrb',degree=>2,cascade=>TRUE);你执行即可
误会了这段代码是什么作用啊!跑起来很慢啊.===这段代码执行后,将表中数据truncate后,执行计划会不会改变.