SQL优化篇--绑定执行计划(手工制造正确执行计划)

生产数据库中经常出现SQL语句走错执行计划的情况,如果该sqlid还有其他高效的执行计划,可以通过coe_xfr_sql_profile.sql脚本进行绑定,但是如果sqlid没有高效的执行计划,就需要通过自己手工生成一个执行计划(通过加hint,或者其他方法),然后将手工生成的 执行计划绑定到生产中运行的sqlid上,下面就演示下具体方法:
–下面SQL正常走ob.object_id列上的索引IDX1_OB
select ob.owner,ob.object_name from ob,tt where ob.object_id = tt.object_id and tt.name = ‘a255’;

通过baseline绑定到下面SQL语句的执行计划上
select /+full(ob)/ ob.owner,ob.object_name from ob,tt where /fengsongtao/ ob.object_id = tt.object_id and tt.name = ‘a255’;

1、查看当前sql的SQL_ID和PLAN_HASH_VALUE
select sql_id,plan_hash_value,sql_text,parse_calls,executions from v$sql where sql_text like ‘select ob.owner,ob.object_name from ob,tt where ob.object_id = tt.object_id and%’;

SQL_ID: cw9ykcy4nxagr
PLAN_HASH_VALUE: 4294070672

2、根据上面的SQL_ID和PLAN_HASH_VALUE生成SQL_HANDLE
–创建baseline
declare
l_pls number;
begin
l_pls := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id => ‘cw9ykcy4nxagr’,
plan_hash_value => 4294070672,
enabled => ‘NO’); --注意这里是no
end;
/
–查看生成的baseline
select sql_handle,
plan_name,
origin,
enabled,
accepted,
fixed,
creator,
optimizer_cost,
sql_text
from dba_sql_plan_baselines
where origin = ‘MANUAL-LOAD’<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值