zoukankan      html  css  js  c++  java
  • 关于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优化有时候是需要根据经验进行优化的。

    仅供参考。

    本文原创,禁止转载!


           

           

           

  • 相关阅读:
    近期文章与教程和其他情况说明
    Python从入门到精通--课程目录
    第四天:创建型模式--原型模式
    python api链接数据库
    Delphi 实现简易语音发音(基于TTS方式)
    delphi下运行vbscript脚本
    使用PaxScript为Delphi应用增加对脚本的支持
    delphi与javascript互通
    奇技淫巧之Delphi和JavaScript互通
    在delphi中执行javascript代码
  • 原文地址:https://www.cnblogs.com/wind-man/p/6719858.html
Copyright © 2011-2022 走看看