關於Oracle程式塊(主要為sql)最佳化方法小結

來源:互聯網
上載者:User

標籤:targe   簡單   列表   task   images   set   使用   報告   exe   

 Oracle最佳化本身就是一件難度比較大的事情,所涉及的事情方方面面。下面說一下我的最佳化經驗(僅限於初學者使用):

 很多書上說的最佳化經驗,都包括索引、表結構、標量子查詢以及資料庫層面的最佳化,但是80%的最佳化都可以是語句級的最佳化。最佳化的對象包括:procedure、function及Sql。

 對於對Oracle資料庫很熟悉的人來說,最佳化基本不需要藉助任何工具就可以做到。但下面我說兩個工具用來進行Sql最佳化:dbms_profile和advisor兩個工具。

 當然也可以通過執行計畫進行最佳化。

 最後會簡單闡述ADDM報告需要重點關注的幾個地方。

1、dbms_profile這個工具在10g之前是沒有安裝的,需要手動執行$ORACLE_HOME/rdbms/admin/proftab.sql進行初始化。這個工具是用來收集procedure和function基於每條語句的所花費的時間,是概數。

2、advisor工具是針對每條sql語句,通過Oracle內建的最佳化器給出最佳化建議。

那麼對於兩個工具可以配合使用,使用dbms_profile進行對象過程語句的篩選,通過advisior進行語句級的最佳化。

一、dbms_profile的使用先不進行說明,以後詳解。

二、advisior使用舉例

  1)定義task任務     

        declare
            my_task_name varchar2(30);
            my_sqltext clob;
            begin
               my_sqltext:=‘select a.*,b.deptno from emp a,dept b where a.deptno=b.deptno‘;
               my_task_name:=dbms_sqltune.create_tuning_task
                                       (sql_text => my_sqltext,                    ---最佳化的語句
                                        user_name => ‘SCOTT‘,                     ---最佳化的所在使用者
                                        scope => ‘COMPREHENSIVE‘,              ---最佳化範圍(COMPREHENSIVE或者limited)
                                        time_limit => 60,                               ---最佳化的時間限制
                                        task_name => ‘tuning_sql_text‘,         ---任務名稱
                                       description => ‘task to‘);                     ---任務描述
            end;

    2)執行任務進行最佳化分析

        begin dbms_sqltune.execute_tuning_task(‘tuning_sql_text‘); end;

   3)查看是否已經得到結果
        select * from user_advisor_tasks where task_name=‘tuning_sql_text‘;

   4)查看最佳化結果
       select dbms_sqltune.report_tuning_task(‘tuning_sql_text‘) from dual;

       下面結果最佳化得到的結果,由於語句比較簡單,所以最佳化器沒有給出結果。

      

 三、ADDM報告簡單說明

    1)產生addm報告

        有兩種方法,一是通過em工具產生;二是通過命令產生addm報告。以下是通過em工具產生的報告。

        

       得到的結果如:

       

    2)最佳化需要考慮的幾點是 a、Memory Target, b、I/O, c、Wait stats,在ADDM報告中就是如下幾點

      

     需要觀測的是值異常的一些。

四、使用執行計畫進行最佳化

     可以使用執行計畫進行sql的最佳化,方法有很多。可以通過dbms_xplan、plsql裡的計劃或者cmd中的set autotrace on等。

     使用執行計畫進行sql最佳化需要瞭解的知識比較多:

     1)瞭解位元影像索引、雜湊索引和b樹索引的區別及應用範圍

     2)當然定界分割、散列分區、列表分區以及複雜的複合分區特點

     3)sql語句解析順序、對索引的解析範圍

     4)對hint的瞭解及應用

     5)表中列索引的建立和索引空間和資料空間的規劃等

     才可以通過執行計畫對sql進行更好地最佳化。

最佳化是一個非常複雜但同樣又是一件比較簡單的事情,其中涉及到的知識非常多,本文只是簡單列舉了常用的幾項最佳化方法,對於sql最佳化有時候是需要根據經驗進行最佳化的。

僅供參考。

本文原創,禁止轉載!

 


       

       

       

 

關於Oracle程式塊(主要為sql)最佳化方法小結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.