Oracle10g数据库性能调优方法研究_第1页
Oracle10g数据库性能调优方法研究_第2页
Oracle10g数据库性能调优方法研究_第3页
Oracle10g数据库性能调优方法研究_第4页
Oracle10g数据库性能调优方法研究_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内容摘要:数据库系统统的性能最终了决定数据库的可可用性和生命力。大大多数数据库系统统在运行一段时间间后都会存在一定定的性能问题,主主要涉及数据库硬硬件、数据库服务务器、数据库内存存、应用程序、操操作系统、数据库库参数等方面。因因此,基于数据库库系统的性能调整整与优化对于整个个系统的正常运行行起着至关重要的的作用。数据库性性能调整与优化涉涉及到多个层面,通通过统一规划、系系统分析做出相应应的调整,可以提提高数据库的稳定定性和可用性,保保障系统高效地运运行,解决系统瓶瓶颈,节约系统开开销,具有良好的的应用价值,同时时也对理论研究提提供了一定的方法法指导。基于此,论文将Oracle 10g数据库的内

2、内存分配、磁盘I/O以及SQL语语句等方面的性能能调整与优化问题题作为主要研究内内容,对其进行了了深入地分析和讨讨论,给出了一般般情况下Oracle数数据库应用系统的的性能调整策略及及优化方法。关键词:Oracle 10g 数据库;体系结构构;系统全局区;性能调整与优化化E。 AbstractAbstract: The performance of database systems eventually determines their availability and survivability. Most of them will bring about some performance

3、problems more or less after running for a period of time, which mainly involve database hardware, database server, database memory, applications, operating systems and database parameters, etc. Therefore,performance tuning and optimization of database systems,which concern multiple aspects, are very

4、 vital to the normal running of the whole system. We can improve the stability and availability of database, guarantee its high running efficiency, solve system bottleneck, reduce system overhead, obtain considerable applicability and in them meanwhile, provide some guidelines for theoretical resear

5、ch through a unified plan and systematical analysis to make appropriate adjustment.7。Based on the above-mentioned idea, the paper principally pays attention to the research on the performance tuning and optimization problems of memory allocation of Oracle 10g, disc I/O, SQL statements, etc, and make

6、s a further analysis and discuss. Besides, it provides some performance tuning strategies and optimization approaches of Oracle application system in general condition. 7。Key Words: Oracle 10g Database不不Architecture不System Global Area不 Adjustment and Optimization of Performanceq。1 导言网格技术是本世纪初最最新和最有吸

7、引力力的技术之一,数数据库管理系统作作为信息系统的基基本支撑在信息化化建设中扮演着重重要的要色。目前前的Oracle 10g数据库是业业界首个为网格计计算而设计的数据据库,是一种高效效率、可靠性好的适应应高吞吐量的数据据库解决方案,该该方案可让客户将将多台标准服务器器系统整合成一套套可扩充的容错运运算平台。然而,随着数据库规模模的扩大及用户数数量的增加,数据据库应用系统的响响应速度下降,性性能问题越来越突突出。y。Oracle 10g数据库系统统体系结构庞大、技术细节繁杂,如如何合理有效地建建立基于Oracle的数数据库系统及如何何调整使系统性能能达到最优,成为为Oracle数据据库应用领域的

8、热热点问题。本课题题通过对Oracle 10g数据库系统统的深入分析,设设计一套完整的Oracle数据据性能评测指标和和方法,并针对发发现的性能问题制制定相应的性能优优化策略。T。 2 Oracle 10g体系结构Oracle数据管理理系统是Oracle实例例(Instance)和Oracle数据库构成的。下面是Oracle 10g数据库的体系结构图:m。图1 Oracle 10g数据库体系系结构2.1 ORACLE实例例Oracle 实例包包括系统全局共享享区System Global Are 和后台进程Background Process。O。2.1.1 系统全全局共享区System Gl

9、obal Area(SGA)L。System Global Area 是一一块巨大的共享内内存区域,他被看看做是Oracle 数数据库的一个大缓缓冲池,这里的数数据可以被ORACLE的各各个进程共用1。其大小可以通通过如下语句查看看:r。SQL select * from v$sga;NAME VALUE- -Fixed Size 39816Variable Size Database Buffers 1.049E+09Redo Buffers 主要包括以下几个部分分: 共共享池(Shared pool)共享池是SGA中最关关键的内存片段,特特别是在性能和可可伸缩性上。一个个太小的共享池会会扼

10、杀性能,使系系统停止,太大的的共享池也会有同同样的效果,将会会消耗大量的CPU来来管理这个共享池池。不正确的使用用共享池只会带来来灾难。共享池主主要又可以分为以以下两个部分:8。(1)SQL语句缓冲冲(Library Cache)当一个用户提交一个SQL语语句,Oracle会将将这句SQL进行行分析(parse),这个过程类似似于编译,会耗费费相对较多的时间间。在分析完这个个SQL,Oracle会把把他的分析结果给给保存在Shared pool的Library Cache中,当当数据库第二次执执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的S

