一模一样的SQL重新解析即重新生成执行计划的方法

1.对SQL中的对象analyze收集统计信息
SQL> analyze table TEST_OWNER.TEST_TABLE compute statistics;

2.对SQL中的对象gather_table_stats加no_invalidate=>FALSE收集统计信息
SQL> exec dbms_stats.gather_table_stats('TEST_OWNER','TEST_TABLE',no_invalidate=>FALSE);

3.SQL长时间没有执行,被刷出SHARED POOL或直接刷新共享池,再次执行时需要重新解析。
SQL> alter system flush shared_pool;

4.在SQL引用的对象上执行了DDL操作,甚至是结构发生了变化,比如新增一个索引或comment
SQL> comment on column TEST_TABLE.TEST_COLUMN is 'column is test for sqlplan';

5.对SQL引用的对象进行了权限更改
SQL> grant all on TEST_OWNER.TEST_TABLE to TEST_OWNER2

6. 还可以单独清除这个sql在共享池中的信息
Exec DBMS_SHARED_POOL.PURGE('v$sql.ADDRESS,v$sql.HASH_VALUE','c')
虽说10G开始sql_id等同于address+hash value的作用,但此处不能使用sql_id



TEST_OWNER用户执行select * from TEST_TABLE已经N次了
以上6项任意一项执行后,TEST_OWNER用户再次执行select * from TEST_TABLE都会重新解析,即下面语句中的EXECUTIONS为1,不再是N+1
select sql_id,first_load_time,last_load_time,last_active_time,EXECUTIONS,child_number,sql_text from v$sql where PARSING_SCHEMA_NAME='TEST_OWNER' and sql_text like 'select * from TEST_TABLE'



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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值