优化Oracle数据库性能

2/9/2008来源:Oracle教程人气:7875


  ---- 随着网络应用和电子商务的不断发展,各个站点的访问量越来越大,如何使有限的计算机系统资源为更多的用户服务?如何保证用户的响应速度和服务质量?这些问题都属于服务器性能优化的范畴。作为较成功的数据库厂商,Oracle公司数据库的性能优化是如何进行的呢?
  
  优化策略
  ----为了保证Oracle数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略。优化策略一般包括服务器操作系统参数调整、数据库参数调整、网络性能调整、应用程序SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信息系统开发之前完成的。
  ----分析评价Oracle数据库性能主要有数据库吞吐量、数据库用户响应时间两项指标。数据库用户响应时间又可以分为系统服务时间和用户等待时间两项,即:
  
  ----数据库用户响应时间=系统服务时间+用户等待时间
  
  ----因此,获得满足的用户响应时间有两个途径:一是减少系统服务时间,即提高数据库的吞吐量;二是减少用户等待时间,即减少用户访问同一数据库资源的冲突率。
  
  ----数据库性能优化包括如下几个部分:
  
  ----1. 调整数据结构的设计 这一部分在开发信息系统之前完成,程序员需要考虑是否使用Oracle数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。
  
  ----2. 调整应用程序结构设计 这一部分也是在开发信息系统之前完成的。程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。
  
  ----3. 调整数据库SQL语句 应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了Oracle数据库的性能。 Oracle公司推荐使用Oracle语句优化器(Oracle Optimizer)和行锁治理器(Row-Level Manager)来调整优化SQL语句。
  
  ----4. 调整服务器内存分配 内存分配是在信息系统运行过程中优化配置的。数据库治理员根据数据库的运行状况不仅可以调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小,而且还可以调整程序全局区(PGA区)的大小。
  
  ----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语言。
  
  系统性能评估
  ----信息系统的类型不同,需要关注的数据库参数也是不同的。数据库治理员需要根据自己的信息系统类型来着重考虑不同的数据库参数。
  ----1. 在线事务处理信息系统(OLTP) 这种类型的信息系统一般需要有大量的Insert、Update操作,典型的系统包括民航机票发售系统、银行储蓄系统等。
OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的Oracle数据库需主要考虑以下参数:
  
  数据库回滚段是否足够?
  是否需要建立Oracle数据库索引、聚集、散列?
  系统全局区(SGA)大小是否足够?
  SQL语句是否高效?
  ----2. 数据仓库系统(Data Warehousing) 这种信息系统的主要任务是从Oracle的海量数据中进行查询,以得到数据之间的某些规律。数据库治理员需要为这种类型的Oracle数据库着重考虑下述参数:
  
  是否采用B*索引或者Bitmap索引?
  是否采用并行SQL查询以提高查询效率?
  是否采用PL/SQL函数编写存储过程
  有必要的话,需要建立并行数据库以提高数据库的查询效率。
  参数的调整
  ----1. CPU参数
  ---- CPU是服务器的一项重要资源,服务器良好的工作状态表现为在工作高峰时CPU的使用率高于90%。假如空闲时间CPU使用率就在90%以上,说明服务器缺乏CPU资源;假如工作高峰时CPU使用率仍然很低,则说明服务器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时间。
  
  ---- 2. 内存参数
  
  ----内存参数的调整主要是指Oracle数据库的系统全局区(SGA)的调整。SGA主要由3部分构成:共享池、数据缓冲区、日志缓冲区。
  
  ----共享池由两部分构成:共享SQL区和数据字典缓冲区。共享SQL区是存放用户SQL命令的区域,数据字典缓冲区则存放数据库运行的动态信息。
  
  结束语
  ----Oracle数据库的性能优化调整是一个系统工程,涉及的方面很多。数据库治理员需要综合运用上面介绍的规律,认真分析Oracle在运行过程当中出现的各种问题,以保证Oracle数据库运行的高效率。还需要指出的是,上面给出的语句只是测得Oracle运行过程的某一个时间点的情况,数据库治理员不能仅仅根据一个点的情况就断定数据库运行性能的好坏,只有多运行一些时间点才能对数据库运行状况做出一个综合评估。
  ----由于单个时间点的监测是很麻烦的,且对于多个时间点的监测更是一项烦琐的工作,为此,笔者开发了Oracle数据库性能监测软件ORATUNE。这个软件不仅能够定时从数据库中读取各种参数并自动计算出各种比例,而且还能自动根据这些比例的好坏建议数据库治理员修改某项参数。
  
  ----ORATUNE已经在清华大学、华北电力集团等多个单位得到了应用,对Oracle数据库的性能优化调整起到了良好的作用。