11、QL 比第二次运行的SQL要慢一点的原因。7。下面举例说明parse的的时间SQL select count(*) fromscpass ;K。COUNT(*)-243Elapsed: 00:00:00.08这是在Share_pool 和Data buffer 都没有数据缓冲冲区的情况下所用用的时间9。SQL alter system flush SHARED_POOL;7。System altered.清空Share_pool,保保留Data bufferSQL select count(*) from scpass ;8。COUNT(*)-243Elapsed: 00:00:00.02SQ

12、L select count(*) from scpass ;8。COUNT(*)-243Elapsed: 00:00:00.00从两句SQL 的时间间差上可以看出该该SQL 的Parse 时间约为00:00:00.02。O。对于保存在共享池中的的SQL语句,可可以从V$Sqltext、v$Sqlarea中中查询到,对于编编程者来说,要尽尽量提高语句的重重用率,减少语句句的分析时间。一一个设计的差的应应用程序可以毁掉掉整个数据库的Share pool,提高高SQL语句的重重用率必须先养成成良好的变成习惯惯,尽量使用Bind变变量。X。(2)数据字典缓冲区区(Data Dictionary Ca

13、che)r。显而易见,数据字典缓缓冲区是ORACLE特地地为数据字典准备备的一块缓冲池,供供ORACLE内部部使用。 1。 块块缓冲区高速缓存存(Database Buffer Cache)i。这些缓冲是对应所有数数据文件中的一些些被使用到的数据据块。让他们能够够在内存中进行操操作。在这个级别别里没有系统文件件,户数据文件,临临时数据文件,回回滚段文件之分。也也就是任何文件的的数据块都有可能能被缓冲。数据库库的任何修改都在在该缓冲里完成,并并由DBWR进程程将修改后的数据据写入磁盘2。F。这个缓冲区的块基本上上在两个不同的列列表中管理。一个个是块的“脏”表表(Dirty List),需需要用数

14、据库块的的书写器(DBWR)来写入,另外一一个是不脏的块的的列表(Free List),一一般的情况下,是是使用最近最少使使用 (Least Recently Used,LRU)算法来管理。块块缓冲区高速缓存存又可以细分为以以下三个部分(Default pool,Keep pool,Recycle pool)。如如果不是人为设置置初始化参数(Init.ora),ORACLE将默默认为Default pool。由于于操作系统寻址能能力的限制,不通通过特殊设置,在在32位的系统上上,块缓冲区高速速缓存最大可以达达到1.7G,在64位位系统上,块缓冲冲区高速缓存最大大可以达到10G。a。 重重做日志

15、缓冲区(Redo log buffer)8。重做日志文件的缓冲区区,对数据库的任任何修改都按顺序序被记录在该缓冲冲,然后由LGWR进进程将它写入磁盘盘。这些修改信息息可能是DML语语句,如(Insert,Update,Delete),或DDL语句句,如(Create,Alter,Drop等等)。 重做日志志缓冲区的存在是是因为内存到内存存的操作比较内存存到硬盘的速度快快很多,所以重作作日志缓冲区可以以加快数据库的操操作速度,但是考考虑的数据库的一一致性与可恢复性性,数据在重做日日志缓冲区中的滞滞留时间不会很长长。所以重作日志志缓冲区一般都很很小,大于3M之后的重作日日志缓冲区已经没没有太大的实

16、际意意义。C。 Java程程序缓冲区(Java Pool)Java 的程序区,Oracle 8I 以后,Oracle 在内核中加入了对Java的支持。该程序缓冲区就是为Java 程序保留的。如果不用Java程序没有必要改变该缓冲区的默认大小。F。 大大池(Large Pool)大池的得名不是因为大大,而是因为它用用来分配大块的内内存,处理比共享享池更大的内存,下下面对象使用大池池:O。MTS在SGA的的Large Pool中中分配UGA。语句的并行查询(Parallel Execution of Statements)允许进程间消息缓冲区的分配,用来协调并行查询服务器。a。备份(Backup)

17、用于RMAN磁磁盘I/O缓存。2.1.2 后台进进程(Background process)q。后台进程是Oracle的程程序,用来管理数数据库的读写,恢恢复和监视等工作作。Server Process主主要是通过他和user process进进行联系和沟通,并并由他和user process进进行数据的交换。在在Unix机器上上,Oracle后台台进程相对于操作作系统进程,也就就是说,一个Oracle后台台进程将启动一个个操作系统进程;在Windows机机器上, Oracle后台台进程相对于操作作系统线程,打开开任务管理器,我我们只能看到一个个ORACLE.EXE的的进程,但是通过过另外的工

