仓酷云

标题: MYSQL网页设计Oracle内存布局(三)----Process Memory... [打印本页]

作者: 愤怒的大鸟    时间: 2015-1-16 22:33
标题: MYSQL网页设计Oracle内存布局(三)----Process Memory...
MySQL对硬件的较低要求是其最大的优势之一,不过需要注意的是:内存越多越好,因为所有的重要数据存储都在内存中完成。oracle
TheProcessMemory:

除SGA(SystemGlobalArea)以外,Oracle历程还利用上面三个全局区:

TheProcessGlobalArea(PGA)

TheUserGlobalArea(UGA)

TheCallGlobalArea(CGA)

良多人都弄不分明PGA和UGA二者之间的区分,实践上二者之间的区分跟一个历程和一个会话之间的区分是相似的.只管说历程和会话之间一样平常都是一对一的干系,但实践上比这个更庞大.一个很分明的情形是MTS设置,会话常常会比历程多很多.在这类设置下,每个历程会有一个PGA,每个会话会有一个UGA.PGA所包括的信息跟会话是无任何干联的,而UGA包括的信息是以特定的会话为基本的.



ThePGA:

历程全局区(PGA)便可以了解为ProcessGlobalArea,也能够了解为ProgramGlobalArea.它的内存段是在历程公有区(ProcessPrivateMemory)而不是在共享区(SharedMemory).它是个全局区意味着它包括了一切代码有大概进进的全局变量和数据布局,可是它是不被一切历程共享的.每一个Oracle的服务器历程都包括有属于本人的PGA,它只包括了本历程的相干特定信息.PGA中的布局不必要由latches来回护,由于别的的历程是不克不及进进到这内里来会见的.

PGA包括的是有关历程正在利用的操纵体系资本信息和历程的形态信息,而别的的历程所利用的Oracle的共享资本是在SGA中.PGA是公有的而不是共享的,这个机制是有需要的,由于当历程逝世失落后能够把这些资本扫除和开释失落.

PGA包括两个次要地区:FixedPGA和VariablePGA或称为PGAHeap.FixedPGA的感化跟FixedSGA是相似的,都包括原子变量(不成分的),小的数据布局和指向VariablePGA的指针.

VariablePGA是一个堆.它的Chunks能够从FixedTableX$KSMPP检察失掉,这个表的布局跟后面有提到的X$KSMSP是不异的.PGAHEAP包括了一些有关FixedTable的永世性内存,它跟某些参数的设置有依附干系.这些参数包括DB_FILES,LOG_FILES,CONTROL_FILES.



TheUGA:

UGA(UserGlobalArea)包括的是特定会话的信息,有以下一些:

所翻开游标的延续和运转工夫内的地区

包的形态信息,特定的变量

Java会话形态

能够用的ROLES

被ENABLE的跟踪事务

起感化的NLS参数设置

翻开的DBLINK

会话的出口把持

跟PGA一样,UGA也由两区构成:FixedUGA和VariableUGA,也称为UGAHEAP.FixedUGA包括了约莫70个原子变量,小的数据布局和指向VariableUGA的指针.

UGAHEAP中的Chunks能够从它们本人的会话中经由过程检察表X$KSMUP取得相干信息,这个表的布局跟X$KSMSP是一样的.UGAHEAP包括了一些有关fixedtables的永世性内存段,跟一些参数的设置有依附干系.这些参数有OPEN_CURSORS,OPEN_LINKS,和MAX_ENABLE_ROLES.

UGA在内存中的地位依附于会话的设置体例.假如会话毗连的设置体例是公用服务器形式(DDS)便是一个会话对应一个历程,则UGA是放在PGA中的.在PGA中,FixedUGA是个中的一个Chunk,而UGAHEAP是PGA的一个子堆(Subheap).假如会话毗连是设置为共享服务器形式(MTS),FixedUGA是SHAREDPOOL中的一个Chunk,而UGAHEAP则是SHAREDPOOL中的子堆(Subheap)



TheCGA:

跟别的的全局区分歧,CallGlobalArea是长久性存在的.它只要在挪用数据时代存在,通常为在对实例的最初级其余挪用时才必要CGA,以下:

剖析一个SQL语句

实行一个SQL语句

掏出一个SELECT语句的输入

一个独自的CGA在递回挪用时是必要的.在SQL语句的剖析过程当中,对数据字典信息的递回挪用是必要的,由于要对SQL语句举行语法剖析,另有在语句的优化时代要盘算实行企图.实行PL/SQL块时在处置SQL语句的实行时也是必要递回挪用的,在DML语句的实行时要处置触发器实行也是必要递回挪用的.

不论UGA是放在PGA中仍是在SGA中,CGA都是PGA的一个子堆(Subheap).这个现实的一个主要推论是在一个挪用的时代会话必需是一个历程.关于在一个MTS的Oracle数据库历程使用开辟时关于这一点的了解是很主要的.假如响应的挪用较多,就得增添processes的数目以顺应挪用的增添.

没有CGA中的数据布局,CALLS是没法事情的.而实践上跟一次CALL相干的数据布局一样平常都是放在UGA中,如SQLAREA,PL/SQLAREA和SORTAREA它们都必需在UGA中,由于它们要在各CALLS之间要一向存在而且可用.而CGA中所包括的数据布局是要在一次CALL停止后可以开释的.比方CGA包括了关于递回挪用的信息,间接I/OBUFFER等另有别的的一些一时性的数据布局.

