一、背景
有时候sql执行的时候并没有去走最优的执行计划,如果期间没有对表和索引进行过变更,这个时候就需要我们人工介入,将sql绑定到最优的执行计划上来。
二、删除执行计划的sql_profile
sql_profile主要用于绑定执行计划,并不是所有sql都有sql_profile,也并不是有sql_profile的sql就一定在使用sql_profile,判断当前待绑定sql当前是否在使用sql_profile,执行以下查询:
找出sql当前在用的sql_profile
SELECT name profile_name
FROM dba_sql_profiles
WHERE name LIKE '%&sql_id%';
若查询返回为空,则当前sql并不在使用sql_profile,直接至三、绑定执行计划即可。若有,则执行以下命令删除绑定执行计划的sql_profile:
删除sql_profile
exec dbms_sqltune.drop_sql_profile('&profile_name');
三、绑定执行计划
执行脚本 coe_xfr_sql_profile.sql,按脚本提示输入sql的sql_id以及待绑定的执行计划(Plan Hash Value),脚本运行结束后会生成一个绑定执行计划的sql脚本,执行即可。
四、关于清除sql的执行计划
exec dbms_shared_pool.purge('adress,hash_value','C');
其中的address和hash_value可以通过查询视图v$sql或者v$sqlarea获得。
网友评论