18、具,就就可以看到包含在在这里进程中的线线程。I。在Unix上可以通过过如下方法查看后后台进程:ps ef | grep ora_# ps -ef | grep ora_ | grep XCLUATS。Oracle 29431 1 0 Sep 022:02 ora_dbwr_SIDa。Oracle 29444 1 0 Sep 020:03 ora_ckpt_SIDb。Oracle 29448 1 0 Sep 022:42 ora_smon_SIDV。Oracle 29442 1 0 Sep 023:25 ora_lgwr_SIDL。Oracle 29427 1 0 Sep 020:01 ora_

19、pmon_SIDY。 Oracle系统统有5个基本进程他们们是:DBWR(数据文件写写入进程)LGWR(日志文件件写入进程)SMON(系统监护进进程)PMON(用户进程程监护进程)CKPT(检查点进程程,同步数据文件件,日志文件,控制文件)(1)DBWR(Database Writer 数据写入进程程)2。将数据缓冲区的数据写写入数据文件,是是负责数据缓冲区区管理的一个后台台进程。当数据缓缓冲区中的一数据据被修改后,就标标记为dirty,DBWR进进程将数据缓冲区区中“脏”数据据写入数据文件,保保持数据缓冲区的的“干净”。由于数据缓冲区区的数据被用户修修改并占用,空闲闲数据缓冲区会不不断减少,

20、当用户户进程要从磁盘读读取数据块到数据据缓冲区却无法找找到足够的空闲数数据缓冲区时,DBWR将将数据缓冲区内容容写入磁盘,使用用户进程总可以得得到足够的空闲数数据缓冲区。DBWR的的作用:s。管理数据缓冲区,以以便用户进程总能能够找到足够的空空闲缓冲区。将所有修改后的缓冲冲区数据写入数据据文件。使用LRU(最近最最少使用)算法保保持缓冲区数据是是最近经常使用的的。l。通过延迟写来优化磁磁盘I/O读写。(2)LGWR(Log Writer 日志写入进程)将日志数据从日志缓冲冲区写入磁盘日志志文件组。数据库库在运行时,如果果对数据库进行修修改则产生日志信信息,日志信息首首先产生于日志缓缓冲区。当日

21、志达达到一定数量时,由由LGWR将日志数据写入入到日志文件组,再再经过日志切换, 由归档进程(ARCH)将将日志数据写入归归档进程(前提是是数据库运行在归归档模式下)。数数据库遵循写日志志优先原则,即在在写数据之前先写写日志。K。(3)SMON工作主要包含:清除临时空间在系统启动时,完成系系统实例恢复聚结空闲空间从不可用的文件中恢复复事务的活动OPS中失败节点的实实例恢复清除OBJ$表缩减回滚段使回滚段脱机(4)PMON主要用于清除失效的用用户进程,释放用用户进程所用的资资源。如PMON将将回滚未提交的工工作,释放锁,释释放分配给失败进进程的SGA资源源。S。(5)CKPT同步数据文件,日志文

22、文件和控制文件,由由于DBWR/LGWR的的工作原理,造成成了数据文件,日日志文件,控制文文件的不一至,这这就需要CKPT进进程来同步。CKPT会会更新数据文件/控制文件的头信信息。Q。CKPT工作的主要条条件如下:a.在日志切换的时候候。b.数据库用Immediate ,Transaction , Normal 选选项Shutdown 数据库的时候。Q。c.根据初始化文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET、的设置数值来确定。j。d.用户触发。 以以下进程的启动需需要手工配置(1)ARCH当数据

23、库以归档方式运运行的时候,Oracle会启启动ARCH进程程,当重做日志文文件被写满时,日日志文件进行切换换,旧的重做日志志文件就被ARCH进进程复制到一个/多个特定的目录录/远程机器。这这些被复制的重做做日志文件被叫做做归档日志文件。3。(2)RECO负责解决分布事物中的的故障。Oracle可以以连接远程的多个个数据库,当由于于网络问题,有些些事物处于悬而未未决的状态。RECO进进程试图建立与远远程服务器的通信信,当故障消除后后,RECO进程程自动解决所有悬悬而未决的会话。x。(3)服务进程Server Process服务进程的分类:专用服务进程(Dedicated Server Proce

24、ss)E。一个服务进程对应一个个用户进程共享服务进程(MultiTreaded Server Process)6。一个服务进程对应多个个用户进程,轮流流为用户进程服务务。PGA & UGAPGA = Process Global AreaUGA = User Global Area他保存了用户的变量、权限、堆栈、排排序空间等用户信信息,对于专用服服务器进程,UGA在在PGA中分配。对对于多线程进程,UGA在在Large pool中中分配。h。(4)用户进程User Process在客户端,将用户的SQL 语句传递给服务务进程2.2 ORACLE 数数据库ORACLE数据库的的组成物理操操作系统

