SQL優化----dbms_sqltune詳解(1)

dkey發表於2015-05-20

SQL優化----dbms_sqltune詳解(1)

--轉載http://blog.sina.com.cn/s/blog_61cd89f60102edi3.html

作為ORACLE DBA對SQL優化是必備的技能,常用的方法就是看執行計劃,加hint或者修改SQL寫法,但現實的工作中,往往修改應用的SQL是非常困難的,特別是對電信、銀行這個行業,修改應用程式過程十分繁雜,有沒有辦法不修改SQL就可以達到優化SQL執行計劃的方法呢?答案是肯定的,從ORACLE 10g開始ORACLE提供了自動優化功能,經過一段時間的總結運用,和大家分享一下如何運用DBMS_SQLTUNE對SQL進行優化。

    在實際工作中,我們常遇到三種情況下的SQL型別的SQL優化

    1.完整的SQL語句,無繫結變更(最簡單的一種,也是不常見的一種)

    2.通過AWR獲得的SQL語句,這種SQL有繫結變數

    3.在V$SQL不存在的SQL語句

    針對以上三種情況的優化,和大家分享一下我的優化語句,既然要用這個包,必須要有相應的許可權

一、執行DBMS_SQLTUNE所需要的許可權

    CREATE ANY SQL_PROFILE,

    DROP ANY SQL_PROFILE

    ALTER ANY SQL_PROFILE

    因此要想普通使用者執行DBMS_SQLTUNE包進行優化,需要賦相應的許可權

二、無繫結變數SQL的優化

    這種是最簡單的一種,通常開發的同事用的比較多,詳細SQL如下:

執行優化任務:

declare
  my_task_name VARCHAR2(30);
  my_sqltext   CLOB;
BEGIN
  my_sqltext   := 'select * from orabpel.cube_scope';
  my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_text    => my_sqltext,
                                                 user_name   => 'orabpel',
                                                 scope       => 'COMPREHENSIVE',
                                                 time_limit  => 60,  --優化限時60s
                                                 task_name   => 'wxw_sql_tuning_task',
                                  

相關文章