DBA-I 第一章 ORACLE體系結(jié)構(gòu)(二).doc_第1頁(yè)
DBA-I 第一章 ORACLE體系結(jié)構(gòu)(二).doc_第2頁(yè)
DBA-I 第一章 ORACLE體系結(jié)構(gòu)(二).doc_第3頁(yè)
DBA-I 第一章 ORACLE體系結(jié)構(gòu)(二).doc_第4頁(yè)
DBA-I 第一章 ORACLE體系結(jié)構(gòu)(二).doc_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

ORACLE體系結(jié)構(gòu)(二)我們前面學(xué)習(xí)了ORACLE如何實(shí)現(xiàn)客戶(hù)的請(qǐng)求并連接到實(shí)例??蛻?hù)端請(qǐng)求通過(guò)LISTENER審核,LISTENER會(huì)指示ORACLE分配一個(gè)服務(wù)器進(jìn)程,并在客戶(hù)端進(jìn)程和服務(wù)器進(jìn)程間建立了連接會(huì)話(huà)。我們稱(chēng)專(zhuān)有連接會(huì)話(huà),ORACLE實(shí)例提供的是專(zhuān)有服務(wù)。就是所謂的dedicate模式。默認(rèn)情況下就是dedicate模式。ORACLE除了提供專(zhuān)有連接會(huì)話(huà),還提供了共享連接會(huì)話(huà),ORACLE實(shí)例也提供了共享服務(wù)。我們接下來(lái)學(xué)習(xí)ORACLE提供的共享式服務(wù)器是怎么樣實(shí)現(xiàn)的,有什么優(yōu)勢(shì)。共享服務(wù)器大家可能是第一次接觸,有點(diǎn)不太好理解,這個(gè)不著急,現(xiàn)階段只要初步了解下可以了。我舉個(gè)例子:你們誰(shuí)安裝的的oracle是在linux環(huán)境下的?你建立一個(gè)sqlplus會(huì)話(huà),看看是不是多出一個(gè)oracle的OS進(jìn)程oracle1178711760014:53pts/000:00:00rlwrapsqlplusfuture/futurefang我們看到,專(zhuān)有模式下。新建一個(gè)會(huì)話(huà),就多出了一個(gè)進(jìn)程。但是共享模式和這個(gè)不一樣,你開(kāi)很多個(gè)會(huì)話(huà)在服務(wù)器上表現(xiàn)為1個(gè)進(jìn)程。就是1個(gè)進(jìn)程多個(gè)會(huì)話(huà)一起用,就是共享服務(wù)器的特點(diǎn)。那我再問(wèn)下大家,共享模式下,新開(kāi)一個(gè)會(huì)話(huà),進(jìn)程一定不會(huì)增加嗎?不一定的,有可能還是會(huì)增加。比如我們假設(shè)一個(gè)共享服務(wù)器管理10個(gè)會(huì)話(huà),現(xiàn)在已經(jīng)有10個(gè)了,再連一個(gè)就是11個(gè),哪么還是會(huì)增加一個(gè)進(jìn)程的。共享服務(wù)器模式的主要優(yōu)勢(shì)就是節(jié)約內(nèi)存。好,有了上面的經(jīng)驗(yàn),我們來(lái)看看共享模式的特點(diǎn)。先看下書(shū)店的書(shū)柜陳列圖我們前面講的都是專(zhuān)有服務(wù)模式的連接。我們?cè)賮?lái)看共享服務(wù)器模式下,靜安圖書(shū)分店是如何服務(wù)的。當(dāng)小麗發(fā)出一個(gè)請(qǐng)求,要批發(fā)1000本中國(guó)機(jī)械出版社2009年后出版的經(jīng)濟(jì)類(lèi)書(shū),并通過(guò)輪船運(yùn)到寧波自己的公司,并按日期進(jìn)行排序捆綁存放存入小麗公司的倉(cāng)庫(kù)。如果采用共享服務(wù)模式,那涉及下面幾個(gè)動(dòng)作:店里為小麗(用戶(hù)進(jìn)程1)分配了售貨員小英(服務(wù)器進(jìn)程1)為她服務(wù)小英幫小麗取了這1000本中國(guó)機(jī)械出版社2009年后出版的經(jīng)濟(jì)類(lèi)書(shū)小英并按出版日期排完序,并進(jìn)行包裝。并反饋給小麗檢查是否按自己規(guī)定的順序包裝。小英將包裝后的書(shū)放到司機(jī)小思(服務(wù)器進(jìn)程2)貨車(chē)?yán)?,這樣司機(jī)小思來(lái)服務(wù)小麗,幫這批貨運(yùn)道碼頭。司機(jī)小思將貨開(kāi)往碼頭這時(shí)售貨員小英可以為小勇(用戶(hù)進(jìn)程2)去賣(mài)書(shū)。也就是一個(gè)售貨員小英跟小勇建立了會(huì)話(huà),并進(jìn)行服務(wù)。小英可以服務(wù)多個(gè)不同會(huì)話(huà)的任務(wù)(一、小麗批發(fā)經(jīng)濟(jì)類(lèi)書(shū)。二、小勇買(mǎi)書(shū)),而不需要小英一直為小麗服務(wù),所以也不需要等待小麗在請(qǐng)小英下一個(gè)動(dòng)作前無(wú)所事事。這時(shí)小英既知道小麗的情況,也知道小勇的情況。對(duì)應(yīng)于ORACLE就是一個(gè)服務(wù)器進(jìn)程可以有多個(gè)會(huì)話(huà)(SESSION),多個(gè)會(huì)話(huà)信息需要讓一個(gè)服務(wù)器共享,所以叫共享服務(wù)器進(jìn)程。司機(jī)小思幫忙把貨搬到船上,他的任務(wù)結(jié)束,開(kāi)車(chē)回書(shū)店。船長(zhǎng)小川(服務(wù)器進(jìn)程3)將貨運(yùn)到寧波。司機(jī)小寧(服務(wù)器進(jìn)程4)將貨運(yùn)到小麗寧波的公司。小麗這次的批發(fā)任務(wù)共有四個(gè)人幫它完成(為了簡(jiǎn)化,這里省略了ORACLE調(diào)度器參與的角色),這些人都是受靜安書(shū)店的委托服務(wù)于小麗。而每個(gè)服務(wù)器進(jìn)程都會(huì)在執(zhí)行完任務(wù)后反饋給客戶(hù)會(huì)話(huà)信息上圖對(duì)應(yīng)于ORACLE就是一個(gè)會(huì)話(huà)可以由多個(gè)服務(wù)器進(jìn)程來(lái)完成。而在專(zhuān)有服務(wù)模式下,那小英要一直為小麗服務(wù),一直到把貨運(yùn)到小麗公司為止,它們建立的會(huì)話(huà)就結(jié)束了,而且進(jìn)程也隨之消亡。在這期間小英要既當(dāng)營(yíng)業(yè)員、司機(jī)、船長(zhǎng),而且這期間小麗要有事情要處理,比如去銀行轉(zhuǎn)帳,那么小英只有等待小麗回來(lái)才能繼續(xù)工作,而不能去服務(wù)其他顧客,這很顯然大量浪費(fèi)了小英的效率。在ORACLE模式下,專(zhuān)有模式會(huì)話(huà)進(jìn)程和服務(wù)器進(jìn)程一一對(duì)應(yīng),服務(wù)器進(jìn)程要服務(wù)到結(jié)束,最后一起消亡。 而在共享服務(wù)模式下,那小英在賣(mài)完書(shū)后,即使小麗這個(gè)時(shí)候去收銀臺(tái)交費(fèi),小英也不需要等待她,馬上可以去處理新的客戶(hù)小勇,這樣售貨員的效率就提高了。即使小麗又要重新需要小英處理問(wèn)題,如小麗拿了收銀憑據(jù),小英就要停下小勇的服務(wù),把小麗的書(shū)給她,并輸入電腦,再回頭處理小勇的工作。在ORACLE模式下,共享模式,用戶(hù)進(jìn)程不需要服務(wù)器進(jìn)程處理的的時(shí)候,服務(wù)器進(jìn)程可以服務(wù)別的用戶(hù)進(jìn)程,當(dāng)原來(lái)的用戶(hù)進(jìn)程繼續(xù)請(qǐng)求這個(gè)服務(wù)器進(jìn)程時(shí),可以打斷后一個(gè)用戶(hù)進(jìn)程,繼續(xù)處理前一個(gè)用戶(hù)進(jìn)程的工作。這里小麗再次找小英時(shí),她們已經(jīng)彼此認(rèn)識(shí),已經(jīng)是朋友了,不需要再重新打交道,重新建立信任關(guān)系,節(jié)約了之間溝通的成本。那小英知道了小麗的姓名,任務(wù)起始時(shí)間,結(jié)束時(shí)間,當(dāng)前的狀態(tài),任務(wù)的目的等。也同樣知道了小勇相應(yīng)的信息。這些是會(huì)話(huà)信息,會(huì)話(huà)信息對(duì)于所有的進(jìn)程可以共享的。開(kāi)始備課上節(jié)課 我們開(kāi)始DBA-I的第一節(jié)課給大家整體介紹了下Oracle 服務(wù)器的體系結(jié)構(gòu)及其主要組件,我們簡(jiǎn)單回顧下。第一個(gè)問(wèn)題:ORACLE SERVER由什么組成?ORACLE服務(wù)由一個(gè)實(shí)例和一個(gè)數(shù)據(jù)庫(kù)組成。ORACLE SERVER的概念是,一個(gè)ORACLE SERVER就是一個(gè)DATABASE 庫(kù)文件加上一個(gè)INSTANCE,按我們圖書(shū)館的例子就是上海圖書(shū)館的靜安書(shū)城店提供的就是一個(gè)ORACLE SERVER。第二個(gè)問(wèn)題:ORACLE實(shí)例(INSTANCE)由什么組成?主內(nèi)存結(jié)構(gòu)(SGA)+后臺(tái)進(jìn)程那RAC的概念是什么?RAC的概念就是多個(gè)實(shí)例關(guān)聯(lián)一個(gè)數(shù)據(jù)庫(kù)。ORACLE SERVER = 1個(gè)DB + 1個(gè)INSTANCEINSTANCE = MEMORY + PROCESSRAC = N個(gè)ORACLE SERVER = 1個(gè)DB + N個(gè)INSTANCE第三個(gè)問(wèn)題:分別簡(jiǎn)述下SGA,PGA,UGA是什么?第四個(gè)問(wèn)題:我們知道ORACLE的物理結(jié)構(gòu)指的是OS里直接能查看到的文件。那ORACLE DB有哪幾種物理文件? Control files Data files Redo log files第五個(gè)問(wèn)題:簡(jiǎn)單說(shuō)下專(zhuān)有服務(wù)器和共享服務(wù)器的區(qū)別?專(zhuān)有服務(wù)器一個(gè)服務(wù)器進(jìn)程專(zhuān)門(mén)服務(wù)一個(gè)用戶(hù)進(jìn)程,即使用戶(hù)進(jìn)程空閑,服務(wù)器進(jìn)程還是繼續(xù)等待隨時(shí)為該會(huì)話(huà)服務(wù),不能去干其他事情。專(zhuān)有模式會(huì)話(huà)進(jìn)程和服務(wù)器進(jìn)程一一對(duì)應(yīng),服務(wù)器進(jìn)程要服務(wù)到結(jié)束,最后一起消亡。共享服務(wù)器一個(gè)服務(wù)器進(jìn)程可以服務(wù)多個(gè)用戶(hù)進(jìn)程,一個(gè)用戶(hù)進(jìn)程也可以被多個(gè)服務(wù)器進(jìn)程服務(wù)。共享模式,用戶(hù)進(jìn)程不需要服務(wù)器進(jìn)程處理的的時(shí)候,服務(wù)器進(jìn)程可以服務(wù)別的用戶(hù)進(jìn)程,當(dāng)原來(lái)的用戶(hù)進(jìn)程繼續(xù)請(qǐng)求這個(gè)服務(wù)器進(jìn)程時(shí),可以打斷后一個(gè)用戶(hù)進(jìn)程,繼續(xù)處理前一個(gè)用戶(hù)進(jìn)程的工作。大家結(jié)合我們圖書(shū)館 小麗買(mǎi)書(shū),售貨員小麗,司機(jī)小思,船長(zhǎng)小川,司機(jī)小寧為小麗服務(wù)的例子 再理解下。我們上節(jié)課講到,在共享服務(wù)模式下,那小英在賣(mài)完書(shū)后,即使小麗這個(gè)時(shí)候去收銀臺(tái)交費(fèi),小英也不需要等待她,馬上可以去處理新的客戶(hù)小勇,這樣售貨員的效率就提高了。即使小麗又要重新需要小英處理問(wèn)題,如小麗拿了收銀憑據(jù),小英就要停下小勇的服務(wù),把小麗的書(shū)給她,并輸入電腦,再回頭處理小勇的工作。這是小麗再次找小英時(shí),她們已經(jīng)彼此認(rèn)識(shí),已經(jīng)是朋友了,不需要再重新打交道,重新建立信任關(guān)系,節(jié)約了之間溝通的成本。那小英知道了小麗的姓名,任務(wù)起始時(shí)間,結(jié)束時(shí)間,當(dāng)前的狀態(tài),任務(wù)的目的等。也同樣知道了小勇相應(yīng)的信息。這些是會(huì)話(huà)信息,會(huì)話(huà)信息對(duì)于所有的進(jìn)程可以共享的。所以這里涉及進(jìn)程中共享的信息如下:會(huì)話(huà)信息:這次任務(wù)起始時(shí)間,結(jié)束時(shí)間,當(dāng)前的狀態(tài),排序的反饋信息、任務(wù)的目的等。CURSOR信息: CURSOR是什么?還有如小麗批發(fā)這1000本書(shū)的方法等在也是可以讓另一個(gè)售貨員共享的,什么意思呢?就有點(diǎn)類(lèi)似 管理中的專(zhuān)人負(fù)責(zé)的特點(diǎn),你只負(fù)責(zé)某一件事情,整體類(lèi)似于流水線(xiàn)的概念。這在ORACLE中通過(guò)SQL語(yǔ)句實(shí)現(xiàn),并將執(zhí)行計(jì)劃記錄下來(lái),我們稱(chēng)共享SQL 區(qū),放在共享池中。但是對(duì)于每發(fā)送一個(gè)語(yǔ)句,在專(zhuān)有模式,相對(duì)于服務(wù)器進(jìn)程是私有的,所以我們稱(chēng)私有SQL區(qū),輸入進(jìn)程內(nèi)存。但是對(duì)于共享服務(wù)模式,一個(gè)會(huì)話(huà)的信息可以讓所有的進(jìn)程共享,那么屬于會(huì)話(huà)生命周期里,這個(gè)私有SQL區(qū)可以是共享的,也可以是執(zhí)行完后隱式關(guān)閉。我們后面會(huì)學(xué)到SESSION CACHE CURSOR。私有SQL區(qū)或者稱(chēng)CURSOR,一個(gè)SQL就會(huì)對(duì)應(yīng)一個(gè)CURSOR,在CURSOR關(guān)閉時(shí)釋放。CURSOR(私有SQL 區(qū))這里有兩個(gè)部分搜索1000本書(shū)方法(執(zhí)行計(jì)劃)有些稱(chēng)為固定部分,如小麗的姓名(綁定變量),這些信息在整個(gè)會(huì)話(huà)中可以不馬上釋放你既可以指定我不想要這些信息(一些程序的顯式關(guān)閉游標(biāo)),如procdure 中close cursor也可以讓它自動(dòng)去除這些信息(默認(rèn)的SQL語(yǔ)句執(zhí)行完就關(guān)閉游標(biāo)),如select * from tab;當(dāng)前取書(shū)已經(jīng)到第999本了。這些是運(yùn)行時(shí)狀態(tài)的信息,等SQL語(yǔ)句執(zhí)行完就釋放掉了。注意,每個(gè)會(huì)話(huà)會(huì)限制CURSOR數(shù)(任務(wù)數(shù)),如小麗剛才的會(huì)話(huà)總共有四個(gè)服務(wù)器進(jìn)程服務(wù)的四個(gè)任務(wù)。如果每次執(zhí)行完一個(gè)CURSOR(任務(wù))后不馬上釋放這些CUROSR(任務(wù))信息,那么超過(guò)open_cursors數(shù)后會(huì)拋出open cursor數(shù)超出錯(cuò)誤,否則會(huì)占過(guò)多的資源。比如靜安店最多服務(wù)一個(gè)客戶(hù)的子任務(wù)(CURSOR)數(shù)是3,比如賣(mài)書(shū)、司機(jī)運(yùn)貨到碼頭、書(shū)通過(guò)船運(yùn)到寧波,而且每個(gè)任務(wù)做完后登記的信息沒(méi)有清除,那么小寧要完成第四次子任務(wù)時(shí)候就不允許。這是因?yàn)榕乱粋€(gè)大任務(wù)中小任務(wù)的信息太多造成大量?jī)?nèi)存使用。(特別是程序的循環(huán)操作,循環(huán)open cursor一個(gè)SQL一千次,不執(zhí)行close就會(huì)發(fā)生上述問(wèn)題)所以對(duì)于應(yīng)用程序代碼,要仔細(xì)考慮CURSOR的釋放機(jī)制。而上面的這些CURSOR信息在共享服務(wù)模式是共享的,屬于 UGA,并存放在SGA中,在有大池的情況下存放在大池。還有一部分內(nèi)存是完全私有的,比如有些局部變量作為程序的??臻g,還有些私有工作空間,如排序區(qū),HASH JOIN區(qū),位圖合并區(qū)等,它們是在執(zhí)行的時(shí)候調(diào)用全局區(qū)的,我們稱(chēng)為CGA(Call Global Area) 調(diào)用全局區(qū),執(zhí)行完就釋放。為了減少資源使用,CGA執(zhí)行完就釋放,是運(yùn)行時(shí)狀態(tài),別的進(jìn)程是無(wú)法看到的,還有象??臻g調(diào)用完就釋放的都是私有信息。但是執(zhí)行結(jié)束后如果需要反饋給用戶(hù)會(huì)話(huà)的數(shù)據(jù),如SELECT的FETCH,則需要保留區(qū)的數(shù)據(jù)提供用戶(hù)反饋信息,這些信息保存在哪里? 是不是CGA?注意CGA屬于PGA。如我們排序區(qū)可以設(shè)置保留空間,這樣這些SQL執(zhí)行完排序完后,不馬上釋放給操作系統(tǒng),而是釋放給UGA,最后FETCH反饋給SELECT的用戶(hù)。CGA屬于PGA與其他的全局區(qū)不同,CGA(CallGlobalArea調(diào)用全局區(qū))的存在是瞬間的。它只存在于一個(gè)調(diào)用過(guò)程中。 而UGA可能屬于PGA或者SGAPGA是一段包含一個(gè)Oracle服務(wù)或后臺(tái)進(jìn)程的數(shù)據(jù)和控制信息的內(nèi)存。PGA的大小依賴(lài)與系統(tǒng)的配置。在專(zhuān)用服務(wù)(DedicatedServer)模式下,一個(gè)服務(wù)進(jìn)程與一個(gè)用戶(hù)進(jìn)程相關(guān),PGA就包括了堆空間和UGA。而UGA(UserGlobalArea用戶(hù)全局區(qū))由用戶(hù)會(huì)話(huà)數(shù)據(jù)、游標(biāo)狀態(tài)和索引區(qū)組成。在共享服務(wù)(MTS)模式下,一個(gè)共享服務(wù)進(jìn)程被多個(gè)用戶(hù)進(jìn)程共享,此時(shí)UGA是SharedPool或LargePool的一部分(依賴(lài)與配置)。此時(shí)UGA屬于SGAUGA根據(jù)連接模式的區(qū)別而有所區(qū)別大家設(shè)想一下,一個(gè)CGA的返回要怎么返回給用戶(hù)?放在UGA里。我們排序區(qū)可以設(shè)置保留空間,這樣這些SQL執(zhí)行完排序完后,不馬上釋放給操作系統(tǒng),而是釋放給UGA,最后FETCH反饋給SELECT的用戶(hù)。而共享服務(wù)模式UGA是共享內(nèi)存,所以保留區(qū)排序在沒(méi)有FETCH前可以使用,但是FETCH后仍然不會(huì)保留這段內(nèi)存,它還是會(huì)被釋放的。我們將在第1章的后面幾節(jié)詳細(xì)講。這些私有部分,就象售貨員的私密信息,都會(huì)涉及到實(shí)際的數(shù)據(jù),如HASH 表,所以其它售貨員永遠(yuǎn)不會(huì)知道。否則就象中介公司的業(yè)務(wù)員互相之間知道了客戶(hù)的詳細(xì)信息,還可能存在互相撬客戶(hù)的情況。但是小麗的情況,售貨員小英(服務(wù)器進(jìn)程1)和司機(jī)小勇、小寧(服務(wù)器進(jìn)程2,4)和船長(zhǎng)小川(服務(wù)器進(jìn)程3)都知道。所以小麗的信息是共享的,所以在共享服務(wù)模式,UGA是在SGA里。共享服務(wù)模式,也就是進(jìn)程與會(huì)話(huà)之間是n:m的關(guān)系。在共享模式下,一個(gè)進(jìn)程可以服務(wù)多個(gè)會(huì)話(huà),一個(gè)會(huì)話(huà)可以由多個(gè)進(jìn)程服務(wù)。好比一輛的士可以服務(wù)多個(gè)人,而一個(gè)人也可以坐多輛的士。在共享下uga不是pga的子堆,是SGA的子堆,但是uga不會(huì)并發(fā),因?yàn)閱蝹€(gè)會(huì)話(huà)不可能在同時(shí)有多個(gè)活動(dòng)進(jìn)程服務(wù)它。uga始終屬于會(huì)話(huà)的,一個(gè)會(huì)話(huà)永遠(yuǎn)是順序執(zhí)行的,所以不會(huì)沖突。所以雖然共享但不會(huì)有l(wèi)atch的沖突。我們小麗的生命周期是把這貨運(yùn)到碼頭,然后運(yùn)到寧波,這個(gè)會(huì)話(huà)才結(jié)束,而這期間有售貨員進(jìn)程,司機(jī)進(jìn)程和船長(zhǎng)進(jìn)程可以為其它用戶(hù)服務(wù)。關(guān)于共享服務(wù)模式,我們會(huì)在體系架構(gòu)(三)用的士的例子來(lái)詳細(xì)舉例,另外DBA II的第五章將介紹共享服務(wù)器的配置。SGA的構(gòu)成我們已經(jīng)了解了什么是SGA,什么是PGA,那我們分別來(lái)詳細(xì)展開(kāi)這兩大組件,來(lái)了解這些組件各自的作用,和它的構(gòu)成。首先我們來(lái)學(xué)習(xí)SGA,一個(gè)實(shí)例只有一個(gè)SGA。我們看到,SGA是由多個(gè)功能不同的共享內(nèi)存組件構(gòu)成。前面四個(gè)子組件是SGA必備組件,在10G,11G會(huì)多出流池等。我們這里只說(shuō)個(gè)SGA大概的組成,每個(gè)小的組件在之后會(huì)詳細(xì)分析。第一個(gè)組件:共享池,用來(lái)存放SQL解析樹(shù)和字典對(duì)象定義的共享區(qū)域。第二個(gè)組件,數(shù)據(jù)庫(kù)高速緩存區(qū),用來(lái)存放業(yè)務(wù)數(shù)據(jù)的共享內(nèi)存區(qū)域。第三個(gè)組件,REDO日志緩存區(qū),用來(lái)記錄數(shù)據(jù)庫(kù)的每個(gè)改動(dòng)向量,其中包括系統(tǒng)的改動(dòng)和UNDO的改動(dòng)(UNDO其實(shí)也是一次REDO)。第四個(gè)組件,其它共享資源,如LOCK,ENQUEUE,LATCH,統(tǒng)計(jì)數(shù)據(jù)。除了前3個(gè)組件是資源外,鎖也是資源前3個(gè)組件的共享資源并發(fā)沖突可以用LATCH來(lái)管理,那LATCH本身也是種資源,還需要專(zhuān)門(mén)管理LATCH的LATCH來(lái)管理。另外,在9I還有其它2組可選的組件,分別是大池和JAVA池,他們都跟共享池的功能類(lèi)似,是它的替代品,用來(lái)實(shí)現(xiàn)某些特殊的請(qǐng)求。比如大池是用于存放對(duì)那些復(fù)雜的程序包分析、RMAN、UGA、異步IO等相關(guān)的數(shù)據(jù),而JAVA池是用來(lái)存放JAVA存儲(chǔ)過(guò)程的分析信息。那我們要搭建一個(gè)實(shí)例該如何規(guī)劃這個(gè)實(shí)例的內(nèi)存呢?就象我們要開(kāi)一家靜安書(shū)店,我們需要指定一個(gè)開(kāi)業(yè)籌備的方案,設(shè)置好各職能部門(mén)及所需要的門(mén)面。這個(gè)籌備方案就是我們以后講到的初始化參數(shù)。實(shí)例啟動(dòng)必須先劃分內(nèi)存,店要開(kāi)業(yè)就必須要買(mǎi)下門(mén)面,那我們數(shù)據(jù)庫(kù)該如何設(shè)置內(nèi)存大小呢?特別是SGA。SGA的設(shè)置在9I,ORACLE需要你先劃分一個(gè)SGA的最大大小限額SGA_MAX_SIZE,用于劃出最大多少的內(nèi)存給ORACLE共享內(nèi)存使用。該參數(shù)只能通過(guò)文本參數(shù)修改或SPFILE的設(shè)置,并在重起后生效。10g實(shí)現(xiàn)SGA的自動(dòng)管理,并設(shè)置了sga_target。我們稱(chēng)自動(dòng)內(nèi)存管理為ASMM,在11G,可以把PGA和SGA作為一個(gè)整體進(jìn)行自動(dòng)管理。SGA也會(huì)使用到虛擬內(nèi)存,在有些平臺(tái)甚至可以固定在物理內(nèi)存內(nèi)。我們知道一個(gè)進(jìn)程使用的物理內(nèi)存,會(huì)需要相應(yīng)大小的虛擬內(nèi)存,所以要設(shè)置合理的虛擬內(nèi)存大小,以支持系統(tǒng)正常運(yùn)轉(zhuǎn)。通常情況:如果4G的物理內(nèi)存,配置4G或者8G虛擬內(nèi)存就可以。內(nèi)存分配需要按照顆粒大小來(lái)分配。比如顆粒是16M,原來(lái)總內(nèi)存是32M,你把32M改為40M,那實(shí)際上會(huì)變成32M+16M=48M。所以必須按照步長(zhǎng)進(jìn)行分配內(nèi)存。如果SGA小于128M,那么步長(zhǎng)是4M,否則是16M我們可以用下面的字典來(lái)查當(dāng)前系統(tǒng)的步長(zhǎng)V$SGA_DYNAMIC_COMPONENTS我們了解了SGA的分配和SGA主要的幾大組件,我們就需要深入了解幾大組件的作用及它們間是如何配合的。先看看SGA的幾大組件共享池?cái)?shù)據(jù)緩沖區(qū)PGA&UGA處理內(nèi)存的機(jī)制我們還是用前面圖書(shū)館的例子來(lái)全面了解ORACLE處理這些內(nèi)存的機(jī)制。我們來(lái)舉個(gè)例子,靜安書(shū)店剛開(kāi)業(yè),小麗要買(mǎi)某一本書(shū)“CBO基礎(chǔ)”,而且必須是最新上架的書(shū)。因?yàn)樾←愊MI(mǎi)到的是最新的“CBO基礎(chǔ)”,否則估計(jì)已經(jīng)被很多人翻舊了。有一個(gè)剛進(jìn)靜安書(shū)店的A售貨員接到了小麗的服務(wù),她們建立了買(mǎi)賣(mài)的會(huì)話(huà)關(guān)系。而且由于書(shū)店剛開(kāi)業(yè),A售貨員第一次上班,從來(lái)不知道該如何去找這本書(shū),A售貨員腦子里不記得該如何去找這個(gè)書(shū),那A售貨員只能通過(guò)有限的知識(shí)去獲取最快的方法找到這本書(shū)。她可以有幾種選擇:從書(shū)架的第1本書(shū)開(kāi)始,按書(shū)架的編號(hào)順序找,直到找到第1本“CBO基礎(chǔ)”,然后再繼續(xù)找第2本“CBO基礎(chǔ)”,然后按時(shí)間排序,直找到書(shū)架最后一本書(shū)。從店里的前臺(tái)電腦里有一本書(shū)的檢索目錄,是按書(shū)名拼音排序的,用它來(lái)快速定位這本書(shū),由于檢索目錄是按書(shū)名排序的,選取出來(lái)的書(shū)還要按日期排序,然后選出最新的一本“CBO基礎(chǔ)”。但是決定哪種選擇來(lái)獲取“CBO基礎(chǔ)”,這個(gè)工作不是由A售貨員來(lái)做,A售貨員首先會(huì)把這個(gè)請(qǐng)求交給店里的一個(gè)檢索員,讓他決定這本書(shū)小麗有沒(méi)有權(quán)限買(mǎi)讓檢索員評(píng)估哪種方法能更快的拿到“CBO基礎(chǔ)”這就類(lèi)似于SQL的語(yǔ)意分析、語(yǔ)法分析、CBO分析。檢索員負(fù)責(zé)管理檢索室,檢索室是我們關(guān)注的焦點(diǎn)。當(dāng)確定了檢索方法后,這時(shí)檢索員會(huì)把小麗提出的請(qǐng)求和檢索的方法做上記錄(電腦檢索目錄),并存放在檢索室的柜架上。檢索員柜架為按一定的方式來(lái)放,盡量讓剛檢索的或者頻繁檢索的請(qǐng)求和方法放在最外面,便于以后當(dāng)檢索室滿(mǎn)了后不容易被檢索員作為侯選T出去。這時(shí)檢索員告訴A售貨員,說(shuō)你還是在電腦里用檢索目錄搜索快,這時(shí)A售貨員會(huì)把書(shū)名,檢索的方法的地址等記下來(lái)作為小麗這次請(qǐng)求的會(huì)話(huà)信息。然后A售貨員開(kāi)始執(zhí)行,并記錄執(zhí)行的狀態(tài)信息,比如取到第幾本書(shū)了,這就是運(yùn)行時(shí)的CURSOR信息到這個(gè)會(huì)話(huà)。執(zhí)行完后,A售貨員把最新的一本“CBO基礎(chǔ)”書(shū)給小麗。這時(shí)小麗可以決定結(jié)束這次會(huì)話(huà)的所有請(qǐng)求,也可以不結(jié)束,而去處理別的事情。好,這是我們第1段故事,從這段故事里我們能跟ORACLE關(guān)聯(lián)上哪些知識(shí)點(diǎn)呢? 我們前面提到的買(mǎi)某一本書(shū)“CBO基礎(chǔ)”就是提交了一個(gè)SQL語(yǔ)句 檢索員是CBO 電腦檢索目錄是索引 檢索員存放檢索方式信息按最近最多執(zhí)行順序排列,對(duì)應(yīng)就是LRU A售貨員服務(wù)器進(jìn)程 小麗是用戶(hù)進(jìn)程 檢索室是LIBRARY CACHE,是shared_pool_size的一部分,一些語(yǔ)句解析信息 小麗有沒(méi)有權(quán)限買(mǎi)等的信息是語(yǔ)意分析時(shí)存放在ROW CACHE里 小麗會(huì)話(huà)信息里有要買(mǎi)的書(shū)名(綁定信息),檢索的方法的地址,檢索到第幾本書(shū)等信息。這是私有CURSOR。 檢索室的搜索方法,書(shū)名等信息是LIBRARY CACHE里的子cursor,就是共享cursor。我們用ORACLE的概念關(guān)聯(lián)到圖書(shū)館,我們就可以接著第2、3段故事了解內(nèi)存是如何運(yùn)作的。第2段故事這時(shí)如果小王要買(mǎi)一本“經(jīng)濟(jì)學(xué)概論”,也需要最新上架的新書(shū)。如果小王被指派給新來(lái)的B售貨員,那B售貨員去找檢索員查找檢索室里有沒(méi)有該檢索的方法。前面小麗使用過(guò)的檢索方法正好可以被使用,即使她們買(mǎi)的書(shū)名不同,但是書(shū)名被綁定了,也就是小王要買(mǎi)一本“書(shū)”,而沒(méi)有用特定的書(shū)名提交給檢索員。這就是綁定成一個(gè)通用的變量名,在ORACLE中是用一個(gè)變量代替。這樣,檢索員完全可以決定用小麗的檢索方法給小王共享,因?yàn)樗麄兊哪康目瓷先ネ耆粯?。(但是這時(shí)未必能真的用到小麗的方法,如可能搜索員發(fā)現(xiàn)小王的權(quán)限跟小麗不一樣,書(shū)店連賣(mài)都不會(huì)賣(mài)給他)。這時(shí)如果可以用小麗的檢索方法,B售貨員為小王生成會(huì)話(huà)信息,記錄書(shū)名“經(jīng)濟(jì)學(xué)概論”,檢索方法的地址等。這里是UGA。然后一樣開(kāi)始執(zhí)行,我們發(fā)現(xiàn)要找到最新的書(shū),是需要基于時(shí)間,而時(shí)間字段沒(méi)有索引,所以必須排序,這排序是私有的區(qū)域部分,屬于PGA,部分屬于UGA。我們把排序放到一個(gè)臨時(shí)的房間,我們稱(chēng)排序庫(kù)。比如排序需要100本書(shū),如果排序的結(jié)果不需要反饋,那么排序完就從排序庫(kù)釋放了。但如果排序的結(jié)果要反饋給用戶(hù),如想顯示排在最早出版的20本書(shū)是哪幾本,則需要在排序庫(kù)排完后需要保留到另一個(gè)房間,我們稱(chēng)為保留排序庫(kù),來(lái)實(shí)現(xiàn)用戶(hù)的FETCH。我們也可以在每完成20本排序后,先把排序庫(kù)里這20本移到保留排序庫(kù),反饋這20本給小王看,反饋完后從保留排序庫(kù)清除。然后再?gòu)呐判驇?kù)選擇下20本書(shū)排序從排序庫(kù)取出,存入排序保留庫(kù),反饋給小王查看排序結(jié)果,一直這樣循環(huán),直到最后排序完100本書(shū),小王有看了這100本書(shū)的順序后,排序庫(kù)和保留排序庫(kù)數(shù)據(jù)都被清除。這個(gè)排序庫(kù)就是SORT_AREA _SIZE,它是屬于PGA,而保留排序區(qū)屬于反饋給用戶(hù)會(huì)話(huà)的(小王),它就是SORT_AREA_RETAINED_SIZE,屬于UGA部分。這里我們發(fā)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論