DBMS_SQLTUNE优化SQL是在oracle10g才出来的新特性,使用它能很大程度上方便对sql的分析和优化。执行DBMS_SQLTUNE包进行sql优化需要有advisor的权限:
sys>grant advisor to GENLOT_ONLINE;
Grant succeeded.
使用DBMS_SQLTUNE包进行SQL优化,大致可以分为四个步骤:
创建优化任务
执行优化任务
显示优化任务的结果
按照建议执行优化
执行优化任务
显示优化任务的结果
按照建议执行优化
一、创建优化任务
使用dbms_sqltune.create_tuning_task函数来创建优化任务
函数的返回值为创建的任务名。下面我们创建一个叫 aning_tuning_task 的任务:
DECLARE
my_task_name VARCHAR2(30);
my_sqltext CLOB;
BEGIN
my_sqltext := 'SELECT /*+ rule */ * FROM t ORDER BY id;';
my_task_name := dbms_sqltune.create_tuning_task (sql_text=> my_sqltext,
bind_list => null,
user_name => 'GENLOT_ONLINE',
scope => 'COMPREHENSIVE',
time_limit => 60,
task_name => 'aning_tuning_task',
description => 'Aning Tuning Task'
);
END;
/
注意:my_sqltext是难点,有的sql语句在匿名快中不认识,需要转意
二、执行优化任务
通过调用dbms_sqltune.execute_tuning_task过程来执行前面创建好的优化任务。
exec dbms_sqltune.execute_tuning_task('aning_tuning_task');
三、检查优化任务的状态
通过查看user_advisor_tasks/dba_advisor_tasks视图可以查看优化任务的当前状态。
SELECT status FROM USER_ADVISOR_TASKS WHERE task_name ='aning_tuning_task';
四、得到优化任务执行的结果
通过dbms_sqltune.report_tning_task函数可以获得优化任务的结果。
SET LONG 999999
set serveroutput on size 999999
SET LINESIZE 1000
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('aning_tuning_task') FROM DUAL;
set serveroutput on size 999999
SET LINESIZE 1000
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('aning_tuning_task') FROM DUAL;
五、删除优化任务
通过调用dbms_sqltuen.drop_tuning_task可以删除已经存在的优化任务
exec dbms_sqltune.drop_tuning_task('aning_tuning_task');
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12457158/viewspace-722212/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12457158/viewspace-722212/