25、文件的集集合。主要包括以以下几种。X。2.2.1 控制文文件(参数文件init.ora记记录了控制文件的的位置)E。控制文件包括如下主要要信息:数据库的名字,检检查点信息,数据据库创建的时间戳戳,所有的数据文件件,联机日志文件件,归档日志文件件信息,备份信息等。0。有了这些信息,Oracle就知知道那些文件是数数据文件,现在的的重做日志文件是是哪些,这些都是是系统启动和运行行的基本条件,所所以他是Oracle运行行的根本。如果没没有控制文件系统统是不可能启动的的。控制文件是非非常重要的,一般般采用多个镜相复复制来保护控制文文件,或采用RAID来来保护控制文件。控控制文件的丢失,将将使数据库的恢

26、复复变的很复杂。控控制文件信息可以以从V$Controlfile中查询获得。b。2.2.2 数据文文件(数据文件的的详细信息记载在在控制文件中)可以通过如下方式查看看数据文件SQL select name from v$datafile;p。NAME-d。/u05/dbf/PROD/system_01.dbf/u06/dbf/PROD/temp_01.dbf/u04/dbf/PROD/users_01.dbf/u09/dbf/PROD/rbs_01.dbf/u06/dbf/PROD/applsys_indx_01.dbfq。/u05/dbf/PROD/applsys_data_01.dbfc。

27、从以上可以看出,数据据文件大致可以分分为以下几类: 系系统数据文件(system_01.dbf)存放系统表和数据字典典,一般不放用户户的数据,但是用用户脚本,如过程程,函数,包等却却是保存在数据字字典中的。(数据字典是一些些系统表或视图,他他存放系统的信息息,他包括数据库库版本,数据文件件信息,表与索引引等段信息,系统统的运行状态等各各种和系统有关的的信息和用户脚本本信息。数据库管管理员可以通过对对数据字典的查询询,就可以了解到到Oracle的运运行状态。)0。 回回滚段文件(rbs_01.dbf)如果数据库进行对数据据的修改,那么就就必须使用回滚段段,回滚段是用来来临时存放修改前前的数据(B

28、efore Image)。回回滚段通常都放在在一个单独的表空空间上(回滚表空空间),避免表空空间碎片化,这个个表空间包含的数数据文件就是回滚滚数据文件。U。 临临时数据文件(temp_01.dbf)主要存放用户的排序等等临时数据,与回回滚段相似,临时时段也容易引起表表空间碎片化,而而且没有办法在一一个永久表空间上上开辟临时段,所所以就必须有一个个临时表空间,它它所包含的数据文文件就是临时数据据文件,主要用于于不能在内存上进进行的排序操作。我我们必须为用户指指定一个临时表空空间。9。 用用户数据文件(/applsys_data_01.dbf ,applsys_indx_01.dbf)u。存放用户

29、数据,这里列列举了两类常见的的用户型数据,一一般数据和索引数数据,一般来说,如如果条件许可的话话,可以考虑放在在不同的磁盘上。5。2.2.3 重做日日志文件(联机重重做日志)用户对数据库进行的任任何操作都会记录录在重做日志文件件。在了解重做日日志之前必须了解解重做日志的两个个概念,重做日志志组和重做日志组组成员(Member),一个数据库中中至少要有两个日日志组文件,一组组写完后再写另一一组,即轮流写。每每个日志组中至少少有一个日志成员员,一个日志组中中的多个日志成员员是镜相关系,有有利于日志文件的的保护,因为日志志文件的损坏,特特别是当前联机日日志的损坏,对数数据库的影响是巨巨大的。u。联机

30、日志组的交换过程程叫做切换,需要要特别注意的是,日日志切换在一个优优化效果不好的数数据库中会引起临临时的“挂起”。通过v$log可可以查看日志组,v$logfile可可以查看具体的成成员文件。5。2.2.4 归档日日志文件Oracle可以运行行在两种模式之中中,归档模式和不不归档模式4。如果不用归档档模式,当然,就就不会有归档日志志,但是,系统将将不会是一个实用用系统,特别是不不能用于生产系统统,因为此系统可能会丢失失数据。但是在归归档模式中,为了了保存用户的所有有修改,在重做日日志文件切换后和和被覆盖之间系统统将他们另外保存存成一组连续的文文件系列,该文件件系列就是归档日日志文件。u。有人或

