首页 > 代码库 > 关于Oracle程序块(主要为sql)优化方法小结

关于Oracle程序块(主要为sql)优化方法小结

 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)优化方法小结