MYSQL网页设计Oracle内存布局(一)----SGA的地区信息
一个相关的问题是第三方支持的资格问题,尽管直接来自厂商的支持和服务可以一定程度上减缓这个问题,但是,对于有的企业来说,通过强有力的本地化支持显然更有吸引力。oracleSGA的地区信息
SGA(systemglobalarea)体系全局区跟一些必需的背景历程合出去称为实例(Instance).说它是全局区是包括了全局变量和数据布局,是体系区是包括了进进全部OracleInstance的数据布局而不是特定的历程布局.
SGA地区:
SGA也许包含上面四到五种地区:
Thefixedarea
Thevariablearea
Thedatabaseblocksarea
Thelogbuffer
Theinstancelockdatabase(forparallelserverinstances)----OPS&RAC
依据内存的巨细,我们能够把Thefixedarea和Thelogbuffer设为很小.
Thefixedarea:
SGA中的Thefixedarea包括了数千个原子变量,和如latches和指向SGA中别的地区的pointers(指针)等小的数据布局.经由过程对fixedtable内表X$KSMFSV查询(以下)能够取得这些变量的名字,变量范例,巨细和在内存中的地点.
SQL>selectksmfsnam,ksmfstyp,ksmfssiz,ksmfsadr
2>fromx$ksmfsv;
这些SGA变量的名字是埋没的并且几近完整不必要往晓得.可是我们能够经由过程分离fixedtable内表X$KSMMEM取得这些变量的值大概反省它们所指向的数据布局.
SQL>selecta.ksmmmvalfromx$ksmmemawhereaddr=(selectaddrfromx$ksmfsvwhereksmfsnam=’kcrfal_’);
SGA中的fixedarea的每一个构成部分的巨细是流动的.也就是说它们是不依托于别的的初始化参数的设置来举行调剂的.fixedarea中的以是构成部分的巨细相加就是fixedarea的巨细.
Thevariablearea:
SGA中的thevariablearea是由largepool和sharedpool构成的.largepool的内存巨细是静态分派的,而sharedpool的内存巨细即包括了静态办理的内存又包括了永世性的(已分派的)内存.实践上,初始化参数shared_pool_size的巨细设置是指定sharedpool中静态分派的那部份内存的一个也许的SIZES而不是全部sharedpool的SIZES
Sharedpool中永世性的内存包括各类数据布局如:thebufferheaders,processes,sessions,transactionarrays,theenqueueresources,locks,theonlinerollbacksegmentarrays,variousarraysforrecordingstatistics.个中年夜部分的SIZE是依托初始参数的设置来断定的.这些初始参数只能在实例被封闭的形态下才干够举行修正.以是这里说的永世性是针对实例翻开形态下的保存期而言.复杂的一个例子PROCESSES参数.在这个processarrays中的slots用完以后,假如有别的的process想再请求一个process则会失利,由于它们在内存中的巨细是在实例启动时预分派的.不克不及静态修正之.
针对良多永世性的arrays,有良多的X$表都把这些元素做一个纪录而成员布局则作为字段.V$视图的数据就是从这些X$表取得.如V$PROCESS是基于X$KSUPR内表的.V$PROCESS视图不包括X$KSUPR的全体字段.X$KSUPR也没有掩盖SGA历程布局的一切成员.
Thevariablearea的在SGA中的SIZES就即是LARGE_POOL_SIZE,SHARED_POOL_SIZE和永世性的内存arrays的SIZE三者相加.永世性的内存arrays的总的SIZE能够经由过程初始参数的设置来盘算失掉.但是,你必要晓得从参数取得这些arraysizes的方程式,每一个array元素巨细的字节数,另有array头信息的sizes.这些跟Oracle的版本号和OS有关.实践利用中,我们是不用要盘算这个永世性的内存arrays的SIZE的.假如想晓得,一个办法就是在STARTUPNOMOUNT数据库时记下thevariablearea.然后减往参数中LARGE_POOL_SIZE和SHARED_POOL_SIZE的巨细就能够.
Thedatabaseblockarea:
这个地区是数据库块的拷贝.在Oracle8i中,buffer数由DB_BLOCK_BUFFERS指定.每一个buffer的巨细由DB_BLOCK_SIZE指定.以是这个地区的巨细是二者相乘.在Oracle9i中,这个地区的巨细是DB_CACHE_SIZE指定.这个区不包括它们本人的把持布局,只包括databaseblockcopiesdata.每一个buffer的header信息存在于SGA的thevariablearea中.另有latches信息也放在SGA的thevariablearea中.在设置DB_BLOCK_BUFFERS时每4个BUFFERS会影响thevariablearea的1K的SIZE.关于这一点.能够经由过程测试(针对8i而言).
Thelogbuffer:
这个地区的SIZE是由参数LOG_BUFFER指定的.假如OS撑持内存回护,logbuffer将会被两个回护页面包抄起来以避免被一些ORACLE的毛病历程破坏logbuffer.在SGA中,跟别的的如variablearea和databaseblockarea比拟,logbuffer长短常小的.logbuffer分红外部的bufferblocks,而这些block各有8个字节的头部信息存在于variablearea中.
Theinstancelockdatabase
在OPS/RAC设置中,instancelocks用来把持由一切instances共享的资本以串行的体例被进进并利用.SGA中的这个地区所保护的是当地实例所要利用的数据库资本,一切实例和历程城市用到的数据库资本,另有一切实例和历程以后必要的大概已具有的锁(LOCKS).这三个arrays的SIZE分离由参数LM_RESS,LM_PROCS,LM_LOCKS参数指定.(这三个参数是RAC的参数,在单实例顶用SHOWPARAMETER是检察不到的).Theinstancelockdatabase还包括了messagebuffers和别的的structure.可是其SIZE长短常小的.
这个地区的SIZE是没举措在实例启动的时分看到的.这是OracleInternals.能够用ORADEBUG工具检察.SQL>ORADEBUGIPC.至于ORADEBUG工具就不做先容.用这个工具做操纵时必要经由OracleSupport批准.
能够用以下的两种体例DUMPSGA:
SQL>ALTERSESSIONSETEVENTSimmediatetracenameglobal_arealevel2;
大概SQL>ORADEBUGDUMPGLOBAL_AREA2
MySQL对硬件的较低要求是其最大的优势之一,不过需要注意的是:内存越多越好,因为所有的重要数据存储都在内存中完成。 原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜! where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。 这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。 只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。 很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。 groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。 很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。 数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
页:
[1]