31、许会说,归档日日志文件占领了用用户大量的硬盘空空间,但是具体想一想,用户户是愿意浪费一点点磁盘空间来保护护数据,还是愿意意丢失数据呢?显显而义见,我们需需要保证我们的数数据的安全性。其其实,归档并不是是一直占领用户的的磁盘空间,用户可以把它备份到磁带上,或或则删除上一次完完整备份前的所有有日志文件。2。2.2.5 初始化化参数文件initSID.ora或或init.ora文文件,因为版本的的不一样,其位置置也可能会不一样样。初始化文件记记载了许多数据库库的启动参数,如如内存,控制文件件,进程数等,在在数据库启动的时时候加载(Nomount时加载),初始化文件记录了很多重要参数,对数据库的性能影

32、响很大。v。2.2.6 其他文文件 密密码文件用于Oracle 的的具有sysdba权权限用户的认证. 其其它日志文件(1)报警日志文件(alert.log或或alrt.ora)记录数据库启动,关闭闭和一些重要的出出错信息。数据库库管理员应该经常常检查这个文件,并并对出现的问题作作出即使的反应。可可以通过以下SQL 找到他的路径3。select value from v$PARAMETERwhere name =background_dump_dest;k。(2)后台或用户跟踪文件系统进程或用户进程出出错前写入的信息息,一般不可能读读懂,可以通过ORACLE的TKPROF工工具转化为可以读读懂

33、的格式。对于于系统进程产生的的跟踪文件与报警警日志文件的路径径一样,用户跟踪踪文件的路径,你你可以通过以下SQL找找到他的路径Q。select value from v$PARAMETER where name =user_dump_dest;I。3 Oracle数数据库常见的瓶颈颈问题Oracle 数据库库系统提供了相应应的应用工具,管管理人员可以方便便地对Oracle进行行有效的管理。从从而建立一个良好好的环境,使系统统发挥最大的效能能5。但是,有有时用户还是抱怨怨系统运行速度慢慢,对用户查询反反应的时间长,即即出现所谓的瓶颈颈效应。这就需要要管理人员对Oracle进行行调整。5。在Ora

34、cle系统中比比较常见的瓶颈出出现在以下部件中中:3.1 中央处理器器(CPU)CPU是计算机在运行行中最重要的部分分,如果CPU总总是运行在极限速速度下,那么我们们说CPU成为系系统的瓶颈,尤其其在多用户同时使使用系统时,CPU的的计算能力尤为重重要。尽管多数情情况下,都是由操操作系统的内核来来管理分配有效的的CPU给RACLE数数据库进程使用。但但是,仍然会出现现过多的应用进程程对CPU使用周周期激烈竞争的现现象。H。3.2 内存内存是计算机程序运行行的场所,处于等等待状态数据和请请求信息也都存放放在内存中。如果果内存不足,cache(高速缓存区)的的命中率就不会太太高,大部分所需需数据不

35、在cache中中,因此出现了瓶瓶颈问题。o。3.3 存储设备诸如硬盘驱动器、CD-ROM等设备,用用于存储系统所需需信息,计算机系系统每秒能处理的的最大I/O数量量是固定的,当CPU和和内存要求的I/O速度大于系统统的速率时,存储储设备的瓶颈就会会发生。J。3.4 网络当网络负担太重,网络络部件速度跟不上上,不可能把数据据传输得更快,网网络瓶颈就会发生生。s。3.5 其它由于其它系统硬件或软软件的原因而导致致的瓶颈,如应用用系统本身的设计计问题,超出系统统吞吐量(在一定定时间内系统处理理数据的能力)的的限制等造成的瓶瓶颈。L。对于Oracle数据据库系统的存在的的瓶颈问题的解决决,其实最终还是

36、是归结为数据库性性能优化问题。实实际上,为了保证证ORACLE数据据库运行在最佳的的性能状态下,在信息系统开开发之前就应该考考虑数据库的优化化策略。优化策略略一般包括服务器器操作系统参数调调整、ORACLE数据据库参数调整、网网络性能调整、应应用程序SQL语语句分析及设计等等几个方面,其中中应用程序的分析析与设计是在信息息系统开发之前完完成的。分析评价价ORACLE数据据库性能主要有数数据库吞吐量、数数据库用户响应时时间两项指标6。数据库吞吐量量是指单位时间内内数据库完成的SQL语语句数目:数据库用户响应应时间是指用户从从提交SQL语句开始到获得得结果的那一段时时间。数据库用户户响应时间又可以

37、以分为系统服务时时间和用户等待时时间两项,即:数据库用户响应应时间=系统服务务时间 + 用户户等待时间,上述述公式告诉我们,获获得满意的用户响响应时间有两个途途径:一是减少系统服服务时间,即提高高数据库的吞吐量量:二是减少用户等等待时间,即减少少用户访问同一数数据库资源的冲突突率。8。4 CPU参数的调整整CPU是服务器的一项项重要资源,服务务器良好的工作状状态是在工作高峰峰时C使用率在90%以以上。如果空闲时时间CPU使用率率就在90%以上上,说明服务器缺缺资源,如果工作作高峰时CPU使使用率仍然很低,说说明服务器CPU资资源还比较富玉。使用操作相同同命令可以看到CPU的的使用情况,一般般U

