《Oracle10g数据库性能调优方法研究.docx》由会员分享,可在线阅读,更多相关《Oracle10g数据库性能调优方法研究.docx(58页珍藏版)》请在课桌文档上搜索。
1、内容摘要:数据库系统的性能最终了决定数据库的可用性和生命力。大多数数据库系统在运行段时间后都会存在一定的性能问题,主要涉及数据库硬件、数据库效劳器、数据库内存:、应用程序、操作系统、数据库参数等方面.因此,基丁数据库系统的性能调整与优化对于整个系统的正常运行起着至关重要的作用。数据库性能调想与优化涉及到多个层面,通过统一规划、系统分析做出相应的调整,可以提高数据库的稳定性和可用性,保障系统高效地运行,解决系统瓶预,节约系统开销,具仃良好的应用价值,同时也对理论研究提供了定的方法指导。基于此,论文将OraCIeIOg数据库的内存分配、磁盘I/O以及SQ1.语句等方面的性能调整与优化问题作为主要研
2、究内容,射其进行了深入地分析和讨论,绐出了一般情况下OraC1.e数据库应用系统的性能调整策略及优化方法。关键词:OraCICIOg数据库:体系结构;系统全局区;性能调整与优化Abstract:Theperformanceofdatabasesystemseventua1.Iydeterminestheiravai1.abi1.ityandSurvivabi1.ity.Mostofthemwi1.1.bringaboutsomePerfOrmanCeprob1.emsmoreor1.essafterrunningforaperiodoftime,whichmain1.yinvo1.vedata
3、basehardware,databaseserver,databasememory,app1.ications,operatingsystemsanddatabaseparameters,etc.Therefore.perConnanceIUningantioptimizationofse1.ect*frov$sga:NAMEVA1.UEFixedSize39816Variab1.eSize259812784DatabaseBuffers1.049EH9RedoBuffers327680主要包括以下几个局部:2.1.1.1共享池(SharCdpoo1.)我享池是SGA中最关键的内存片段,特别
4、是在性能和可伸缩性上。一个大小的共享池会扼杀性能,使系统停止,大大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池.不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个局部:(1)SQ1.语句缓冲(1.ibraryCaehe)当一个用户提交一个SQ1.语句,OraC1.C会将这句SQ1.进行分析(parse),这个过程类似于煽译,会消耗相对较多的时间。在分析完这个SQ1.Orac1.e会把他的分析结果给保存在Sharedpoo1.的1.ibrarycaehe中,当数据库第二次执行该SQ1.时,OraCIe自动跳过这个分析过程.从而减少了系统运行的时间。这也是为什么第一次运
5、行的SQ1.比第二次运行的SQ1.要慢一点的原因。下面举例说明ParSe的时间SQ1.se1.ectcount(*)fromscpass;COUNT()243E1.apsed:00:00:00,08这是在Sharepoo1.和Databuffer都没有数据缓冲区的情况下所用的时间SQ1.a1.tersystemf1.ushSHAREDPOO1.;Systema1.tered.清空Share_POo1,保存DatabUfferSQ1.se1.ectcount()fromscpass;COUNT()243E1.apsed:00:00:00,02SQ1.se1.ectcount(*)fromscpa
6、ss;COUNT()243E1.apsed:00:00:00,00从两句SQ1.的时间差上可以看出该SQ1.的ParSe时间约为00:00:00.02。对于保存在共享池中的SQ1.语句,可以从V$Sq1.IeXI、V$5q1.area中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间.一个设计的差的应用程序可以毁掉整个数据库的Sharepoo1.,提高SQ1.语句的重用率必须先养成良好的变成习惯,尽量使用Bind变量。(2)数据字典缓冲区(DaIaDictionaryCache)显而易见,数据字典蟆冲区是ORAC1.E特地为数据字典准备的一块缓冲池,供ORAC1.E内部使用。
7、2.1.1.2块缓冲区高速缓存(DatabaSeBufferCache)这些缓冲是对应所有数据文件中的一些被使用到的数据块。让他们能够在内存中进行操作.在这个级别里没有系统文件,户数据文件,临时数据文件,回滚段文件之分。也就是任何文件的数据块都有可能被缓冲。数据库的任何修改都在该缓冲里完成,并由【)1WR进程将修改后的数据写入俄盘上这个缓冲区的块根本上在两个不同的列表中管理。一个是块的“腔”表(Dirty1.ist),需要用数据库块的书写器BWR)来写入,另外一个是不胜的块的列表(Free1.ist),一段的情况下,是使用最近最少使用(1.eaStReCent1.yUsed,1.RU)算法来管
8、理。块馈冲区高速缓存又可以细分为以下三个局部(Defau1.tp1.,Keeppoo1.Recyc1.epoo1.)如果不是人为设置初始化参数(IniI.ora),ORAC1.E将默认为DefaUI1.poo1.:由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可以到达1.7G,在64位系统上,块缓冲区商速缓存最大可以到达10G.2.1.1.3重做日志缓冲区(Redo1.ogbuffer)重做日志文件的谖冲区,时数据库的任何修改都按顺序祓记录在该谖冲,然后由1.GWR迸程将它写入磁盘。这些修改信息可能是DM1.语句,如(InSert,Update,De1.et
9、e),或DD1.语句,如(Create,A1.ter,Drop等)。重做日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢熨性,数裾在京做日志馈冲区中的滞苗时间不会很长。所以更作日志媛冲区一般都很小,大于3M之后的重作日志缓冲区已经没有太大的实际意义。2. 1.1.4JaVa程序缓冲区(JaVaPOODJava的程序区,OraCIe81以后,OraCIe在内核中参加了对JaVa的支持。该程序媛冲区就是为JaVa程序保存的。如果不用JaYa程序没有必要改变该缓冲区的默认大小。3. 1,1.5大池(1.arg
10、ePooD大池的得名不是因为大,而是因为它用来分纪大块的内存,处理比共享池更大的内存,下面对象使用大池: MTS在SGA的1.argePoo1.中分配UGAe 谙旬的并行查询(ParaI1.e1.ExecutionofStatements)允许进程间消息缓冲区的分配,用来协调并行查询效劳器。 备份(Backup)用于RMAN磁盘I/0缓存。2.1.2后台进程(BaCkgrOUndPrOCeSS)后台进程是OraCIe的程序,用来管理数据库的读写,恢复和监视等工作。ServerProcess要是通过他和userprocess进行联系和沟通,并由他和userprocess遂行数据的交换。在Unix
11、机器上,OraeIe后台进程相对于操作系统进程,也就是说,一个OraCIe后台进程将启动一个操作系统进程:在WindOWS机器上,OraCIe后台进程相对于操作系统线程,翻开任务管理器,我们只能看到一个ORAC1.E.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的歧程。在UniX上可以通过如下方法查看后台进程:PS-CfIgrepora_Wps-efgreporaOrac1.eOrac1.eOrac1.eOrac1.eOrac1.e2943112941412944812944212942710Sep0Sep0Sep0Sep0SepgrepXCUJAT022:02ora_dbwr
12、_SID020:03ora_ckpt_S!D022:42ora_sinon_SID023:25ora1.gwr_SID020:01ora_prnon_SID2. 1.2.1OraeIe系烧有5个根本进程他们是:DBWR(数据文件写入进程)1.GWR(日志文件写入进程)SMON(系统监护进程)PMON(用户进程城护进程)CKPT(检查点进程,同步数据文件,日志文件,控制文件)(1) 1)DBIR(DatabaseWriter数据写入进程)将数据谡冲区的数据写入数据文件,是负责数据馈冲区管理的一个后台进程。当数据媛冲区中的一数据被修改后,就标记为dirty,DBWR进程将数据缓冲区中ST数据写入数
13、据文件,保持数裾媛冲区的“干净”。由于数据馒冲区的数据被用户修改并占用,空闲数裾媛冲区会不断减少,当用户迸程要从横盘读取数据块到数据缓冲区却无法找到足够的空闲数据缓冲区时,DBWR将数据缓冲区内容写入横盘,使用户进程总可以得到足镑的空闲数据慢冲区。DBWR的作用: 管理数据谖冲区,以便用户进程总能够找到足够的空闲线冲区。 将所有修改后的缓冲区数据写入数据文件。 使用1.RU(最近最少使用)算法保持馒冲区数弯是最近经常使用的。 通过延迟写来优化磁盘1/0读写。(2) 1.GWR(1.ogWriter日志写入进程)将日志数据从日志缓冲区写入俄盘日志文件组。数据库在运行时,如果时数据库进行修改则产生
14、日志信息,日志信息首先产生于日志馈冲区。当日志到达一定数量时,由1.GWR将日志数据写入到日志文件沮,再经过日志切换,由归档进程(ARQD将日志数据写入归档进程(前提是数据库运行在归档模式下)。数据库遵循写日志优先原则.即在写数据之前先写日志。(3) SMON工作主要包含: 去除格时空间 在系统启动时,完成系统实例恢复 聚结空闲空间 从不可用的文件中恢曳事务的活动 OPS中失败节点的实例恢宴 去除OBJ$表 缩减回谈段 使回滚段脱机(4) PMON主要用千去除失败的用户透程,释放用户进程所用的资源。如ON将回濠未提交的工作,释放锁,择放分配给失败进程的SGA资源。(5) CKPT同步数据文件,
15、日志文件和控制文件,由于DBWR/1.GWR的工作原理,造成了数据文件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。CKPT会更新数据文件/控制文件的头信息。CKPT工作的主要条件如下:a在日志切换的时候。b.数据库用IinmediateBransaction,Noraa1.选项ShUtdOWn数据库的时候。c.根据初始化文件1.oGHECKP0INTNTERYA1.、1.OG_CHECKIP1.NTjriMEOUJFASTSTARTIOTARGET.的设置数值来确定。d.用户触发。2.1.2.2以下进程的启动需要手工配置(1)AKCH当数据库以归档方式运行的时候,Orac1.e会
16、启动RRCH进程,当重做日志文件被写满时,日志文件进行切揍,旧的重做日志文件就被ARCH进程发制到一个/多个特定的目录/远程机器。这些被复制的重做日志文件被叫做归档日志文件。(2)RECO负责解决分布事物中的故障。OraCIe可以连接远程的多个数据库.当由于网络问题,有些,物处于悬而未决的状态。RECO进程试图建立与远程效劳器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。(3)效劳进程SerVerProcess效劳进程的分类:a)专用效劳进程(DediCa1.edServerProcess)b)一个效劳进程对应一个用户进程c)共享效劳进程(YUItiTreadedServerP
17、rocess)d)一个效劳进程对应多个用户进程,轮流为用户进程效劳。PGA&UGAPGA=ProcessG1.oba1.AreaUGA=UserG1.oba1.Area他保存了用户的变量、权限、堆栈、排序空间等用户信息,对于专用效劳器进程,I:GA在PGA中分配。对于多线程迸程,UGA在1.argepoo1.中分配。(4)用户进程USerPrOCeSS在客户端,将闻户的SQ1.语句传递给效劳进程2.2ORAC1.E数据库ORAC1.E数据库的组成物理操作系统文件的集合。主要包括以下几种。2.2.1控制文件(参数文件iniiera记录了控制文件的位置)控制文件包括如下主要信息:敕猾库的名字,检查
18、点信息,数据库创立的时间戳,所有的数据文件,联机日志文件,归档日志文件信息,备份信息等。有了这些信息,Orac1.e就知道那些文件是数据文件,现在的重做日志文件是哪些,这些都是系统启动和运行的根本条件,所以他是OraCIe运行的根本。如果没有控制文件系统是不可能启动的控制文件是非常重要的,一般采用多个镜相复制来保护控制文件,或采用RAn)来保护控制文件。控制文件的丧失,将使数据库的恢复变的很复杂。控制文件信息可以从5ControIfiIe中查询获得。2. 2.2数据文件(数据文件的详细信息记载在控制文件中)可以通过如下方式查看数据文件SQ1.se1.ectnamefromvdatafi1.e;
19、NAMEuO5dbfPRODsyste_01.dbfu06dbf/PRODZtemp01.dbfu04dbf/PRODZusers_01.dbfu09dbt7PRODrbs01.dbfu06dbf/PRODZapp1.sys_in(ix_01.dbfu05dbt7PR0Dapp1sysdata01.dbf从以上可以看出,数据文件大致可以分为以下几类:2.2. 2.1系统数据文件(SyStei1.o1.dbf)存放系统表和数据字典,一般不放用户的数据,但是用户脚本,如过程.函数,包等却是保存在数据字典中的。(数据字典是一些系统表或视图,他存放系统的信息,他包括数据库版本,数据文件信息,表与索引等
20、段信息,系统的运行状态等各种和系统有关的信息和用户脚本信息。数据库管理员可以通过时数据字典的查询,就可以了解到OraC1.e的运行状态。)2.2.2.2回床段文件(rbs_O1.dbf)如果数据库进行时数据的修改,那么就必须使用回滚段,回滚段是用来临时存放修改前的数据(BeforeImage),回球段通常都放在一个单独的表空间上(回京表空间),防止表空间碎片化,这个表空间包含的数据文件就是回演数据文件。2.2.2.3临时数据文件(IemP_O1.dbr)主要存放用户的排序等整时数相,与回谖段相似,临时段也容易引起表空间碎片化,而且没有方法在一个永久表空间上开辟临时段,所以就必须有一个临时表空间
21、,它所包含的数据文件就是临时数据文件,主要用千不能在内存上进行的排序操作。我们必须为用户指定一个临时表空间。2.2.2.4用户数据文件(/app1.sys_data_01.dbf,app1.sys_indx_01.dbf)存放用户数据,这里列举了两类常见的用户型数据,一般数据和索引数据,一般来说,如果条件许可的话,可以考虑放在不同的横盘上。2.2.3重做日志文件(联机重做日志)用户对数据库进行的任何操作都会记录在重做日志文件。在了解重做日志之前必须了解重做日志的两个就念,重做日志组和重做日志组成员Nember),1.个数据库中至少要有两个日志组文件,一组写完后再写另一组,即轮流写。每个日志组中
22、至少有一个日志成员,一个日志组中的多个日志成员是镜相关系,有利于日志文件的保护,因为日志文件的损坏,符别是当前联机日志的损坏,对数据库的影晌是巨大的。联机日志组的交揍过程叫做切揍,需要特别注意的是,日志切换在一个优化效果不好的数据库中会引起临时的“挂起.通过V$1Og可以查看日志缎,V$1Ogfi1.e可以查看具体的成员文件。2.2.4归档日志文件OraC1.e可以运行在两柠模式之中,归档模式和不归档模式。如果不用归档模式,当然,就不会有归档日志,但是,系统将不会是一个实用系统,特别是不能用于生产系统,因为此系统可能会丧失数据。但是在归档模式中,为了保存用户的所有修改,在重做日志文件切摸后和祓
23、覆盖之间系统将他们另外保存成1.组连续的文件系列,该文件系列就是归档日志文件。有人或许会说,归档日志文件占领了用户大量的硬盘空间,但是具体想一想,用户是愿意浪费一点磁卷空间来保护数据,还是,愿意丧失数据呢?显而义见,我们需要保证我们的数据的平安性。其实,归档并不是一直占领用户的磁盘空间,用户可以把它备份到磁带上,或则删除上一次完整备份前的所有日志文件。2.2.5初始化参数文件initSID.ora或init.ora文件.因为版本的不一样,其位置也可能会不一样。初始化文件记载了许多数据库的启动参数,如内存,控制文件,进程数等.在数据库启动的时候加载(Nomount时加载),初始化文件记录了很多重
24、要参数,对数据库的性能影响很大。2.2.6其他文件2.2.6.1密码文件用于Orac1.e的具有SySdba权限用户的认证.2. 2.6.2其它日志文件(1)报警日志文件(a1.ert,1.oga1.rt.ora)记录数据库启动,关闭和一些重要的出错信息。数据库管理员应该经常检态这个文件,并时出现的问履作出即使的反应。可以通过以下SQ1.找到他的路径se1.ectva1.uefromv$PARAMETERwherename=backgrounddumpdest;(2)后台或用户跟踪文件系统进程或用户迸程出错前写入的信息,一般不可能读健,可以通过ORM1.E的TKPROF工具转化为可以读懂的格式
25、。对于系统进程产生的跟踪文件与报警日志文件的路径一样,用户跟踪文件的路径,你可以通过以下SQ1.找到他的路径se1.ectva1.uefromvSPARAMETERwherename=*user_dumpdest:3OraCIe数据库常见的瓶颈问题Orac1.e数据库系统提供了相应的应用工具,管理人员可以方便地对Orae1.e送行有效的管理。从而建立一个良好的环境,使系统发挥最大的效能回。但是,有时用户还是抱怨系统运行速度慢,对用户查询反应的时间长,即出现所谓的瓶颈效应。这就需要管理人员对OraCIe进行调整。在OraC1.C系统中比较常见的瓶出现在以下部件中:3. 1中央处理器(CPu)CP
26、U是计算机在运行中戢重要的局部,如果CPU总是运行在极限速度下,那么我们说CPU成为系统的瓶颈,尤其在多用户同时使用系统时,CPU的计算能力尤为重要。尽管多数情况下,都是由操作系统的内核来管理分配有效的CPU给RAC1.E数据库进程使用。但是,仍然会出现过多的应用进程对CPU使用周期剧烈竞争的现象。3.2 内存内存是计算机旌序运行的场所,处于等待状态数据和清求信息也都存放在内存中。如果内存缺乏,CaChC(高速缓存区)的命中率就不会大高,大局部所需数据不在CaChC中,因此出现了瓶颈问题。3.3 存储设备诸如硬盘驱动器、CD-RoM等设备,用于存储系统所需信息,计算机系统每秒能处理的最大I/O
27、数量是固定的,当CPU和内存要求的I/O速度大于系统的速率时,存储设备的瓶颈就会发生。3.4 网络当网络负担大重,网络i件速度跟不上,不可能把数猾传输得更快,网络瓶颈就会发生。3.5 其它由千其它系统硬件或软件的原因而导致的瓶颈,如应用系统本身的设计问题,超出系统吞吐量(在一定时间内系统处理数据的能力)的限制等造成的瓶颈。对于OraC1.e数据库系统的存在的瓶颈问通的解决,箕实最终还是归结为数据库性能优化问题。实际上,为了保证ORAe1.E数据库运行在最正确的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略。优化策略一般包括效劳器操作系统参数调整、ORAe1.E数据库参数调整、网络性能
28、调整、应用程序SQ1.语句分析及设计等几个方面,其中应用程序的分析与设计是在信息系统开发之前完成的。分析评价ORAC1.E数据库性能主要有数据库吞吐量、数据库用户响应时间两项指标。数据库吞吐量是指单位叶间内数据库完成的SQI.语句数目:数据库用户响应时间是指用户从提交SQ1.语句开始到获得结果的那一段时同。数据库用户响应时间又可以分为系统效劳时间和用户等待时间两项,即:数据库用户响应时间=系统效劳时间+用户等待时间,上述公式告诉我们,获得满意的用户响应时间有两个途径:一是减少系统效劳时间,即提高数据库的吞吐量:二是减少用户等待时间,即减少用户访同同一数据库资源的冲突率。4.CPU参数的调整CP
29、U是效劳器的一项重要资源,效劳器良好的工作状态是在工作顶珏时C使用率在90%以上。如果空闲时间CPU使用率就在90%以上,说明效劳器缺资源,如果工作顶峰时CPU使用率仍然很低,说明效劳器CPU资源还比较富玉。使用操作相同命令可以看到CPU的使用情况,一般UN1.K操作系统的服可以使用Sar1.命令查看CPU的使用率,NT操作系统的效劳器,可以使用N能管理器来查看CP1.的使用率。数据库管理员可以通过查看v$SySStat数据字典中“CPUusedbythissession*统计项得知ORAC1.E数据库使用的CPU时间,查看“OSUser1.eve1.CPCtime”统计项得知操作系统用户杰下
30、的CPU时间,查看“OSSystemca1.1.CPUtime”统计项得知操作系统系统态下的CPU时间,操作系统总的CPU时间就是用户态和系统态时向之和,如果ORAC1.E数据库使用的CPU时间占操作系统总的CPu时间90%以上,说明效劳器CPC根本上被ORAC1.E数据库使用若,这是合理,反之,说明效劳器CPIJ被其它程序占用过多,ORAC1.E数据库无法得到更多的CPU时间。数据库管理员还可以通过交看VSSeSSta1.数据字典来荻得当前连接ORAC1.E数据库各个会话占用的CPU时间,从而得知什么会话耗用效劳器CPU比较多。出现CPU资源缺乏的情况是很多的:SQ1.语句的重解析、低效率的
31、SQ1.语句、锁冲突都会引起CPU资源缺乏。(1)数据库管理员可以执行下述语句来直看SQ1.语句的解析情况。SE1.ECT1.RfMYSSYSSTATWHERENAMEIN(,parsetimecpu.parsetimee1.apsed,parsecount(hard),);这里ParSetimeCPU是系统效劳时间,ParSCtimeeIaPSed是响应时间,用户等待时间Waitetime=parsetimee1.apsed-parsetimeCPUO由此可以得到用户SQ1.语句平均解析等待时间=Waitetime/parsecount,这个平均等待时间应该接近于0,如果平均解析等待时间过长
32、,数据库管理员可以通过下述语句来发现是什么SQ1.语句蟀析效率比校低.程序员可以优化这些语句,或者增加ORAC1.E叁数SESSIOYCACHEDCURSORS的值。SE1.ECTSQ1._TEXT,PARSECA1.1.S.EXECUTI(WSFROMVSSQ1.AREAORDERBYPARSE工A1.1.S(2)数据库管理员还可以通过下述语句查看低效率的SQ1.语句,优化这些语句也有助于提高CPU的利用率。SE1.RTBUFFERGETS.EXECUTIONS.SQ1.TEXTFROMVJSQI.RE.(3)数据库管理员可以通过vSsysten.event数据字典中的1.atchfree统
33、计项态看ORAe1.E数猾库的冲突情况,如果没有冲突的话,1.atchfree查询出来没有结果。如果冲突大大的话,数据库管理员可以降低SPinc。Unt参数值,来消除高的CPU使用率。5内存参数的调整内存参数的调整主要是指ORAC1.E数据库的系统全局区(SGA)的调整。SGA主要由三局部构成:其享池、数揖缓冲区、日志媛冲区。系统全局区(SySten1.G1.oba1.Area,SGA),SG随甘不同的环境而不同,没有一种普通的最正确方案,我们在设置它之前要先考虑以下的几个方面:物理内存多大:操作系统是那种及占多大的内存,数据库系统是文件系统还是裸设备;数据库运行的模式。SGA包括:Fixed
34、size.Variab1.eBuffers.RedoBuffers.SGA占有物理内存的比例没有严格的规定,只能遵从一般的规则:SGA占据物理内存的40Q60%左右。如果通过直观的公式化来表达则为:OS使用内存+SGA+并发进程数*(Sor1.area_size+Ha$1.Varea_$ize+2M)0.7RAM,这个公式也只是参考,不必拘于此,实际情况可以自由发挥。初始化参数文件中的一些参数对SGA的大小有决定性的影响。参数Dbb1.ockBuffers(SGA中存储区高速媛存的媛冲区数目),参数Share(1.POo1.SiZe(分配给共享SQ1.区的字节数),是SGA大小的主要影响者。D
35、atabaseBuffers参数是SGA大小和数据库性能的最重要的决定因素。该值较高,可以提高系统的命中率,减少I/O。每个绫冲区的大小等于参数Db_b1.ock_size的大小。Orac1.e数据庠块以字节表示大小。Orac1.eSGA区共享池局部由库高速缓存、字典高速缓存及其他一些用户和效劳器会话信息组成,共享池是最大的消耗成分。调整SGA区各个结构的大小,可以极大地提高系统的性能。5.1共享池的构成共享池由两局需构成:共享SQ1.区和数猾字典缓冲区。5.1.1共享SQ1.区共享SQ1.区是存放用户SQ1.命令的区域,数据字典缓冲区存放数据库运行的动态信息.数据库管理员通过执行下述语句来查
36、看共享SQ1.区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小。Se1.ect(sum(pins-rc1.oads)su(pins)41.ibCache,fromv$1.ibrarycache;5. 1.2数据字典缓冲区(DictionaryCACHE)数揖字典缓存区的大小由数据库内部管理,大小由参数Sharepoo1.SiZe来设置C数据字典高速谡存包括了有关数据库的结构、用户、实体信息等。数据字典的命中率对系统有很大的影响。命中率的计算中,Getmisses表示失败次数,gets表示成功次数,数据库管理员还可以执行下述语句杳看数裾字典缓冲区的使用率,这个使用率也应该在90%
37、以上,否则得要增加共享池的大小。se1ect(sum(getsgetisses-usege-fixed)/sum(gets)Row,Cachefronv$rowcache;5.2 数据缓冲区在内存的配置中把别的参数设置完成后,应该把能给的都给Databuffers。OraC1.e在运行期间向数据库高速谖存读写数据,高速缓存命中表示信息已在内存中,高速缓存失败意味若OraCIe必需进行磁盍I/O。保持高速缓存失败率最小的关钺是确保高速馈存的大小。数据库管理员可以通过下述语句来查看数据库数据谖冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=I-(PhySiCa1.reads/(d
38、bb1.ockgets+ConSiStentgets)SE1.ECTname.va1.ueEROMVSSySStatWHEREnameIN(,dbb1.ockgets.consistentge1.s.,physica1.reads,);这个命中率应该在90%以上,否则需要增加数据谖冲区的大小。5.3 日志缓冲区数据库管理员可以通过执行下述语句,查看日志谖冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率Se1.ectname.va1.uefromVSSySStatherenamein(redoentries.redo1.ogspacerequestst);申请失败率=requests
39、eniries,申清失败率应该接近于0,否则说明日志谡冲区开设大小.需要增加ORAC1.E数据库的日志馈冲区。5.4Orac1.eIog的内存优化例子无论是一个刚入门的DBA还是一个经骏丰富的DBA,肯定至少看到过一次类似以下的错误:ORA-O4O31:uiiab1.etoa1.1.ocate2216bytesofsharedmemory(sharedpoo1.或者这种错误:ORA-O4031:UnabIOtoa1.1.ocateXXXXbytesofsharedmemory(1.argepoo1.unknownobjcct*,sessionheap,frame)或者可能这种错误:ORA-04
40、031:unab1.etoa1.1.ocatebytesofsharedmemory(sharedpoo1.*.unknownobject*,jox1.od:inith.JOX:ioc,.a1.1.ocatepa1.)笫一种错误的原因很明显:分田给共享池的内存缺乏以满足用户请求。(在某些情况下,原因可能不是池本身的大小,而是未使用绑定变量导致的过多分析造成的碎片.)其它的结误分别来自大型池和Java池的空间缺乏“时。需要解决这些错误情况,而不作任何与应用程序相关的修改。那么有哪些方案可选呢?问例是如何在OraC1.e例程所需的所有池之同划分可用的内存。一个OraC1.e例程的系统全局区域(SG
41、A)包含几个内存区域(包括缓冲高速缓存、共享池、Java池、大型池和重做日志缓冲这些池在操作系统的内存空间中占据了固定的内存数:它们的大小由DBA在初始化参数文件中指定。假定决定了这些池的值分别是2GB.1GB.IGB和1GB,将设置以下初始化参数来为数据库例程规定池的大小。db_cache_size=2gSharC(1.POO1.SiZC=Ig1.arge.PoO1.SiZe=Igjava.poo1.sizc=Ig我相信一定会存在有疑虑。在实际中,没有人能婚为这些池指定确切的内存数它们太依悔于数据库内部的处理,而处理的特性随时在变化。下面是一个例如场景。假定有一个典型的、大局部属于O1.TP
42、的数据库,并且为媛冲高域媛存分配的专闻内存比为纯O1.Tp数据库(现在已经很少见了)分配的要少。用户放开了一些非常大的全表扫描,以创立当天的结束报表。0rac1.e9i数据库提供了在浅修改内存分配的功能,但由于提供的总物理内存有限,有可能从大型池和JaVa池中取出一些内存:a1.tersystemsetdbcachesize三3gscopezmemory;a1.terSVStnseiargWyJSiZe=512scope=memt;a1.tersystemsetjavapoo1.size=51211scope-Beaory;这个解决方案能够很好地工作一段时间,但是接着夜间的RMAN作业(它们使用大型池)开始了,大型池将立即出现内存缺乏。同样,可能从数据库高速缓存中取出一些内存来补充大型池,以挽救这种局面。RMAN作业完成,然后启动一个广泛使用Java的批处理程序,接着开始看到与Java池相关的错误。因此,再次更新分配池,以满足Jaya池和数据库高选媛存上的内存需求:a1.tersystemsetdb_cache_size=2GSCOpe=memory;a1.tersystemsetIargCJ)OO1.SiZe=512MSCOPe=memory:a1.tersystemsetjava