版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 HYPERLINK /Database/ShowArticle.asp?SID=42&ID=1221 ORACLE的工作机制体系结构实例Oracle 运行的时候候,在内存中中会要开辟一一个区间,这这个区间主要要是用于从磁磁盘(数据文文件)中读出出数据后的一一个在内存的的缓存和处理理。而处理这这些数据的操操作,需要有有一些系统的的后台进程,这这些进行在OOraclee数据库启动动的时候,就就开始运行,一一直在响应前前台的操作。实际上,这这一个区间(SSGA)和这这些后台进程程合在一起,就就称为 实例例。实例是包包括SGA区区和后台进程程两个部分的的。 数据库启动执行行若干动作,经经历三个阶段段
2、,分别是未未加载、加载载和打开。1、未加载(nnomounnt)可以把数据据库启动的这这一阶段看作作是Oraccle实例的的启动。这种种方式启动下下可执行:重建控控制文件、重重建数据库。这一启动命命令: 读取数据库库参数文件。 启动所需的的后台进程并并按参数文件件中的定义分分配内存。 将进展情况况写入告警日日志文件中。2、加载(moount)在实例启动动加载阶段,数数据库参数文文件中指定的的控制文件被被读取。记住住控制文件将将数据库各部部分联系在一一起。实例从从控制文件中中找到下列信信息,然后将将进展写入告告警日志文件件。这种方式式启动下可执执行:数据库库日志归档、数据库恢复复、重新命名名一些
3、数据库库文件: 所有数据文文件和重做日日志文件的名名称和位置。 数据库名。 最新系统更更改号(S C N)。3、打开(oppen)包含在数据据库中的每个个联机数据文文件在数据库库打开前必须须被同步。在在数据库打开开阶段: 所有联机数数据文件的头头与控制文件件信息相比较较。 所有文件同同步后,数据据库打开。当数据库关闭时时,取决于它它的关闭方式式执行不同的的任务:正常(norrmal)在在所有的用户户离线后发生生的正常关闭闭。事务(traansacttionall)事务关闭闭就是当所有有的用户执行行完当前的事事务后,将用用户从数据库库上清除。立即(immmediatte)立即关关闭就是从数数据库
4、清除所所有当前用户户之后,回退退所有未完成成的操作。异常(aboort)异常常关闭没有给给数据库任何何整理的机会会。这种方式式关闭后需要要实行崩溃恢恢复。实例是数据管理理的核心它做所有的的工作,而数数据库存储所所有的数据。其他启动方式:startuup resstrictt 约束方式启动这种方式能够启启动数据库,但但只允许具有有一定特权的的用户访问 非特权用户访问问时,会出现现以下提示: ERROR: ORA-001035: ORACCLE 只允允许具有 RRESTRIICTED SESSIION 权限限的用户使用用 startuup forrce 强制启动方式 当不能关闭数据据库时,可以以用
5、starrtup fforce来来完成数据库库的关闭 先关闭数据库,再再执行正常启启动数据库命命令 startuup pfiile=参数数文件名 带初始化参数文文件的启动方方式 先读取参数文件件,再按参数数文件中的设设置启动数据据库 startuup EXCCLUSIVVE*一个Delette操作的流流程:检查语法、语义义(V$ROWWCACHEE :data dictiionaryy cachhe),计算HASSH VALLUE,在ssessioon的UGA中进行匹匹配(sesssion_cached_ccursorrs),如果UGA中没有有,在libbrary chachhe 中匹配配(l
6、ibrrary cchachee lockk latcch 保护 libraary chhache lock 对对地址堆的访访问,而后 libraary chhache pin llatch 保护 liibraryy cachhe pinn 对librrary ccache中中sql相关关信息的访问问)根据执行计划读读取数据:ccache buffeer chaain laatch 保保护能定位到到buffeer heaader 并并 pin 住该该块(如果没有bbufferr headder,就 pin 住某个空块块(没有空块块就产生 ffree bbufferr waitts),并到数据据
7、文件中读取取)。如果此此时有某个进进程想访问该该块,将产生生 bufffer buusy waaits 。在redo llogbufffer中记记录deleete操作的的细节。(包包括回滚段前后镜镜像、数据块块前后镜像)。在相应回滚段段段头的事务表表中创建一个个undo条条目,把将要删除除的记录创建建前镜像,存放放到UndooBlockk中。在Bufferr Cachhe中的相应应数据块上删删除记录,并并且标记相应应的数据块为为Dirtyy。提交(COMMMIT)1.Oraclle产生一个个SCN2.在回滚段事事务表中标记记该事务状态态为commmited33.LGWRR Flussh Log
8、g Bufffer到日志志文件3.如如果此时数据据块仍然在BBufferr Cachhe中,那么么SCN将被被记录到Bllock HHeaderr上,这被称称为快速提交交(fastt commmit)4.如果dirrtybloock已经被被写回到磁盘盘,那么下一一个访问这个个blockk的进程将会会自回滚段中中获取该事务务的状态,确确认该事务被被提交。然后后这个进程获获得提交SCCN并写回到到BlockkHeadeer上。这被被称为延迟块块清除(deelayedd blocck cleeanoutt)。内存SGA(系统全全局区、共享享全局区)、PGA(进进程全局区、私有全局区区)内存分配原则:
9、10%冗余内存存,OS SSYS进程(约约1.6G),OS BBUFFERR(约0.8GG),数据库连连接消耗内存(每个连连接约58M),PGA(每每个连接约22M,V$PGAA_TARGGET_ADDVICE),SGASGAv$sgasttat注意 showw paraameterr sga_max_ssizeOracle的的内存:软件代码区系统全局区进程全局区:包包含单个进程程的数据和控控制信息排序区System Global AreaFixed SizeVariable SizeDatabase BuffersRedo buffersLarge poolShared PoolLibrar
10、y cacheData dictionary cacheUser Global Area共享SQL区专用SQL区db_cache_sizedb_keep_cache_sizedb_recycle_cache_sizedb_nk_cache_size永久性内存结构Java poolSGA中的Thhe fixxed arrea包含了了数千个原子子变量,以及及如指向SGGA中其它区区域的poiinterss(指针)等等小的数据结结构.通过对对fixedd tablle内表X$KSMFSSV查询(如如下)可以获获得这些变量量的名字,变变量类型,大大小和在内存存中的地址.the varriablee a
11、reaa是由larrge poool和shhared pool组组成Shared pool中中永久性的内内存包含各种种数据结构如:the bbufferr headders, proceesses, sesssions, trannsactiion arrrays, the enqueeue reesourcces , lockss, thee onliine roollbacck seggment arrayys, vaariouss arraays foor reccordinng staatistiics.其中中大部分的SSIZE是依依靠初始参数数的设置来确确定的.这些些初始参数只只能在
12、实例被被关闭的状态态下才能够进进行修改.所所以这里说的的永久性是针针对实例打开开状态下的生生存期而言.Thevariiable area的的在SGA中中的SIZEES就等于LLARGE_POOL_SIZE,SHAREED_POOOL_SIZZE和永久性性的内存arrrays的的SIZE三三者相加.永久性内存arrrays的的SIZE=the vvariabble arrea - (LARGGE_POOOL_SIZZE+SHAARED_PPOOL_SSIZE).数据缓冲区命中中率v$syssstat这里命中率的的计算应该是是令 x = physiical rreads direcct + pph
13、ysiccal reeads ddirectt (lobb)命中率 =1100 - ( phyysicall readds - xx) / (consiistentt getss + dbb blocck getts - xx)*1000通常如果发现现命中率低于于90%,则则应该调整应应用可可以考考虑是否增大大数据缓冲区区共享池的命中率率SQL sselectt sum(pinhiits-reeloadss)/summ(pinss)*1000 hitt radiio frrom v$libraarycacche;hit raadio99.假如共享池的的命中率低于于95%,就就要考虑调整整应用(
14、通常常是没使用bbind vvar )或或者增加内存存关于排序部分SQL sselectt namee,valuue froom v$ssysstaat wheere naame liike %sort%;NAME VVALUE sorts (memoory) 667935sorts (diskk) 1sorts (rowss) 70770假如我们发现现sortss (dissk)/ (sortss (memmory)+ sortts (diisk)的的比例过高,则则通常意味着着sort_area_size 部分内存较较小,可考虑虑调整相应的的参数。关于log_bbufferrSQL ssel
15、ectt namee,valuue froom v$ssysstaat2 wherre namme in(redoo entrries,redoo bufffer alllocattion rretriees);NAME VVALUE redo eentriees redo bbufferr alloocatioon rettries 10假如 reddo bufffer aallocaation retriies/ rredo eentriees 的比例例超过1%我我们就可以考考虑增大loog_bufffer HYPERLINK /archives/2005/11/oracle_howto_
16、make_sga_17g.html 如何在Linuux上扩展SSGA超过11.7G共享池(SHAARED_PPOOL_SSIZE)v$shareed_poool_advviceALTER SSYSTEMM FLUSSH SHAARED_PPOOLHow to Keep Objeccts - 重重点使用DBMS_SHAREED_POOOL.KEEEP过程来kkeep oobjectts, UNNKEEP过过程从shaared ppool中移移走pinnned obbjectssexecutee dbmss_sharred_poool.keeep(aaddresss,hassh_vallue);
17、keeep 该匿名名块共享池包括库高高速缓存( libraary caache)、数据字典典高速缓存和和服务器控制制结构(例如如数据库字符符集)。Orracle服服务器用库高高速缓存来提提高执行SQQL语句的性性能;库高速速缓存包括共共享和专用SSQL区。共共享SQL区区包括SQLL语句语法分分析树和执行行路径,而专专用SQL区区存储特定的的会话信息,例例如捆绑变量量、环境和会会话参数、运运行堆栈和缓缓冲区等。Soft paarse使用用的资源包括括CPU 和和libraary caache llatch getsHard paarse是指指要解析的SSQL没有在在libraary caach
18、e中,或或者执行的时时候发现解析析过的SQLL已经ageed outt,就是离开开了librrary ccache,称称为Librrary ccache missees使用的的资源包括额额外的CPUU, libbrary cachee latcch getts, 以及及shareed poool lattch geets.专用SQL区在在每个事务初初始化时创建建,在与专用用SQL区相相关的游标关关闭时被释放放。一个用户户会话能够一一次打开的专专用SQL区区的数量由iinit.oora参数OOPEN_CCURSORRS决定。使使用这两个结结构,Oraacle服务务器能够重用用一条SQLL语句的所
19、有有执行的共同同信息。与此此同时,可以以从专用SQQL区中查询询执行的特定定会话信息。注意游标使用过过程中并不关关闭游标的应应用会继续为为应用分配越越来越多的内内存,部分原原因是为每个个打开的游标标分配了专用用SQL区。库高速缓存中的的专用SQLL区可更进一一步分为永久久区和运行区区。共享池的大小取取决于iniit.oraa文件参数SSHAREDD_POOLL_SIZEE,它是以字字节为单位的的。你必须将将这个值设得得足够大,以以确保有足够够的可用空间间来装载和存存储PL/SSQL块和SSQL语句。共享区经过过长期装卸和和卸载数据对对象会产生许许多碎片,如如果在共享池池中没有足够够的连续空间间
20、用来装载目目标数据,会会产生错误。解决这个问问题的捷径是是运行SQLL命令ALTTER SYYSTEM FLUSHH SHARRED_POOOL。但是是如果在数据据库操作时,经经常遇到共享享池错误,你你必须增大共共享池Librarry cacche包含含 sharred SQQL andd PL/SSQL arreas(PPL/SQLL包括Proocedurres,Functiions,PPackagges,Trriggerr,匿名PLL/SQL块) Sizing the LLibrarry Cacche定义storeed objject(ppackagges,viiews等等等)的内存需求求
21、;定义经常使使用的sqll stattementt的所需内存存1. 初始时将将SHAREED_POOOL_SIZZE设得很大大,运行应用程程序2. 计算sttored objecct所占的内内存SSELECTT SUM(sharaable_mmem) FFROM vv$db_oobjectt_cachheWHEERE tyype = PACKKAGE or tyype = PACKKAGE BBODY or tyype = FUNCCTION or ttype = PROOCEDURRE;3. 应用程序序运行一段时时间后,估计常用ssql语句所所占的内存(不包括动态态SQL)SSELECTT
22、SUM(sharaable_mmem)FFROM vv$sqlaareaWWHERE execuutionss 5;4. 对每个uuser每个个打开的cuursor,需要2500bytess,可在运行高高峰期间使用用查询:SSELECTT SUM(250 * userrs_opeening) FROMM v$sqqlareaa;5. 在测试环环境中,可让一个用用户打开一定定数量的cuursor,运行下列语语句测试共享享内存,然后乘上uuser数SSELECTT 250 * vallue byytes_pper_usserFRROM v$sessttat s, v$sttatnamme nWWH
23、ERE s.staatistiic# = n.staatistiic#ANND n.nname = opeened ccursorrs currrentAND s.sidd = 155;以上内存的和,再加上一点点内存(留给动态SSQL使用),作为你的的应用的理想想内存设置;预留一部分分空间作为大大的内存需要要,避免misss和碎片;一些大的内内存需要: PL/SQQL块的编译译,triggger的编译译;小的objeect不会使使预留空间碎碎片化,反而保证rreservved liist有大的的连续块,一旦从reeserveed lisst中分配的的内存释放它它就返回reeserveed li
24、sst。影响的参数:SSHAREDD_POOLL_RESEERVED_SIZE初始值=SHHARED_POOL_SIZE*10%, 超过50%,oraclle serrver报错错OPEN_CUURSORSS 缺缺省=50定义了涉及分配配给用户进程程的私有SQQL区域的ccursorrs数量, 一个priivate SQL aarea一直直存在直至ccursorr关闭;为了利用更更多的内存给给共享SQLL区域,需要要提高sesssion每每个sesssion允许许多curssor数量,开发人员应应关闭不需要要的curssor节省内内存CURSOR_SPACEE_FOR_TIME 缺省=FFAL
25、SE 布尔尔值设置TRUE,表示以空间间换取时间,共享SQLL区不会被aaged oout直至相相关的currsor被关关闭,因此确确信有足够的的内存,没有有cachee misss;除非RELLOADS in V$LIBRAARYCACCHE一直为为0,否则不不要改变此参参数值若应用为FORRM或使用动动态SQL,设此值为FFALSE - 因因为动态sqql总是不一一致,将占用用过多内存SESSIONN_CACHHED_CUURSORSS 缺省=0 表示没没有cachhe当一个sesssion打算算关闭一个ccursorr时,如果这这个curssor的paarse ccount超超过3次,那
26、那么这个cuursor将将会被加到ssessioon currsor ccache list的的MRU端.当一个seessionn打算parrse一个ssql时,它它会先去seessionn的pga内内搜索sesssion cursoor cacche liist,如果果找到那么会会把这个cuursor脱脱离listt,然后当关关闭的时候再再把这个cuursor加加到MRU端端. sesssion_cacheed_currsor提供供了快速软分分析的功能,提供了比ssoft pparse更更高的性能. 检查系统是否需需要此参数的的方法:对某个典型用户户sessiionselect a.sidd
27、,b.naame,a.valuee fromm v$seesstatt a,v$statnname bb wherre a.sstatisstic#=b.staatistiic#andd (b.nname=sessiion cuursor cachee hitss or b.namme likke paarse ccount%);If few parsees ressult iin hitts,则可提提高此参数,注意它将iincreaase ovveralll demaands oon memmory. ?Data Diictionnary CCacheSelect type,parammet
28、er,gets,getmiisses,roundd(getmmissess/decoode(geets,0,null,gets)*100,2) rratio(%) ffrom vv$rowccache;Goal foor a GGood RRatio SUUM(GETTMISSEES)/SUUM(GETTS) Perfformannce MaanagerrMemmoryData Dictiionaryy Cachhe Hitt%检索需要在共享享池中要求大大于100KK连续空间的的对象:select *fromm v$dbb_objeect_caachewhhere ssharabble_mee
29、m aand tyype inn (PAACKAGEE, PPACKAGGE BODDY, PROCEEDURE, FUUNCTIOON);考察返回的结果果,确认是否否需要pinn到共享池中中,返回结果果中的KEPPT字段如果果是YES,那那么表示该对对象已经固定定在了共享池池中,为NOO,则表示还还没有固定。如果需要固定,使使用下面的语语句:exec dbbms_shhared_pool.keep(SYS.STANDDARD); 数据库默认安装装的时候没有有创建dbmms_shaared_ppool包,所所以需要先创创建该包。cd $ORAACLE_HHOME/rrdbms/adminnsq
30、lpluss “/ aas syssdba”dbmspoool.sqqlDATA BUUFFER 数数据库缓冲区区高速缓存v$db_caache_aadvicee=一堆数据块块(DB_BBLOCK_SIZE*DB_BLLOCK_BBUFFERRS)数据库的任何修修改都在该缓缓冲里完成(LRULRUWW)。所有的块,被读读到内存中后后,它的块头头(dataa blocck heaader)放放在一个Caache bbufferr chaiin 中,CCache buffeer chaain由多个个双向hassh 链表组组成,hassh链表数量量由_db_blockk_hashh_buckkets
31、决定定.每个数据据块头由DBBA(datta bloock adddresss)作为keey,经haash函数后后放在链表上上,它和bllock bbufferr中的bloock一一对对应,数据块块头不包括实实际的数据,仅是一个简简单的描述. 后台进程程扫描hassh链表前,必须获得ccache buffeer chaain laatch,如如果在Cacche Buuffer chainn中找不某块块,就由磁盘盘读入. 若若需要查找某某个 bloock,则根根据 bloock的信息息能计算 hhash vvalue 然后迅速定定位到 haash taable,然然后根据haash taable
32、 信信息去查看是是否存在所想想要的 buuffer ,若有则命命中,若没有有则不命中。显然不可能能根据lisst去逐个搜搜索,这样效效率太低.LRU 就是一一种尽可能将将常用的数据据保留在内存存的算法.当数据库需需要一个数据据缓冲区, 他会从数据据库缓冲区的的LRU 队列列的尾部找一一个空闲的缓缓冲, 将一个数数据块读入, 然后数据据库会把这个个缓冲区放到到LRU 队列列的中部, 如果该缓冲冲被其他程序序用到的话, 那么他会会往队列的头头上移动, 如果这个缓缓冲没有被其其他程序用到到,并且没有被被修改过, 那么他会慢慢慢的移动到到LRU 队列列的尾部, 最终被认为为是空缓冲区区被其他数据据块所
33、覆盖.一旦这个缓缓冲区被修改改过DBWRR 把他从LRUU 队列中移移出, 放到LRUWW 队列 (也叫赃缓缓冲区) 中, 等待DBWRR 把他们批批量写入数据据文件, 然后再把把他们的缓冲冲区连接到LLRU 队列列的尾部.周而复始的的工作.如果查找在一个个阀值内没有有结果或者造造成dirtty缓冲区已已经溢出,在进一步查查找freee bufffer前系统统将发出一个个消息给DBBWR让他可可以将LRUUW队列的缓缓冲区写入磁磁盘. 这个阀值值被叫做这个个阀值被叫做做DBWR scan depthhdirtyy缓冲区大小小可以用 _DB_LAARGE_DDIRTY_QUEUEE和 2*_DD
34、B_BLOOCK_WRRITE_BBATCH 来确定. 前台进程程继续搜索ffree bbufferr.直到 _DBB_BLOCCK_MAXX_SCANN_CNT还还没有发现系系统就会挂起起该进程.记录dirtty bufffers inspeected的的静态变量并并把该进程标标志为freee bufffer wwait.cache 和和 bufffer_poool_keeep是不一一样的,cachee 是如果对对该表全表扫扫描的话,会会把块放在mmru端 ,bbufferr_pooll_keepp是放在 kkeep池中中select tablee_namee,cachhe,bufffer_
35、ppool ffrom ddba_taables wheree tablle_namme=TEEST;将表和索引 CCache 到 SGAA 中从ORACLEE805之后后,支持ALLTER TTABLE tablee_namee STORRAGE(BBUFFERR_POOLL KEEPP)命令了。但是在8005与8i中中,需要设置置buffeer_poool_keeep参数来设设置KEEPP池大小。这这块内存来自自数据缓存区区,也就是从从db_bllock_bbufferrs中分配。在ORACCLE8和88i中,还必必须设置dbb_blocck_lruu_latcches参数数。该参数应应该
36、比2*33*CPU数数量少,但是是要大于1,否否则无法设置置buffeer_poool_keeep。在ORRACLE99i 中则需需要设置DBB_KEEPP_CACHHE_SIZZE来设置KKEEP池内内存的大小。这样将表KKEEP才有有用。而且KKEEP池要要能够容纳得得下才行的将函数Cachhe 到 SSGA 中$ORACLLE_HOMMErdbbmsaddminddbmspoool.sqql;exec dbbms_shhared_pool.keep(procceduree_namee,P);重做日志缓冲区区(LOG_BUFFEER)log bufffer分成成内部的buuffer blo
37、ckks,而这些些blockk各有8个字字节的头部信信息存在于vvariabble arrea中.当重做日志缓冲冲区填满时,将将它的内容写写入联机重做做日志文件。是循环使用用。是数据库库最活跃的情情形,可以用用V$SYSSSTAT视视图进行监控控。查询V$SYSSTTAT视图vvalue域域,它表明用用户进程等待待重做日志缓缓冲区所花费费的时间(此此处valuue的值应接接近于0,否否则应增大初初始化参数文文件的Logg_bufffers的值值):SELECT NAME, VALUUE FROOM V$SSYSSTAAT WHEERE NAAME = redoo log spacee requ
38、uests;PGAv$pgasttatv$ppga_taarget_advicce后台进程v$bgproocess数据库写进程程(DBWRR)(DB_BLOOCK_WRRITE_BBATCH,DB_BLLOCK_MMAX_SCCAN,DBB_WRITTES,DBB_BLOCCK_LRUU_LATCCHES,DDB_BLOOCK_CHHECKPOOINT_BBATCH,DB_BLLOCK_CCHECKSSUM)负责数据文件的的读写和dbb_dataa_bufffer的清理理dbwr负责搜搜集dirtty bufffer,sslavess负责写磁盘盘工作的前提条件件:1. dirtty bufff
39、er超出出了dirtty bufffer llist的tthreshhold.22. serrver pprocesss在bufffercaache中查查找freee bufffer时,则则也可能会通通知DBWnn将dirtty bufffer写入入dataffile.33. DBWWn每3秒会会检查是否有有dirtyy数据要写入入dataffile.44.CKPTT5.tabblespaace offflinee或tabllespaccebegiin bacckup(这这里实际上是是由CKPTT引起).66.dropp objeect7. shutddown (这里实际上上也是由CKKPT引
40、起)建议你使用与存存储数据文件件的物理磁盘盘一样多的DDBWR进程程;DBWR写入数数据文件的任任何修改已经经被记录在重重做日志文件件中.一次checkkpointt的成功过程程是:dbwr搜集dirtty bufffer,交给slave写写磁盘,写完完毕通知dbbwr,然后后dbwr才返返回检查点完完成。增加写进程,同同时要调整ddb_bloock_lrru_lattches参参数,如修改或添添加如下两个个参数: db_wwriterr_proccessess=4 db_bllock_llru_laatchess=8日志写进程(LLGWR)。LOG_CHHECKPOOINT_IINTERVV
41、AL,LOOG_CHEECKPOIINT_TIIMEOUTT,LOG_CHECKKPOINTTS_TO_ALERTTLGWR工作的的主要条件如如下1.用户提交2.有1/3重重做日志缓冲冲区未被写入入磁盘3.有大于1MM重做日志缓缓冲区未被写写入磁盘4.超时5.DBWR需需要写入的数数据的SCNN号大于LGWWR记录的SCNN号,DBWRR触发LGWRR写入归档进程(AARCH)。ARCHIVVE_LOGG_STARRT检查点(CKKPT)。同步数据文件,日志文件和和控制文件CKPT会更新新数据文件/控制文件的的头信息.CKPT工作的的主要条件如如下1.在日志切换换的时候2.数据库用iimmed
42、iiate,ttransaactionn,normmal选项shuttdown数数据库的时候候3.根据初始话话文件LOGG_CHECCKPOINNT_INTTERVALL、LOG_CCHECKPPOINT_TIMEOOUT,FAAST_STTART_IIO_TARRGET的设设置的数值来来确定4.用户触发系统监控和进进程监控进程程(SMONN和PMONN)。调度进程(DDnnn)。MTS_DIISPATCCHERS恢复进程(RRECO)。DISTRIIBUTEDD_TRANNSACTIIONS快照进程(SSNPn)。OB_QUEEUE_PRROCESSS,JOB_QUEUEE_INTEERVA
43、L锁进程(LCCKn)。并行查询进程程(Pnnnn)。PARALLLEL_MIIN_SERRVERS,PARALLLEL_MMAX_SEERVERSS用户和服务器器进程(Snnnn)。回滚v$rollsstatv$waitsstatv$syssttatx$bbhdba_rollbback_ssegs一下事务的流程程:1.分配一个回回滚段2.在在回滚段事务务表中分配一一个事务槽33.分配unndo bllock4.更新数据块块上的ITLL事务槽5.把前镜像记记录在unddo bloock内6.更改数据块块的内容ITL事务槽Inteeresteed Traansacttion LList(IITL
44、)ITL内容包括括:xidTTransaactionn IDUbaUUndo BBlock AddreessLckLLock SStatussxid=Unddo.Seggment.Numbeer+Traansacttion.TTable.Slot.Numbeer+Wraapuba=Adddress.Of.Laast.Unndo.Bllock.UUsed+SSequennce+Laast.Enntry.iin.UNDDO.Reccord.MMapALTER SSYSTEMM SET UNDO_MANAGGEMENTT=MANUUAL SCCOPE=SSPFILEE;SET TRAANSACTTI
45、ON UUSE ROOLLBACCK SEGGMENT RB_LAARGE1;当一个事务开始始的时候,会首先把变变化前的数据据和变化后的的数据先写入入日志缓冲区区,然后把变化化前的数据写写入回滚段,最后才在数数据缓冲区中中修改数据一致性读取coonsisttent rreads假设查询开始的的时候的SCCN 为T,则在查询询所扫描的数数据块中,如如果数据的CCOMMITT SCN 小于T,则查询接接受该数据,如如果COMMMIT SCCN 大于T 或者说还还没有产生CCOMMITT SCN,则则查询会尝试试去回滚段中中查找数据。这是为了保保证数据的读读取的时间点点的一致性,所所以叫一致性性读。
46、我们可以参考vv$rolllstat、v$traansacttion和x$bh 表,在x$bbh 中的classs字段,如如果是回滚段段块,假设回回滚段USNN 为n,则回滚段段头classs 为11+2nn,回滚段块块为12+22n。回滚段的使用、扩展、回缩缩同一个事务不能能跨越回滚段段;一个回滚滚段至少包含含2个extennt。每个回回滚段有一个个回滚段头,回回滚段头是一一个blocck,里面主主要记录了事事务表信息。当产生一个个事务的时候候,就在回滚滚段头的事务务表中记录一一条信息,该该信息中包含含了事务标志志、事务状态态、使用的回回滚段块数等等等信息。使使用时从第一一个exteent的
47、第二二个blocck到最后一一个exteent循环使使用;如果其其中的一个eextentt有未提交的的事物,那么么前面的exxtent不不能跨越该eextentt,只能在22个exteent之间扩扩展新的exxtent,并并修改相应的的节点指针(回回滚段的exxtent 之间是通过过指针连起来来的一个单向向循环的链表表结构);系统回滚段与延延迟回滚段SYSTEM 回滚段是创创建在系统表表空间中,主主要是用于系系统级的事务务和分配普通通事务于其他他回滚段上。当手工创建建数据库后需需要创建普通通回滚段之前前必须首先创创建系统回滚滚段。系统回滚段主要要用于两个方方面。一是系系统事务,比比如针对数据据
48、字典的操作作的trunncatettable 和 dropp tablle 。如果果trunccate ttable or drrop taable 的的过程中没有有成功,则系系统会根据系系统回滚段中中的数据字典典操作信息对对该DDL 操作进行回回退。另一个个方面,就是是延迟回滚段段(Defeerred Rollbback SSegmennt) 。表表空间offfline时时用户申请回回滚,数据库库会将回滚信信息写入系统统回滚段(就就是延迟回滚滚段),等到到onlinne时,在写写入表空间。回滚段的设置和和管理init.orra: ttransaactionns_perr_rolllback_
49、segmeent 和transsactioons,max_rrollbaack_seegmentts1:系统并发事事务数有多少少?(主要是是产生恢复信信息的会话数数+一部分冗冗余数(200)=总回滚滚段数)2:系统是否存存在大查询或或者大是事务务?频繁么?3:能提供给系系统的回滚段段表空间的磁磁盘空间是多多少?不要将回滚段的的MAXEXXTENTSS设为UNLLIMITEED, 回滚滚段所在表空空间也不要设设为AUTOOEXTENND方式, 否则将会使使得由于某个个不正常的事事务导致整个个数据库处于于失控状态。9iundo_reetentiion 表示示在自动管理理模式下,回回滚段中的数数据在
50、被覆盖盖前保留多长长的时间,单单位是秒。这这个参数应该该决定于系统统所中一些大大查询运行的的时间长度,以以避免ORAA-015555 错误。在9i 下创建建非自动管理理的的回滚段而而不使用UNNDO 表空空间,则设置置undo_managgementt为MANUAAL,然后在在系统表空间间中创建一个个回滚段(注意这是必必须的),创建自己己的回滚段表表空间,这时时可以在回滚滚段表空间中中创建回滚段段,创建完毕毕删除系统表表空间中的回回滚段。著名的ORA-015555 问题一致读获取的时时候发现回滚滚段已经被覆覆盖而出现找找不着变化前前映像,也就就是当COMMMIT SSCN 大于于T 查询尝试试
51、去回滚段中中找回数据却却发现回滚段段已经被覆盖盖了(因为回回滚段是循环环使用的),则则会出现著名名的ORA-015555 错误。重做v$syssttatv$llogv$llogfillev$loog_hisstoryalter ssystemm swittch loogfilee;重做记录了块的的改变,包括括回滚段头块块、回滚段块块、数据块,并并且在块改变变之前先记录录重做信息。更改矢量(chhange vectoor)当要改变数数据库的数据据时,这些改改变的细节被被记录为更改改矢量。通过过这些记录,数数据库处理过过程可以被重重现。简而言之,一个个更改矢量就就是记录了一一个数据块的行槽从一个状
52、状态改变到另另一个状态的的过程。也就是redoo的记录单位位是entrry,即:ffile XX,blocck Y,rrow sllot Z。Redo也记录录了数据块(ttable blockk & inndex bblock)前前照,其实记记录的就是uundo,因因为即使没有有commiit,改动也也会被记录到到redo 文件里,这这时的tabble bllock & indeex bloock就是未未提交的最新新状态,如果果此时系统崩崩溃,则需要要redo中中记录的unndo(前照照)进行恢复复,所以reedo记录了了数据块、索引块、回滚块 。ORACLE推推荐logsswitchh时间最
53、好在在15-330分钟之间间。跟redoloogfilee有关的其它它数据库参数数1、log_bbufferr它最好不要要大于5122K或者1228K*CPPU个数。我们可以用下面面的SQL语语句检测loog_bufffer使用用情况:SELECT RBAR.NAME,RBAR.VALUEE,RE.NNAME,RRE.VALLUE,(RRBAR.VVALUE * 1000) / RRE.VALLUE | % radiioFROOM V$SSYSSTAAT RBAAR, V$SYSSTTAT REE WHERRE RBAAR.NAMME = redo buffeer alllocatiion r
54、eetriess ANDD RE.NNAME = reddo enttries;这个比率小于11%才好,否否则增加loog_bufffer的大大小2、log_ccheckppoint_interrvalOracle88.1版本后后log_ccheckppoint_interrval指的的是两次chheckpooint之间间操作系统数数据块的个数数。checckpoinnt时Oraacle把内内存里修改过过的数据块用用DBWR写写到物理文件件,用LGWWR写到日志志和控制文件件。从性能优化来说说log_ccheckppoint_interrval=rredoloogfileesizebyytes
55、/5512byttes3、log_ccheckppoint_timeooutOracle88.1版本后后log_ccheckppoint_timeoout指的是是两次cheeckpoiint之间时时间秒数。OOraclee建议不用这这个参数来控控制,因为事事务(traansacttion)大大小不是按时时间等量分布布的。用loog_cheeckpoiint_inntervaal参数控制制会好一些。禁用此参数数或者按默认认的900。alter ssystemm archhive llog cuurrentt;第二个存档日志志目的地可以以通过初始化化参数LOGG_ARCHHEVE_DDUPLEXX
56、_DESTT设定。LOGG_ARCHHEVE_DDEST和LOG_AARCHEVVE_DUPPLEX_DDEST都可可以存档所有有的联机重作作日志文件。另一个初始始化参数LOOG_ARCCHIVE_MIN_SSUCCEEED_DESST如果设置置了的话,可可以决定一个个重作日志组组必须被成功功存档到的存存档日志目的的地数,在一一个目的地满满或其介质有有错时,该参参数可以防止止Oraclle被冻结。要确保这两两个目的地被被配置在两个个分离的磁盘盘/控制器上,避避免I/O冲突对数据据库性能的影影响。一些参数v$parammeter查看系统当前使使用的所有参参数SET paggesizee 9000
57、0 SET heaad OFFF SET terrm OFFF SELECT DECODDE(isddefaullt, TTRUE, # ) | DECODDE(isddefaullt, TTRUE, RPADD(namee,43), RPADD(namee,45) | = | vaalue FFROM vv$paraameterr ORDEER BY name;查看所有参数是是否已被innit.orra重新设定定SELECT name, issppecifiied FRROM v$obsollete_pparameeter ;查看过时参数和和强调参数SELECT ksppoonm,DEECO
58、DE(ksppooflg, 1,Obbsolette, 22, Unndersccored)FROMM x$kssppo OORDER BY ksspponmm; 查看当前系统中中的所有隐藏藏参数(以ssys身份登登录)SELECT ksppiinm, kksppsttvl, kksppdeesc FRROM x$ksppii x, xx$kspppcv y WHEREE x.innst_idd = usserenvv(Insstancee) anndy.innst_idd = usserenvv(Insstancee) anndx.inndx = y.inddx anddx.kspppinm
59、 like %_&ppar%oorder bytraanslatte(x.kksppinnm, _, );用户参数select * froom v$ffixed_tablee wherre namme likke %NNLS%;SELECT * FROOM V$NNLS_PAARAMETTERS;ALTER SSESSIOON SETT NLS_DATE_FORMAAT=YYYYY-MMM-DD HHH24:MMI:SS;最常被修改的参参数:Shared_pool_size分配给共享享池的内存字字节数随着用用户的需求,可可以按时增加加此值Rollbacck_seggmentss数据库启动动时获
60、取的一一个或多个当当事务处理量量增加或减少少时,可以从从该回滚段名名列表中增加加或删除回滚滚段名Processses可同时访问问数据库的最最大进程数量量sessionn=1.1*proceess+5,一一般而言,ssessioon和proocess是是一一对应的的,5是Orracle后后台进程的ssessioon,10%是提供给rrecurssiveseessionn使用的。db_blocck_bufffers见见 HYPERLINK l _SGA SGA介绍中中的相关内容容shared_pool_size见见 HYPERLINK l _SGA SGA介绍中中的相关内容容log_bufffer
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度固定资产借款合同还款计划与利率调整3篇
- 研学旅行教学课程设计
- 二零二五年度商业地产买卖委托代理合同3篇
- 二零二五年度数据中心安全维护与管理服务合同
- 内部公司会议方案样本(2篇)
- 质量管理课程设计简介
- 会计员安全生产责任制(4篇)
- 运筹学课程设计旅游
- 二零二五年度互联网公司员工持股计划协议范本3篇
- 二氧化碳灭火器的维修安全操作规程(3篇)
- 《论拒不执行判决、裁定罪“执行能力”之认定》
- 工业设计基础知识单选题100道及答案解析
- 山西省晋中市2023-2024学年高一上学期期末考试 化学 含解析
- 过程审核表(产品组评分矩阵评审提问表(评分))-2024年百度过
- 操作手册模板【范本模板】
- 2025年湖北省武汉市高考数学模拟试卷附答案解析
- 【工作总结】建筑中级职称专业技术工作总结
- 江苏省2022年普通高中学业水平合格性考试数学试题(考试版)
- 2023年二轮复习解答题专题三:一次函数的应用方案选取型(原卷版+解析)
- 2024版小学英语新课程标准测试题及答案
- 多旋翼无人机驾驶员执照(CAAC)备考试题库大全-上部分
评论
0/150
提交评论