手工收集统计信息及立即产生新的执行计划

实际工作上用的较多的就是临时手工收集下某张表的统计信息并希望后续sql立即生成新的执行计划。方法有如下两种,推荐用dbms_stats,遇到CHAINED ROWSCLUSTER TABLE就必须使用analyze,且analyze不受任何参数限制执行后立即会清除shared pool中该对象的游标,而dbms_stats则受参数控制。

 

生产环境上是不可能去执行alter system flush shared_pool以便让sql立即生成新的执行计划的

 

 

一:SQL> analyze table my_table compute statistics;

analyze table 一般可以指定分析表、所有字段、所有索引字段、所有索引。 若不指定则全部都分析。

上面语句等价于:

SQL> analyze table my_table compute statistics for table for all indexes for all columns;

 

二:SQL>exec dbms_stats.gather_table_stats('HR','T1',cascade=>true, no_invalidate=>FALSE);

Cascade选项:默认值是DBMS_STATS.AUTO_CASCADE。手工操作时一般时候设置为true,把索引也收集了

no_invalidate选项:默认值是DBMS_STATS.AUTO_INVALIDATE。手工操作时一般时候设置为false,让之后的sql立即生成新的执行计划。

true:当收集完统计信息后,收集对象的cursor不会失效(不会产生新的执行计划,子游标)
false:
当收集完统计信息后,收集对象的cursor会立即失效(新的执行计划,新的子游标)
DBMS_STATS.AUTO_INVALIDATE:
收集后,收集对象的cursor在一段时间后失效,时间受参数_optimizer_invalidation_period控制,默认是18000秒即5小时





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30126024/viewspace-2120194/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30126024/viewspace-2120194/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值