38、NLK操作系系统的服可以使用用sar一命令查查看CPU的使用用率,NT操作系系统的服务器,可可以使用N能管理理器来查看CPU的的使用率。X。数据库管理员可以通过过查看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%以

39、上,说明服务器CPU基本上被ORACLE数据库使用着,这是合理,反之,说明服务器CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间。数据库管理员还可以通过查看v$sesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多7。出现 CPU 资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足。2。(1)数据库管理员可可以执行下述语句句来查看SQL语语句的解析情况。p。SELECT*FROM V$SYSSTATWHERE NAME IN(parse time cpu , parse

40、 time elapsed , parse count(hard);H。这里 parse time cpu是系统服服务时间,parse time elapsed是是响应时间,用户户等待时间waite time = parse time elapsed - parse time cpu。由此可以得到用户SQL语句平均解析等待时间=waite time/ parse count。这个平均等待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句来发现是什么SQL语句解析效率比较低。程序员可以优化这些语句,或者增加ORACLE参数SESSION_CACHED_CURSORS的值。r

41、。SELECT SQL_TEXT,PARSE_CALLS,EXECUTIONSF ROM V$SQLAREAF。ORDER BY PARSE_CALLS.(2)数据库管理员还还可以通过下述语语句查看低效率的的SQL语句,优优化这些语句也有有助于提高CPU的的利用率。r。SELECT BUFFER_GETS,EXECUTIONS, SQL_TEXT FROM V$SQLAREA.y。(3)数据库管理员可以通过过v$systen_event数据据字典中的“latch free”统计计项查看ORACLE数据据库的冲突情况,如如果没有冲突的话话,latch free查询出出来没有结果。T。如果冲突太大

42、的话,数数据库管理员可以以降低spin_count参数数值,来消除高的的CPU使用率。Y。5 内存参数的调整内存参数的调整主要是是指ORACLE数据据库的系统全局区区(SGA)的调整。SGA主主要由三部分构成成:共享池、数据据缓冲区、日志缓缓冲区。系统全局局区(System Global Area,SGA),SGA随着不不同的环境而不同同,没有一种普通通的最佳方案,我我们在设置它之前要先考虑以以下的几个方面:物理内存多大;操作系统是那种种及占多大的内存存,数据库系统是是文件系统还是裸裸设备;数据库运行的模模式8。SGA包包括:Fixed size、Variable Buffers、Redo B

43、uffers。SGA占有物理内存的比例没有严格的规定,只能遵从一般的规则:SGA占据物理内存的40%60%左右。如果通过直观的公式化来表达则为:OS使用内存+SGA+并发进程数*(sort_area_size+Hash_area_size+2M) select sum(value)/1024/1024 from v$sga;8。SUM(VALUE)/1024/1024- 500此时 SGA 的当前前总大小近似为 500MB,并并且这个值将变为为 SGA_TARGET 的值。接下来,执执行语句: O。alter system set sga_target = 500M scope=both;E。

44、这种方法不需要为各个个池设置不同值;因而,将需要在在参数文件中使它它们的值为零或全全部删除它们。 B。shared_pool_size = 0large_pool_size = 0java_pool_size = 0db_cache_size = 0 再循环数据库,使这些些值生效。 这个人工过程还可以通通过 Enterprise Manager 10g 实施。从从数据库主页中,选选择 Administration 选项卡,然后后选择 Memory Parameters。对于人工配置置的内存参数,将将显示标记为 Enable 的按钮,以及及所有人工配置的的池的值。单击 Enable 按钮,启用自

45、自动共享内存管理理特性。企业管理理器将完成剩下的的工作。 V。在配置了自动内存分配配之后,可以利用以以下命令检查它们们的大小: SQL select current_size from v$buffer_pool;L。CURRENT_SIZE- 340SQL select pool, sum(bytes)/1024/1024 Mbytes from v$sgastat group by pool;m。POOL MBYTES- -java pool 4large pool 4shared pool 148正如所看到的,所有的的池都从 500MB 的总目标大小中中自动进行分配。如图2所示缓冲高速缓

46、存大小是 340MB,Java 池是 4MB,大型池是 4MB,共享池是 148MB。它们合起来总的大小为 (340+4+4+148=) 496MB,近似与 500MB 的目标 SGA 的大小相同。 M。图 2 池的初始始分配现在假定提供给Oracle的主主机内存从 500MB 减少为 300MB,这这意味着必须减少少总 SGA 的的大小。可以通过过减小目标 SGA 大小来反映这种种变化。 H。alter system set sga_target = 300M scope=both;5。现在查看各个池,可以以看到: SQL select current_size from v$buffer_

47、pool;v。CURRENT_SIZE- 244SQL select pool, sum(bytes)/1024/1024 Mbytes from v$sgastat 0。group by pool;POOL MBYTES- -java pool 4large pool 4shared pool 44占用的总大小是 240+4+4+44 = 296MB,接接近于目标的 300MB。如如图 3 所示,当 SGA_TARGET 改变时,如何自自动重新分配池。 X。图 3 在将 SGA 大小减少到 300MB 之后重新分配池池X。这些池的大小是动态的的。池将根据工作作负载扩展,以容容纳需求的增长,或

48、或缩小以容纳另一一个池的扩展。这这种扩展或缩小自自动发生,无需 DBA 的干预预,这与本文开头头的示例不同。让让我们暂时返回到到那个场景,假定定在初始分配后,RMAN 作业启动,指示示需要一个更大的的大型池,大型池池将从 4MB 扩展到 40MB,以以容纳需求。这个个额外的 36MB 将从数据库缓冲冲中划出,数据库库块缓冲将缩小,如如图 4 所示。4。 图 4 在对大型池池的需求增长之后后经过重新分配的的池池的大小变化基于系统统上的工作负载,因因此不需要为最坏坏的情况调整池的的大小它们将根据需需求的增长自动调调整。此外,SGA 的总大小始终在在由 SGA_TARGET 指定的最大值之之内,因此

49、不存在在使内存需求的增增长比例失调(这这将导致分页和交交换)的风险。可可以动态地将 SGA_TARGET 增加至绝对最大大值,这个绝对最最大值是通过调整整参数 SGA_MAX_SIZE 指定的。 Q。5.4.2 不受影影响的池SGA 中的一些池不不受动态大小调整整的影响,但是必必须显式指定这些些池11。其中值值得注意的是非标标准块大小的缓冲冲池,以及 KEEP 池或 RECYCLE 池的非默认块大大小。如果数据库库有一个块大小为为 8K,而想要要配置 2K、4K、16K 和 32K 块大小的池,那那么必须手动设置置它们。它们的大大小将保持不变;它们将不会根据据负载缩小或扩展展。当使用多种大大小

50、的缓冲池、KEEP 池和 RECYCLE 池时,应当考虑虑这个因素。此外外,日志缓冲不受受内存调整的影响响不管工作负载载如何,在参数 log_buffer 中设定的值是不不变的。( 在 10g 中,还可可以在 SGA 中定义一种新的的池:流池 (stream pool),它它用参数 streams_pool_size 进行设置。该池池也不受自动内存存调整的影响。) q。这就产生了一个问题,如果需要一一个非默认块大小小的池,而且想自自动管理其它的池池,那么该怎么办办? u。如果指定了这些非自动动调整的参数中的的任意一个(如 db_2k_cache_size),那那么它们的总大小小将从 SGA_T

51、ARGET 值中减去,以计计算自动调整的参参数值,以使 SGA 的总大小保持不不变。例如,假设设值看起来像这样样。n。sga_target = 500Mdb_2k_cache_size = 50M其余的池参数未设置。50MB 的 2KB 缓缓冲池为自动调整整的池(如默认块块大小缓冲池 (db_cache_size)、共共享池、Java 池和大型池)保保留了 450MB。当当以一种方法动态态地调整不可自动动调整的参数(如如 2KB 块大大小池)这种方法将影影响到可自动调整整部分的大小,可可自动调整的部分分将重新调整。例例如,将 db_2k_cache_size 的值值从 50MB 提高到 100

52、MB 只为可自动调整整的参数剩余 400MB。因因此,如图 5 所示,可调整整的池(如共享池池、大型池、Java 池和默认缓冲池池)自动缩小,以以将它们的总大小小从 450MB 减少到 400MB。D。图 5 配置非自动动缓冲参数的效果果但如果有足够的可用内内存,或者上述风风险可能不是那么么明显,那应该怎怎么办?如果这样样的话,可以通过过不指定参数文件件中的参数 SGA_TARGET、通过在文件中将将其设为 0,或或者通过使用 ALTER SYSTEM 动态地将其修改改为 0 来关闭闭自动大小调整。当当 SGA_TARGET 被设为 0 时时,池的当前值被被自动设为它们的的参数。 9。5.4.

53、3 使用 Enterprise Manager 还可以使用 Enterprise Manager 10g 来处理这这些参数。从数据据库主页中单击超超链接 Memory Parameters,如图 6 所示。 q。图 6 在 Enterprise Manager 中调整自动共享享内存管理7。注意红圈中的项目:数数据库在 Automatic Shared Memory Management 模式下运行,总总大小为 564MB,与与在参数 SGA_TARGET 中指定的值相同同。可以在此修改改它,然后单击Apply按按钮接受这些值,可调整的参数将将自动调整。 为为每个池指定一个个最小值,假定将 SG

54、A_TARGET 设为 600MB,并并且各个池已自动动分配。p。表1 各个池的最小小值池大小(MB)缓冲池404Java 池4大型池4共享池148看上述值,可能推断 4MB 的 Java 池和大型池可能能有点不足,这个个值在运行时无疑疑需要增加。因此此,可能想确保这这些池至少在最初初时具有更高的值值,比如说,分别别为 8MB 和和 16MB。可以通过在参数数文件中显式地指指定这些池的值或或动态使用 ALTER SYSTEM 来实现这一目的的(如下所示)。 X。alter system set large_pool_size = 16M;O。alter system set java_pool

55、_size = 8M;3。现在查看这些池,可以以看到SQL select pool, sum(bytes)/1024/1024 Mbytes from v$sgastat group by pool;c。POOL MBYTES- -java pool 8large pool 16shared pool 148SQL select current_size from v$buffer_pool;0。CURRENT_SIZE- 388表2 池的重新分分配显示如下池大小(MB)缓冲池388Java 池8大型池16共享池148如表2所示Java 池和大型池被重重新配置为 8MB 和 16MB,并并且为

56、了使总的 SGA 保持在在 600MB 以下,缓冲池已已从 404MB 减少为 388MB。当当然,这些池仍然然由自动共享内存存管理控制它们的大小将将根据需求缩小或或扩展。显式指定定的值为池的大小小设定了一个下限限;它们将永远不不会缩小到低于这这个界限。 X。5.4.4 小结 Oracle SGA 中的各种池的内内存需求不是静态态的。相反,它们根据据系统上的需求而而变化。Oracle 数数据库 10g 中的自动动共享内存管理特特性通过动态地将将资源重新分配到到最需要它们的地地方同时施加一个个指定的最大值以以防止分页和交换换,使得Oracle 10g 数据库的的内存得到更好的的优化配置。b。6

57、调整I/OOracle RDBMS的性能能与操作系统和I/O子系统密切相相关。某些时候,操操作系统会阻碍Oracle的性性能。Oracle几乎乎就是它自己的操操作系统。管理员员必须利用操作系系统来实现几个关关键任务,这些任务包括内内存管理系统、进程调度程序和和I/O子系统等。在在操作系统的这些些任务中,I/O子系统及I/O子系统的性性能对Oracle RDBMS的性性能是非常重要的的12。Oracle的主主要功能是为数据据库用户提供和维维护数据;数据库的数据(不在内存中时)就是存放在I/O子系统中的。Oracle的性性能是和I/O子系统的性性能直接相关的。s。6.1 定位I/O性能问题如何确定

58、系统的主要问问题是I/O问题,并定定位存在I/O性能瓶颈的的设备是解决I/O性能问题的第第一步。使用操作作系统的监控工具具可以实时监控I/O的情况。第一一种方法是使用vrnstat工具,使使用该工具,可以以查看b列的值,如果该该值比较大,说明明等待I/O的进程比较较多,I/O可能存在问问题,如图7所示示。C。图7 vmstat输出出 图8 sar输出出然后,通过sar1命令或者iostat命令令可以进一步确认认,如图8所示,从上图中发现wio值长时间高高于40(这个值是个个经验值,根据不不同的系统,这个个值可以调整),这这说明I/O等待比较严严重。此时可以通通过sar-d命令来来监控到底哪些I

59、/O设备存在性能能问题。如果发现现某个设备的繁忙忙度长时间超过90%,那就说明明该设备比较繁忙忙,如果该设备的的平均服务时间比比较大或者比其它它设备高很多。那那么就说明该设备备存在性能问题。7。通过Oracle的statspack工具也可以检查系统的I/O问题,如果系统的性能不佳,并且从报告中看到的db file sequential read等待事件是系统等待事件中排在前几位的事件,占系统总等待时间的比例比较高,那么系统很可能存在I/O性能问题。可以通过检查文件I/O情况来进一步确认并找出存在性能问题的设备。方法是通过检查文件I/O中的平均读响应时间,如果某个文件的平均读响应时间超过20毫秒

60、,那么说明该文件所在的设备可能存在性能问题。应该注意的是,20毫秒是一个相对的参数,在不同的应用环境下可能选择不同的参考值。通过比对操作系统的情况,数据库管理员应该很快就能确定所管理的系统的平均读响应时间和操作系统I/O情况的对应关系。T。检查读平均响应时间的的时候还要注意几几个问题。第一个个问题是在报告时时间区域内的I/O量,如果某个个文件在报告时间间区间内的I/O数量很小,那那么此平均响应时时间可能缺乏代表表性,可以通过检检查存放在相同设设备上的其它文件件来进一步确认。另另外一种情况是平平均每次读的数据据量比较多(每次次读的块数比较多多),那么略高的的平均读响应时间间也是正常的。下下面图3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论