试谈ORACLE的工作机制44250.docx
《试谈ORACLE的工作机制44250.docx》由会员分享,可在线阅读,更多相关《试谈ORACLE的工作机制44250.docx(184页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ORACLE的工作机制体系结构实例Oracle 运行的时候候,在内存中中会要开辟一一个区间,这这个区间主要要是用于从磁磁盘(数据文文件)中读出出数据后的一一个在内存的的缓存和处理理。而处理这这些数据的操操作,需要有有一些系统的的后台进程,这这些进行在OOraclee数据库启动动的时候,就就开始运行,一一直在响应前前台的操作。实实际上,这一一个区间(SSGA)和这这些后台进程程合在一起,就就称为 实例例。实例是包包括SGA区区和后台进程程两个部分的的。 数据库启动执行行若干动作,经经历三个阶段段,分别是未未加载、加载载和打开。1、未加载(nnomounnt) 可以把数据据库启动的这这一阶段看作作
2、是Oraccle实例的的启动。这种种方式启动下下可执行:重建控控制文件、重重建数据库。这这一启动命令令: 读取数据库库参数文件。 启动所需的的后台进程并并按参数文件件中的定义分分配内存。 将进展情况况写入告警日日志文件中。2、加载(moount) 在实例启动动加载阶段,数数据库参数文文件中指定的的控制文件被被读取。记住住控制文件将将数据库各部部分联系在一一起。实例从从控制文件中中找到下列信信息,然后将将进展写入告告警日志文件件。这种方式式启动下可执执行:数据库库日志归档、数数据库恢复、重重新命名一些些数据库文件件: 所有数据文文件和重做日日志文件的名名称和位置。 数据库名。 最新系统更更改号(
3、S C N)。3、打开(oppen) 包含在数据据库中的每个个联机数据文文件在数据库库打开前必须须被同步。在在数据库打开开阶段: 所有联机数数据文件的头头与控制文件件信息相比较较。 所有文件同同步后,数据据库打开。当数据库关闭时时,取决于它它的关闭方式式执行不同的的任务:正常(norrmal)在在所有的用户户离线后发生生的正常关闭闭。事务(traansacttionall)事务关闭闭就是当所有有的用户执行行完当前的事事务后,将用用户从数据库库上清除。立即(immmediatte)立即关关闭就是从数数据库清除所所有当前用户户之后,回退退所有未完成成的操作。异常(aboort)异常常关闭没有给给数
4、据库任何何整理的机会会。这种方式式关闭后需要要实行崩溃恢恢复。实例是数据管理理的核心它做所有的的工作,而数数据库存储所所有的数据。其他启动方式:startuup resstrictt 约束方式启动这种方式能够启启动数据库,但但只允许具有有一定特权的的用户访问 非特权用户访问问时,会出现现以下提示: ERROR: ORA-001035: ORACCLE 只允允许具有 RRESTRIICTED SESSIION 权限限的用户使用用 startuup forrce 强制启动方式 当不能关闭数据据库时,可以以用starrtup fforce来来完成数据库库的关闭 先关闭数据库,再再执行正常启启动数据库
5、命命令 startuup pfiile=参数数文件名 带初始化参数文文件的启动方方式 先读取参数文件件,再按参数数文件中的设设置启动数据据库 startuup EXCCLUSIVVE*一个Delette操作的流流程:1、 检查语法、语义义(V$ROWWCACHEE :data dictiionaryy cachhe),计算HASSH VALLUE,在ssessioon的UGA中进行匹匹配(sesssion_cached_ccursorrs),如果UGA中没有有,在libbrary chachhe 中匹配配(librrary cchachee lockk latcch 保护 libraary c
6、hhache lock 对对地址堆的访访问,而后 libraary chhache pin llatch 保护 liibraryy cachhe pinn 对librrary ccache中中sql相关关信息的访问问)2、 根据执行计划读读取数据:ccache buffeer chaain laatch 保保护能定位到到buffeer heaader 并并 pin 住该该块(如果没有bbufferr headder,就 pin 住某个空块块(没有空块块就产生 ffree bbufferr waitts),并到数据据文件中读取取)。如果此此时有某个进进程想访问该该块,将产生生 bufffer b
7、uusy waaits 。3、 在redo llog buffeer中记录ddeletee操作的细节节。(包括回滚滚段前后镜像像、数据块前后镜镜像)。4、 在相应回滚段段段头的事务表表中创建一个个undo条条目,把将要删除除的记录创建建前镜像,存放放到Undoo Blockk中。5、 在Bufferr Cachhe中的相应应数据块上删删除记录,并并且标记相应应的数据块为为Dirtyy。提交(COMMMIT)1.Oraclle产生一个个SCN2.在回滚段事事务表中标记记该事务状态态为commmited33.LGWRR Flussh Logg Bufffer到日志志文件3.如如果此时数据据块仍然在
8、BBufferr Cachhe中,那么么SCN将被被记录到Bllock HHeaderr上,这被称称为快速提交交(fastt commmit)4.如果dirrty blockk已经被写回回到磁盘,那那么下一个访访问这个bllock的进进程将会自回回滚段中获取取该事务的状状态,确认该该事务被提交交。然后这个个进程获得提提交SCN并并写回到Bllock Headeer上。这被被称为延迟块块清除(deelayedd blocck cleeanoutt)。内存SGA(系统全全局区、共享享全局区)、PGA(进进程全局区、私私有全局区)内存分配原则:10%冗余内存存,OS SSYS进程(约约1.6G),O
9、S BBUFFERR(约0.8GG),数据库连连接消耗内存(每个连连接约58M),PGA(每每个连接约22M,V$PGAA_TARGGET_ADDVICE),SGASGAv$sgasttat 注意 showw paraameterr sga_max_ssizeOracle的的内存:l 软件代码区l 系统全局区l 进程全局区:包包含单个进程程的数据和控控制信息l 排序区System Global AreaFixed SizeVariable SizeDatabase BuffersRedo buffersLarge poolShared PoolLibrary cacheData diction
10、ary 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 areaa是由larrge poool和
11、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、.所所以这里说的的永久性是针针对实例打开开状态下的生生存期而言.The varriablee areaa的在SGAA中的SIZZES就等于于LARGEE_POOLL_SIZEE,SHARRED_POOOL_SIIZE和永久久性的内存aarrayss的SIZEE三者相加.永久性内存arrrays的的SIZE=the vvariabble arrea - (LARGGE_POOOL_SIZZE+SHAARED_PPOOL_SSIZE).数据缓冲区命中中率v$syssstat这里命中率的的计算应该是是令 x = physiical rreads direcct + pphysiccal reeads
13、 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 raadio-99.8099291假如共享池的的命中率低于于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 sselectt
15、 namee,valuue froom v$ssysstaat2 wherre namme in(redoo entrries,redoo bufffer alllocattion rretriees);NAME VVALUE- -redo eentriees 23225719redo bbufferr alloocatioon rettries 10假如 reddo bufffer aallocaation retriies/ rredo eentriees 的比例例超过1%我我们就可以考考虑增大loog_bufffer如何在Linuux上扩展SSGA超过11.7G共享池(SHAARED_P
16、POOL_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); - keeep 该匿名名块共享池包括库高高速缓存( libraary caache)、数据字典典高速缓存和和
17、服务器控制制结构(例如如数据库字符符集)。Orracle服服务器用库高高速缓存来提提高执行SQQL语句的性性能;库高速速缓存包括共共享和专用SSQL区。共共享SQL区区包括SQLL语句语法分分析树和执行行路径,而专专用SQL区区存储特定的的会话信息,例例如捆绑变量量、环境和会会话参数、运运行堆栈和缓缓冲区等。Soft paarse使用用的资源包括括CPU 和和libraary caache llatch getsHard paarse是指指要解析的SSQL没有在在libraary caache中,或或者执行的时时候发现解析析过的SQLL已经ageed outt,就是离开开了librrary c
18、cache,称称为Librrary ccache missees使用的的资源包括额额外的CPUU, libbrary cachee latcch getts, 以及及shareed poool lattch geets.专用SQL区在在每个事务初初始化时创建建,在与专用用SQL区相相关的游标关关闭时被释放放。一个用户户会话能够一一次打开的专专用SQL区区的数量由iinit.oora参数OOPEN_CCURSORRS决定。使使用这两个结结构,Oraacle服务务器能够重用用一条SQLL语句的所有有执行的共同同信息。与此此同时,可以以从专用SQQL区中查询询执行的特定定会话信息。注意游标使用过过程
19、中并不关关闭游标的应应用会继续为为应用分配越越来越多的内内存,部分原原因是为每个个打开的游标标分配了专用用SQL区。库高速缓存中的的专用SQLL区可更进一一步分为永久久区和运行区区。共享池的大小取取决于iniit.oraa文件参数SSHAREDD_POOLL_SIZEE,它是以字字节为单位的的。你必须将将这个值设得得足够大,以以确保有足够够的可用空间间来装载和存存储PL/SSQL块和SSQL语句。共共享区经过长长期装卸和卸卸载数据对象象会产生许多多碎片,如果果在共享池中中没有足够的的连续空间用用来装载目标标数据,会产产生错误。解解决这个问题题的捷径是运运行SQL命命令ALTEER SYSSTE
20、M FFLUSH SHAREED_POOOL。但是如如果在数据库库操作时,经经常遇到共享享池错误,你你必须增大共共享池Librarry cacche包含含 sharred SQQL andd PL/SSQL arreas(PPL/SQLL包括Proocedurres, Functtions, Packaages, Triggger, 匿名PL/SQL块) Sizing the LLibrarry Cacche定义storeed objject(ppackagges,viiews等等等)的内存需求求;定义经常使使用的sqll stattementt的所需内存存1. 初始时将将SHAREED_PO
21、OOL_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 SUM(sharaable_mmem)FFROM vv$sqlaareaWWHERE execuu
22、tionss 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 nWWHERE s.staatistiic# = n.staatistiic#ANND n.nname =
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试谈 ORACLE 工作 机制 44250
限制150内