JavaCallMemory也是在CGA中.这一段内存比Oracle的别的内存段办理得更麋集.它分红三个Space:StackSpace,NewSpace,OldSpace.在NewSpace和OldSpace中不再被参考利用的Chunks,依据它们在利用时代的长度及SIZE的分歧,在挪用的实行过程当中将被当做不必的Chunks搜集起来.NewSpaceChunks良多次的不必的Chunks的重复搜集过程当中没有被搜集的Chunks将会被放到OldSpaceChunks中.这是在Oracle内存办理中独一的一个宝物搜集(garbagecollection),别的的Oracle内存段都是开释DeadChunks.



ProcessMemoryAllocation

跟SGA纷歧样的是,SGA在实例启动以后SIZE就已是定上去的,而PGA的SIZE是会增加的.经由过程利用malloc()大概sbrk()体系挪用来为历程增添堆数据段巨细而使得PGA的SIZE的增加.OS的新假造内存会被做为PGAHEAP中的一个新的区被加到PGA中来.这些区一样平常只几KB年夜,假如有必要,Oracle将会给分派上千个区.

操纵体系对每一个历程的堆数据段的增加是无限制的.年夜部分的情形是操纵体系的内存参数举行限定(kernelparameter:MAXDSIZ),有一些情形它的缺省值是能够以每一个历程为基准举行修正的.关于一切的历程,操纵体系对全部假造内存也有一个体系全局性的限定,这个限定跟体系的SWAPSPACE相干.一旦凌驾了这两个限定,Oracle的历程在实行中会碰到ORA-4030毛病.

ORA-4030这个毛病的发生一样平常不是由于每一个历程的资本限定而是由于SWAPSPACE空间不敷形成.为了诊断这个成绩可使用操纵体系的一些选项来检察SWAPSPACE的利用情形.别的,在一些操纵体系中,Oracle包括了一个工具叫maxmem,它能够用来检察每一个历程能够被分派的堆数据段的最年夜SIZE和哪个限定是第一次凌驾的.

假如这个成绩的呈现是由于SWAPSPACE空间不敷,并且换页的举措十分频仍并且较多,则必要削减体系一级的假造内存的利用,这个能够经由过程削减历程数也能够经由过程削减每一个历程的内存限定.假如换页举措不频仍并且对照少,则必要调年夜SWAPSPACESIZE.



ProcessMemoryDeallocation:

Oracle堆的增加比它们的压缩要来得简单,固然它们的SIZE也是能够压缩的.在V$MYSTAT和V$SESSTAT视图中,session的统计信息sessionugamemory和sessionpgamemory分离显现了以后session的UGA和PGA的内存巨细,包括外部的余暇空间.响应的统计信息sessionugamemorymax和sessionpgamemorymax分离显现了在session的保存时代所利用过得最年夜的UGA和最年夜的PGA.

UGA和PGA只要在特定的操纵后才会压缩,这些操纵如一次磁盘排序的兼并操纵,大概用程序DBMS_SESSION.FREE_UNUSED_USER_MEMORY显现开释内存.只要全部freeheapextent会被开释给父堆大概是历程堆数据段,以是有一部分的外部freespace在内存开释后仍旧存在于subheap中.

在年夜多的操纵体系情况下,Oracle是不会削减历程堆数据段也不会开释假造内存并将其返还给操纵体系的.以是从一个操纵体系的检察中,一个Oracle的历程将会把假造内存SIZE作为HWM而保存着.假如有需要时,Oracle是会将一些没用的假造内存页换页进来的.由于这个缘故原由,有关Oracle历程的假造内存页的操纵体系统计信息都是很难了解的.以是一样平常用的是Oracle外部统计信息来取代利用操纵体系的统计信息.

程序DBMS_SESSION.FREE_UNUSED_USER_MEMORY只能在毗连是设置为MTS形式的使用才干利用.这个最好是少点利用,由于它只开释年夜的包的array变量所占用的内存返还给LargePool大概是SharedPool.一样平常地,UGAHEAP的内存应当起首被开释,能够经由过程指派新的空array给array变量利用,也能够经由过程挪用程序DBMS_SESSION.RESET_PACKAGE.










尽管DBaaS模式有缺点,但它还是适合某些客户群体,这为解决方案提供商提供了新的商机。鉴于云服务的增长,解决方案提供商除了拥抱这些技术还有什么选择呢?如果他们不这样做,他们就会冒着被竞争对手击败的风险。但他们不能只想到如何把DBaaS的利润率与企业内部系统相比较。
作者: 因胸联盟    时间: 2015-1-19 16:26
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
作者: 只想知道    时间: 2015-1-24 14:18
可以动态传入参数,省却了动态SQL的拼写。
作者: 乐观    时间: 2015-2-1 16:44
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
作者: 活着的死人    时间: 2015-2-7 09:49
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
作者: 若相依    时间: 2015-3-6 20:19
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
作者: 爱飞    时间: 2015-3-13 08:09
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
作者: 变相怪杰    时间: 2015-3-20 17:16
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2