`

(转)【性能优化】ORACLE数据库性能优化概述

阅读更多

原文:http://space.itpub.net/22664653/viewspace-675225

 

   为了保证ORACLE数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略。优化策略一般包括服务器操作系统参数调整、ORACLE数据库参数调整、网络性能调整、应用程序SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信
  分析评价ORACLE数据库性能主要有数据库吞吐量、数据库用户响应时间两项指标。数据库吞吐量是指单位时间内数据库完成的SQL语句数目;数据库用户响应时间是指用户从提交SQL语句开始到获得结果的那一段时间。数据库用户响应时间又可以分为系统服务时间和用户等待
  数据库用户响应时间=系统服务时间 + 用户等待时间
  上述公式告诉我们,获得满意的用户响应时间有两个途径:一是减少系统服务时间,即提高数据库的吞吐量;二是减少用户等待时间,即减少用户访问同一数据库资源的冲突率。
  数据库性能优化包括如下几个部分:
  1、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。
  2、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同
  3、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。
  4、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享
池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。
  5、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。
  6、调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。
  实际上,上述数据库优化措施之间是相互联系的。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库管理员有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在。另外,良好的数据库管理工具对于优化数据库性
  ORACLE数据库性能优化工具
  常用的数据库性能优化工具有:
  1、ORACLE数据库在线数据字典,ORACLE在线数据字典能够反映出ORACLE动态运行情况,
  2、操作系统工具,例如UNIX操作系统的vmstat,iostat等命令可以查看到系统系统级内存和硬盘I/O的使用情况,这些工具对于管理员弄清出系统瓶颈出现在什么地方有时候很有用
  3、SQL语言跟踪工具(SQL TRACE FACILITY),SQL语言跟踪工具可以记录SQL语句的执行情况,管理员可以使用虚拟表来调整实例,使用SQL语句跟踪文件调整应用程序性能。SQL语言跟踪工具将结果输出成一个操作系统的文件,管理员可以使用TKPROF工具查看这些文件。
  4、ORACLE Enterprise Manager(OEM),这是一个图形的用户管理界面,用户可以使用
它方便地进行数据库管理而不必记住复杂的ORACLE数据库管理的命令。
  5、EXPLAIN PLAN――SQL语言优化命令,使用这个命令可以帮助程序员写出高效的SQL语
  ORACLE数据库的系统性能评估
  信息系统的类型不同,需要关注的数据库参数也是不同的。数据库管理员需要根据自己的
信息系统的类型着重考虑不同的数据库参数。
  1、在线事务处理信息系统(OLTP),这种类型的信息系统一般需要有大量的Insert、Update操作,典型的系统包括民航机票发售系统、银行储蓄系统等。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的ORACLE数据库需要主要考虑下述参数:
  l 数据库回滚段是否足够?
  l 是否需要建立ORACLE数据库索引、聚集、散列?
  l 系统全局区(SGA)大小是否足够?
  l SQL语句是否高效?
  2、数据仓库系统(Data Warehousing),这种信息系统的主要任务是从ORACLE的海量数
据中进行查询,得到数据之间的某些规律。数据库管理员需要为这种类型的ORACLE数据库着重
  l 是否采用B*-索引或者bitmap索引?
  l 是否采用并行SQL查询以提高查询效率?
  l 是否采用PL/SQL函数编写存储过程?
  l 有必要的话,需要建立并行数据库提高数据库的查询效率
  SQL语句的调整原则
  SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现,但是语句的执行效
率是很不相同的。程序员可以使用EXPLAIN PLAN语句来比较各种实现方案,并选出最优的实现
方案。总得来讲,程序员写SQL语句需要满足考虑如下规则:
  1、尽量使用索引。试比较下面两条SQL语句:
  语句A:SELECT dname, deptno FROM dept WHERE deptno NOT IN
  (SELECT deptno FROM emp);
  语句B:SELECT dname, deptno FROM dept WHERE NOT EXISTS
  (SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);
  这两条查询语句实现的结果是相同的,但是执行语句A的时候,ORACLE会对整个emp表进行扫描,没有使用建立在emp表上的deptno索引,执行语句B的时候,由于在子查询中使用了联合查询,ORACLE只是对emp表进行的部分数据扫描,并利用了deptno列的索引,所以语句B的
  2、选择联合查询的联合次序。考虑下面的例子:
  SELECT stuff FROM taba a, tabb b, tabc c
  WHERE a.acol between :alow and :ahigh
  AND b.bcol between :blow and :bhigh
  AND c.ccol between :clow and :chigh
  AND a.key1 = b.key1
  AMD a.key2 = c.key2;
  这个SQL例子中,程序员首先需要选择要查询的主表,因为主表要进行整个表数据的扫描,所以主表应该数据量最小,所以例子中表A的acol列的范围应该比表B和表C相应列的范围小
  3、在子查询中慎重使用IN或者NOT IN语句,使用where (NOT) exists的效果要好的多。
  4、慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些。
  5、可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。
  6、ORACLE公司提供的DBMS_SHARED_POOL程序可以帮助程序员将某些经常使用的存储过程“钉”在SQL区中而不被换出内存,程序员对于经常使用并且占用内存很多的存储过程“钉”
  CPU参数的调整
  CPU是服务器的一项重要资源,服务器良好的工作状态是在工作高峰时CPU的使用率在90%以上。如果空闲时间CPU使用率就在90%以上,说明服务器缺乏CPU资源,如果工作高峰时
  使用操作相同命令可以看到CPU的使用情况,一般UNIX操作系统的服务器,可以使用sar u命令查看CPU的使用率,NT操作系统的服务器,可以使用NT的性能管理器来查看CPU的使用
  数据库管理员可以通过查看v$sysstat数据字典中“CPU used by this session”统计项
得知ORACLE数据库使用的CPU时间,查看“OS User level CPU time”统计项得知操作系统用户态下的CPU时间,查看“OS System call CPU time”统计项得知操作系统系统态下的CPU时间,操作系统总的CPU时间就是用户态和系统态时间之和,如果ORACLE数据库使用的CPU时间占操作系统总的CPU时间90%以上,说明服务器CPU基本上被ORACLE数据库使用着,这是合理,反之,说明服务器CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间。
  数据库管理员还可以通过查看v$sesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多。
  出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引
  1、数据库管理员可以执行下述语句来查看SQL语句的解析情况:
  SELECT * FROM V$SYSSTAT
  WHERE NAME IN
  ('parse time cpu', 'parse time elapsed', 'parse count (hard)');
  这里parse time cpu是系统服务时间,parse time elapsed是响应时间,用户等待时间
  waite time = parse time elapsed parse time cpu
  由此可以得到用户SQL语句平均解析等待时间=waite time / parse count。这个平均等
待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句
  SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA
  ORDER BY PARSE_CALLS;
  来发现是什么SQL语句解析效率比较低。程序员可以优化这些语句,或者增加ORACLE参数
  2、数据库管理员还可以通过下述语句:
  SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA;
  查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率。
  3、数据库管理员可以通过v$system_event数据字典中的“latch free”统计项查看
ORACLE数据库的冲突情况,如果没有冲突的话,latch free查询出来没有结果。如果冲突太大
的话,数据库管理员可以降低spin_count参数值,来消除高的CPU使用率。
  内存参数的调整
  内存参数的调整主要是指ORACLE数据库的系统全局区(SGA)的调整。SGA主要由三部分构
  1、 共享池由两部分构成:共享SQL区和数据字典缓冲区,共享SQL区是存放用户SQL命令
的区域,数据字典缓冲区存放数据库运行的动态信息。数据库管理员通过执行下述语句:
  select (sum(pins - reloads)) / sum(pins) "Lib Cache" from v$librarycache;
  来查看共享SQL区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小。
  select (sum(gets - getmisses - usage - fixed)) / sum(gets) "Row Cache" from
  查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大
  2、 数据缓冲区。数据库管理员可以通过下述语句:
  SELECT name, value FROM v$sysstat WHERE name IN ('db block gets', 'consistent
  来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命
中率=1 - ( physical reads / (db block gets + consistent gets) )。
  这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。
  3、 日志缓冲区。数据库管理员可以通过执行下述语句:
  select name,value from v$sysstat where name in ('redo entries','redo log
space requests');查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请
申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太
 

分享到:
评论

相关推荐

    Oracle数据库优化概述

    1.Oracle数据库优化概述 2.性能规划器的使用 3.顶层会话的使用 4.Oracle专家的使用 5.索引调节向导 6.SQL分析的使用 7.锁管理器 8.性能管理员 9.表空间的重组 博文链接:...

    Oracle数据库性能优化概述.pdf

    本文将对Oracle数据库性能优化进行概述,涵盖优化方法、常见问题、诊断工具以及案例分析。 首先,性能优化的方法概略包括理解为何需要优化。通常,性能问题表现为响应时间延长或吞吐量下降,这些问题可能源于客户端...

    浅谈ORACLE数据库的性能优化.pdf

    【Oracle数据库性能优化概述】 Oracle数据库作为一款广泛应用于管理信息系统、企业数据处理、互联网和电子商务领域的关系型数据库管理系统,其性能优化对于确保系统的稳定性和高效运行至关重要。随着数据量的快速...

    面向大型数据处理系统的Oracle数据库性能优化技术.pdf

    【标题】:“面向大型数据处理系统的Oracle数据库性能优化技术” 【概述】: 本文主要探讨了在大型数据处理系统中,针对Oracle数据库的性能优化策略。作者通过实例分析,提出了一套关键的优化技术和方法,以解决...

    Oracle数据库系统应用与开发

    Oracle数据库性能优化包括查询优化、索引优化、内存管理、数据库架构调整等。通过分析SQL执行计划和使用性能监控工具,可以识别瓶颈并采取相应的优化措施。 九、安全性管理 Oracle数据库提供了多种安全特性,如用户...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    第15章 RAC稳定性与性能优化 15.1服务器硬件 15.1.1 Firmware固件升级 15.1.2硬件设备兼容性 15.1.3 FC HBA卡冗余 15.1.4 Infiniband技术 15.1.5 RAC硬件结构案例 15.2操作系统 15.2.1认证操作系统 15.2.2...

    Oracle数据库性能优化实践应用分析——以某城市商业银行财务系统为例.pdf

    Oracle 数据库性能优化实践应用分析 —— 以某城市商业银行财务系统为例 概述: Oracle 数据库是目前最常用的数据库之一,其运行性能对应用系统有重要影响。本文介绍 Oracle 数据库性能优化的目标、方法和实践应用...

    航空结算系统基于oracle数据库的性能优化.pdf

    【航空结算系统基于Oracle数据库的性能优化】 随着信息技术的快速发展和计算机网络的普及,Oracle数据库在各行各业的应用越来越广泛,特别是在航空结算系统中,由于处理的信息量庞大且复杂,对数据库性能的要求极高...

    ORACLE数据库性能优化的分析.pdf

    本文主要探讨了Oracle数据库性能优化的几个关键方面。 1. Oracle数据库概述 Oracle数据库的架构由物理、进程、内存和逻辑结构组成。物理结构涉及操作系统文件,如控制文件、参数文件、数据文件、归档日志和重做日志...

    Oracle9i 数据库性能优化

    #### 一、Oracle9i 数据库性能优化概述 Oracle9i 是 Oracle 公司推出的一款功能强大的关系型数据库管理系统(RDBMS)。随着业务规模的增长和技术的发展,Oracle9i 的性能优化成为了提高系统响应速度、提升用户体验的...

    Oracle数据库的性能优化策略浅析.pdf

    Oracle数据库性能优化是关系型数据库管理领域的一个重要话题,它直接关系到数据库应用系统的响应速度和用户体验。本文将着重探讨如何通过对索引、表分区和优化器模式等技术的应用来优化Oracle数据库性能。 首先,...

    oracle数据库日志查看方法

    Trace文件是Oracle在特定条件下生成的跟踪文件,主要用于深入分析数据库性能或定位特定问题。Trace文件的位置可以通过以下命令查询: ```sql SHOW PARAMETER USER_DUMP_DEST; ``` #### 六、查看Listener日志 ...

    oracle数据库整体优化方案全

    Oracle作为一款广泛使用的数据库管理系统,其性能优化显得尤为重要。本文将详细介绍一种全面的Oracle数据库优化方案,涵盖监控、磁盘I/O优化、回滚段优化、Redo日志优化、系统全局区(SGA)优化等多个方面。 #### ...

    Oracle数据库回滚段的故障分析与性能优化.pdf

    Oracle数据库回滚段的故障分析与性能优化 回滚段是 Oracle 数据库的重要组成部分,数据库的性能与回滚段息息相关。本文将针对数据库回滚段常见的故障进行系统的分析,结合实例提出相应的解决方案,并对数据库回滚段...

    ORACLE数据库性能优化交流.ppt

    ### ORACLE数据库性能优化交流 #### 概述 在当今高度依赖信息技术的企业环境中,数据库作为信息系统的核心组件之一,其性能直接影响到业务流程的顺畅性和用户体验。Oracle数据库因其强大的功能和广泛的适用性,在...

    EBS性能调优之全面挖掘_V4.2(ebs性能优化、oracle性能优化、linux性能优化)

    本文档的目标读者应具备一定的技术背景,包括Oracle数据库基础、EBS应用基础以及Linux基础。对于那些希望在性能优化领域深化技能或对此感兴趣的人来说,这份文档将提供宝贵的指导。 **适应EBS版本** 文档适用于...

    oracle数据库基础知识

    七、数据库性能优化 Oracle提供了许多工具和方法来优化数据库性能,如SQL优化器、索引策略、表分区、物化视图和数据库调优顾问等。理解这些工具并合理应用,能够显著提升数据库性能。 八、故障诊断与监控 Oracle的...

Global site tag (gtag.js) - Google Analytics