使用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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值