Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

0

好友

5

主题
1#
发表于 2013-10-25 13:56:28 | 查看: 2723| 回复: 3
本帖最后由 KFC 于 2013-10-25 13:58 编辑

11.2.0.3+aix6.1

select /*+ full(a1) */ count(1) from a1
   where created=to_date(:1,'YYYYMMDDHH24MISS');

情况:在程序端绑死了HINT,在共享池中只存在一种执行计划(AWR历史记录也是)
现在的目的是:修改执行计划为:
select /*+ index(a1,idx_created) */ count(1) from a1
   where created=to_date(:1,'YYYYMMDDHH24MISS');

还是没有想到很好的办法,来这里咨询下;


计划使用工具:BASELINE

2#
发表于 2013-10-25 13:59:28
1、同学你的HINT加的有问题
2、 所谓绑定 你是要绑现在使用的执行计划, 还是别的?
3、 你的语句很简单,考虑到created可能是 数据分布倾斜的字段 你可以关闭 bind peek 来稳定执行计划,则绝大多数情况都很问题

4、 对于11203 我建议你参考我 关闭11g惹祸特性的帖子

回复 只看该作者 道具 举报

3#
发表于 2013-10-25 14:01:09
本帖最后由 KFC 于 2013-10-25 14:05 编辑

O,这条SQL只是个例子,真实生产环境有区别,
我的目的是想有个解决思路;
绑定修正后的执行计划 ;

也就是,在内存中修正再转入到BASELINE
LOAD_PLANS_FROM_CURSOR_CACHE
DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
sql_id IN VARCHAR2,  --构造的修正SQL
plan_hash_value IN NUMBER := NULL,  --构造的修正SQL
sql_text IN CLOB,  --原始SQL
fixed IN VARCHAR2 := 'NO',
enabled IN VARCHAR2 := 'YES')
RETURN PLS_INTEGER;

现在的问题在于构造上。!

回复 只看该作者 道具 举报

4#
发表于 2013-10-26 11:50:38
执行一下
select /*+ index(a1,idx_created) */ count(1) from a1
   where created=to_date(:1,'YYYYMMDDHH24MISS');
得到sql_id, plan_hash_value , 带入
LOAD_PLANS_FROM_CURSOR_CACHE
DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
sql_id IN VARCHAR2,  --构造的修正SQL
plan_hash_value IN NUMBER := NULL,  --构造的修正SQL
sql_text IN CLOB,  --原始SQL
fixed IN VARCHAR2 := 'NO',
enabled IN VARCHAR2 := 'YES')
就可以了

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-6-1 19:27 , Processed in 0.048041 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569