DBMS_SQLTUNE优化
SQL是在oracle10g才出来的新特性,使用它能很大程度上方便对sql的分析和优化。执行DBMS_SQLTUNE包进行sql优化需要有advisor的权限:
sys>grant advisor to GENLOT_ONLINE;
Grant succeeded.
使用DBMS_SQLTUNE包进行SQL优化,大致可以分为四个步骤:
创建优化任务
9t"QYEX24558279执行优化任务
$tZi`&K5A*u go24558279显示优化任务的结果ITPUB个人空间 @U]g+b4@8@
按照建议执行优化
RZ9L.V5D1E24558279一、创建优化任务ITPUB个人空间o?&X:U9x
使用dbms_sqltune.create_tuning_task函数来创建优化任务ITPUB个人空间J(A4v]2Y.Y
函数的返回值为创建的任务名。下面我们创建一个叫 aning_tuning_task 的任务:
ITPUB个人空间HK"e\B]{DECLARE
A_y?JSB.h24558279my_task_name VARCHAR2(30);
ITPUB个人空间a_jm9Zmmy_sqltext CLOB;
ITPUB个人空间z9uGYEz9uDBEGIN
xc6j1B `C24558279my_sqltext := 'SELECT /*+ rule */ * FROM t ORDER BY id;';
ITPUB个人空间KO A7RWmy_task_name := dbms_sqltune.create_tuning_task (sql_text=> my_sqltext,
ITPUB个人空间:R%}C_n"Px@K bind_list => null,
ITPUB个人空间6}Ps)~4dq;l+[ user_name => 'GENLOT_ONLINE',
/R$E [^Hh24558279 scope => 'COMPREHENSIVE',
.t v.le)`SP#l24558279 time_limit => 60,
^+d)NM$M+U5S ^24558279 task_name => 'aning_tuning_task',
bQ$AeX-fR,`24558279 description => 'Aning
Tuning Task'
ITPUB个人空间P _6K n&k"mm CV );
.E F*h[y24558279END;
,]+]j/NyOf24558279/
注意:my_sqltext是难点,有的sql语句在匿名快中不认识,需要转意
)C5GEYy\ j5]t24558279二、执行优化任务
通过调用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 999999ITPUB个人空间u6u`9~TV)q J?
set serveroutput on size 999999
Fw_| |.I)[L24558279SET LINESIZE 1000ITPUB个人空间Byk7D3A]hV
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('aning_tuning_task') FROM DUAL;
s5NA$Ah f K/R24558279五、删除优化任务
通过调用dbms_sqltuen.drop_tuning_task可以删除已经存在的优化任务
exec dbms_sqltune.drop_tuning_task('aning_tuning_task');