利用DBMS_SQLTUNE優化SQL

cnaning發表於2012-04-25
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;

五、刪除優化任務
通過呼叫dbms_sqltuen.drop_tuning_task可以刪除已經存在的優化任務
 
exec dbms_sqltune.drop_tuning_task('aning_tuning_task');

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

相關文章