DBMS_SQLTUNE優化SQL

it_newbalance發表於2013-02-03
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_jm9Zm
my_sqltext CLOB;ITPUB個人空間z9uGYEz9uD
BEGIN
xc6j1B `C24558279my_sqltext := 'SELECT /*+ rule */ * FROM t ORDER BY id;';ITPUB個人空間KO A7RW
my_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');

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24558279/viewspace-753852/,如需轉載,請註明出處,否則將追究法律責任。

相關文章