`
cd0281
  • 浏览: 120546 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

oracle的一些调优建议(1)

阅读更多
1. 选用适合的ORACLE优化器

ORACLE的优化器共有3种:
   a.  RULE (基于规则)   b. COST (基于成本)  c. CHOOSE (选择性)
    设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖.
   为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性.
   如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关. 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器.
   在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器.

2. 访问Table的方式

ORACLE 采用两种访问表中记录的方式:
a.       全表扫描
            全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描.
b.       通过ROWID访问表
       你可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系. 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高.

3. 共享SQL语句

为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的执行路径. ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用.
数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了.
当你向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句.
这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须
完全相同(包括空格,换行等).
例如:
          
         SELECT * FROM EMP;
      和下列每一个都不同
          SELECT * from EMP;
          Select * From Emp;
          SELECT      *     FROM EMP;


使用绑定变量 (bind variable)
shared_pool 缓存已经被解析过的SQL,而使其能被重用,不再解析。这样做的原因是因为,对于一个新的SQL(shared_pool里面不存在已经解析的可用的相同的SQL),数据库将执行硬解析,这是一个很消耗资源的过程。而若已经存在,则进行的仅仅是软分析(在共享池中寻找相同SQL),这样消耗的资源大大减少。
没有使用bind var 的SQL,我们称为Literal SQL。也就是比如这样的两句SQL,Oracle认为是不同的SQL,需要进行2次硬解析:
select * from EMP where name = ‘TOM’;
select * from EMP where name = ‘JERRY’;

假如把’TOM’ 和 ‘JERRY’ 换做变量V,那就是使用了bind var,可以认为是同样的SQL从而能很好地共享。共享SQL本来就是shared_pool_size这部分内存存在的本意,oracle的目的也在于此,而我们不使用bind var就是违背了oracle的初衷,这样将给我们的系统带来严重的问题。
select * from EMP where name = :V;


5. WHERE子句中的连接顺序

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
 例如:
(低效,执行时间156.3秒)
SELECT … 
FROM EMP E
WHERE  SAL > 50000
AND    JOB = ‘MANAGER’
AND    25 < (SELECT COUNT(*) FROM EMP
             WHERE MGR=E.EMPNO);

(高效,执行时间10.6秒)
SELECT … 
FROM EMP E
WHERE 25 < (SELECT COUNT(*) FROM EMP
             WHERE MGR=E.EMPNO)
AND    SAL > 50000
AND    JOB = ‘MANAGER’;


6. SELECT子句中避免使用 ‘ * ‘

当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间.

7.  删除重复记录

最高效的删除重复记录方法 ( 因为使用了ROWID)
DELETE FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID) 
                   FROM EMP X
                   WHERE X.EMP_NO = E.EMP_NO); 

分享到:
评论

相关推荐

    Oracle性能调优实践中的几点心得

    当应用管理员向我们通告现在应用很慢、数据库很慢的时侯,我们到数据库时做几个示例的Select也发现同样的问题时,有些时侯我们会无从下手,因为我们认为数据库的各种命种率都是满足Oracle文档的建议。

    oracle性能调优

    让Oracle跑得更快__Oracle_10g性能分析与优化主要针对oracle性能调优进行详细分析。并且该文档提供了很好的oracle性能优化建议。

    Oracle调优之初始化参数说明及建议

    Oracle调优之初始化参数说明及建议,很有用的数据库优化参考文档.供初级的朋友数据库调优参考.要上dba道路,从这里看起

    oracle游标溢出调优

    oracle游标溢出调优着眼点枚举。通过对相关数据字典和参数的分析,给出建议。

    Oracle管理艺术 中文版

    *以oracle公司提供的建议为主、关系型数据库的理论为辅,学习oracle数据库的工作原理。 *真正熟悉sga的内涵,进而提升oracle服务器的性能。 *像协奏曲那样,让oracle数据库相关文件彼此正常且有效率地分工协作。 *...

    数据库性能调优技术1索引调优.pdf

    数据库性能调优技术1索引调优,详细讲述了关于索引调优的方法建议

    Oracle sql 优化实例

    不错的东东,通俗易懂,建议学习.赶紧下载吧

    ORACLE19c数据库性能优化说明.docx

    orcale的sql调优

    Oracle AWR报告深入分析

    4、建议有兴趣的同学去学习一下 oracle plsql 编写技巧,能在 plsql 缩写技能与编程 思想上有所提升。 5、Awr 二个包的代码极其复杂,对学习者的 plsql 编写能力有要求。 6、对应的二个包还包括 ADDM,ASH 的源码,...

    Oracle Wait Interface性能诊断与调整实践指南

    oracle数据库的经典调优文档,建议dba深入阅读

    Oracle10,11g 巡检,调优。

    86.超过2g的segment(单个表超过2g建议使用分区表) 87.数据库长事务(执行超过6s) 88.产生大量物理读的进程 89.产生归档日志过快的进程 90.等待事件对应的sql语句 91.占用大量temp表空间的session和sql监控 92....

    DBA浅谈Oracle__EBS11i系统性能优化_U

    下面将在 Hardware (Server)、Disk I/O、Application、Oracle Database 提出 了一系列优化建议。本文档将对相关技术细节进行总结。 文档将包括如下主要内容: z Oracle Database 性能数据收集、分析和调优方法 z ...

    oracle_rac日常基本维护命令

    oracle rac日常基本维护命令 2 Oracle RAC性能调整 12 详解Oracle RAC入门和提高 27 ORACLE RAC数据库配置Dataguard环境 49 老白对于RAC应用调优的建议 51

    Spotlight_On_Oracle

    图形化、实时显示 Oracle Instance的活动状态 利用数据流、图形、颜色和声音等方式报警,识别系统问题 显示有关问题的详细信息,如活动的 Sessions、资源消耗大的SQL语句、Disk I/O以及...内置调优建议 与其它模块集成

    Toad_for_OracleV11常见疑问解答与常用技巧V1.0

    以下对TOAD有关疑问解答和技巧描述都是基于Toad for Oracle Xpert(Version 11.6.1.6,Toad for Oracle Xpert是Toad调优版,包括了专业版全部功能。额外增加了SQL调优功能。),如果与大家在实际工作中遇到情况有所...

    Oracle_Database_11g完全参考手册.part2/3

    通过学习《Oracle Database 11g完全参考手册》,您可以了解如何实现最新的安全措施,如何调优数据库的性能,如何部署网格计算技术。附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 ...

    Oracle_Database_11g完全参考手册.part3/3

    通过学习《Oracle Database 11g完全参考手册》,您可以了解如何实现最新的安全措施,如何调优数据库的性能,如何部署网格计算技术。附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 ...

    Oracle Wait Interface性能诊断与调整实践指南-中文版

    适合有一定oracle运维经验的人看的一本调优的好书,建议阅读。

    RHEL5.4+ORACLE11G+WEBLOGIC10.3集群安装部署手册

    详细讲述RHEL5.4+ORACLE11G+WEBLOGIC10.3各自安装步骤和集群步骤...包括资源中心系统部署结构,整体部署方案,性能调优建议三大部分,图文并茂,有详细步骤截图.非常适合初学者学习,也适合有一经验的工作者作为技术参考资料

    Oracle性能优化.doc

    Oracle性能优化是针对数据优化的一些方法和建议,里面讲解的很详细,从为什么要优化,讲到缓存,连接池,SGA,SQL调优,优化器等等。。对于有这方面需求的朋友来说,很有帮助的,也是很难得的。

Global site tag (gtag.js) - Google Analytics