使用SQL Profile稳定执行计划

SQL Profile主要是Oracle 10g的工具

可分为两种类型:

1.Automatic 类型

1). 创建自动调整任务
declare
	my_task_name varchar2(30);
	my_sqltext CLOB;
begin
	my_sqltext := 'SQL_TEXT-XXXX';    #sql文本
	my_task_name := dbms_sqltune.create_tuning_task(
		sql_text => my_sqltext,
		user_name => 'XXXXX',    #用户名
		scope => 'COMPREHENSIVE',   #调整范围
		time_limit => 60,    #调整时限
		task_name => 'my_sql_tuning_task',   #任务名称
		description => 'Task to tune a query on table XXXX');   #说明
end;
/
2).执行自动调整任务
begin
	dbms_sqltune.execute_tuning_task(task_name => 'my_sql_tuning_task' );
end;
/
3).查看自动调整任务的调整结果
select dbms_sqltune.report_tuning_task('my_sql_tuning_task') from dual;
4).使调整结果生效
execute dbms_sqltune.accept_sql_profile(task_name => 'my_sql_tuning_task_2',task_owner => 'TEST',replace => TRUE);

2.Manual类型

如现有一条SQL需要优化,但是不能改变其sql_text:

1).从MOS上下载coe_xfr_sql_profile.sql,此脚本用于指定SQL的执行计划的Outline Data的Hint部分,来创建Manual类型的SQL profile。
2). 跑coe_xfr_sql_profile.sql
SQL> @coe_xfr_sql_profile.sql

输入:需要优化的SQL_ID和其PLAN HASH VALUE
输出:得到一个脚本

3). 再跑coe_xfr_sql_profile.sql
SQL> @coe_xfr_sql_profile.sql

输入:针对SQL加了Hint达到优化效果的SQL_ID和其PLAN HASH VALUE
输出:得到一个脚本

4). 将第3步得到的sql里的h := SYS.SQLPROF_ATTR部分替换掉第2步得到的sql里的统一部份
5). 执行修改后的第2步的sql,即可以不改变sql_text的条件下优化SQL

你可能感兴趣的:(使用SQL Profile稳定执行计划)