引自:http://blog.oracle.com.cn/2446/viewspace_2056.html
眾所周知,在32位的操作系統(tǒng)如win2K上,操作系統(tǒng)能管理的內(nèi)存為4GB(power(2,32) =4G) ,oracle使用的總內(nèi)存有2G限制。目前大多數(shù)信息系統(tǒng)都能為數(shù)據(jù)庫服務(wù)器配上4G物理內(nèi)存甚至更多,但無論你為系統(tǒng)配置多大的物理內(nèi)存,正常情況下都不能使oracle使用超過2G的內(nèi)存(包含SGA、PGA等),從而造成系統(tǒng)資源浪費(fèi)。那么,有沒有什么辦法能使運(yùn)行在windows系統(tǒng)上的oracle使用超過2G的內(nèi)存呢?windows 提供了一種叫4GT(4G Tuning)的技術(shù),使得oracle使用超過2G(不超過3G)的內(nèi)存成為可能。而為了讓應(yīng)用程序使用更大的內(nèi)存,還有一種PSE36的技術(shù),可以讓oracle使用超過3G的內(nèi)存。這里,只對我們使用4GT特性讓oracle使用超過2G的內(nèi)存進(jìn)行討論。
一 使用4GT特性的基本要求:
....盡管可以在不超過2G物理內(nèi)存的系統(tǒng)上使用4GT特性,但oracle并不推薦這種做法,因為這將會嚴(yán)重降低系統(tǒng)性能。以我的經(jīng)驗來講,如果系統(tǒng)未安裝4G物理內(nèi)存,最好也不要使用這種方法來讓oracle使用更多的內(nèi)存。此外,在需要你的oracle使用超過2G的內(nèi)存時,數(shù)據(jù)庫服務(wù)器最好不要再運(yùn)行其他的服務(wù),以減小系統(tǒng)的壓力,讓oracle工作得更好。
....另外,據(jù)MS的文檔,4GT只能用于 Advanced Server , Datacenter版本上,Server 版以及 Professional 版不能使用4GT特性(實(shí)際上是不是也沒有必要?)
二 為什么4GT能讓應(yīng)用程序使用超過2G的內(nèi)存
....在正常情況下,windows系統(tǒng)對內(nèi)存的分配是這樣的:在內(nèi)存地址0x00000000 到 0x7FFFFFFF之間的空間,交給應(yīng)用程序使用,操作系統(tǒng)內(nèi)核及其支持則使用內(nèi)存地址 0x80000000 到 0xFFFFFFFF之間的空間。在使用4GT之后,操作系統(tǒng)將內(nèi)核及其支持程序使用的內(nèi)存地址空間壓縮到 0xC0000000 到 0xFFFFFFFF之間,從而為應(yīng)用程序“讓”出來1G的空間。但是,僅僅“讓”出來了這1G的空間還是不夠的,還需要指定哪一個應(yīng)用程序來使用這“多出來的”1G空間,以及如何分配份額等。后面將結(jié)合具體的參數(shù)設(shè)置來討論。為便于討論,我們將正常情況下應(yīng)用程序可以使用的2G內(nèi)存(即地址在 0x00000000 到 0x7FFFFFFF 之間的內(nèi)存)稱作普通內(nèi)存,而將windows “讓”出來的1G內(nèi)存(地址在 0x80000000 到 0xBFFFFFFF之間)稱作間接內(nèi)存。
三 oracle使用超過2G內(nèi)存,不超過3G內(nèi)存的具體設(shè)置步驟:
1 首先應(yīng)卸載實(shí)例,關(guān)閉oracle服務(wù)。
2 打開操作系統(tǒng)3G開關(guān):
....修改boot.ini文件,在啟動windows項中添加 /3G 參數(shù)。修改過后的boot.ini文件應(yīng)該類似以下內(nèi)容:
[boot loader]
timeout=8
default=multi(0)disk(0)rdisk(0)partition(1)
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)="Microsoft Windows 2000 Advanced Server" /3G /fastdetect
注意在啟動win2K AdvServer的一欄里,多了一個 /3G 參數(shù)。這個參數(shù)的作用,就是讓windows啟動時,將自己的內(nèi)核及支持程序裝載到內(nèi)存地址 0xC0000000 到 0xFFFFFFFF 之間,給應(yīng)用程序留出3G的空間來。
3 修改oralce 的 init.ora 文件
..1) 確定oracle的緩沖區(qū)及共享池大小,假設(shè)作如下定義:
........ db_block_size = 4096
........ db_block_buffers = 262144 # 緩沖區(qū)大小為1G
........ share_pool_size = 314572800 # 使用300M共享池
..2) 添加下列各項內(nèi)容:
........ use_indirect_data_buffers = true
........ # 告訴oracle可以使用間接內(nèi)存(即可以使用windows讓出來的1G內(nèi)存作為數(shù)據(jù)緩沖區(qū))
........ pre_page_sga = true
........ # 把oracle SGA鎖定到內(nèi)存中,不產(chǎn)生頁面交換文件(8i的參數(shù)可能是lock_sga = true)
........ # 對于一個有4G物理內(nèi)存的系統(tǒng)來講,可能這一個參數(shù)并不是必須的
4 修改注冊表,定義oracle的DBbuffer使用常規(guī)內(nèi)存大小
....在注冊表 _Local_Machine中添加一個二進(jìn)制值,名稱為AWE_WINDOW_MEMORY ,值的單位為字節(jié),大小為你需要讓oracle使用普通內(nèi)存作為緩存的大小(不是windows讓出來的1G,而是內(nèi)存地址在0x00000000 到 0x7FFFFFFF 之間的內(nèi)存大小)。假如設(shè)為209715200,即200M大小,那么oracle的數(shù)據(jù)緩沖區(qū)將占用200M的普通內(nèi)存,其余部分(1G - 200M = 824M)則使用間接內(nèi)存。
5 重新啟動操作系統(tǒng),啟動數(shù)據(jù)庫。OK,你現(xiàn)在的 oracle 可以使用2G + 824M內(nèi)存了。
四 幾個補(bǔ)充討論
1 windows系統(tǒng)“讓”出來的1G間接內(nèi)存,只能用于數(shù)據(jù)緩沖區(qū)
....在4GT特性測試中發(fā)現(xiàn),間接內(nèi)存只能用于數(shù)據(jù)緩沖區(qū),而不能用于共享池,也不能分配給用戶作為PGA。或許有其他的參數(shù)可以定義,但我查到的文獻(xiàn)中沒有任何一篇講間接內(nèi)存可以用于哪些地方,而在我們的測試中發(fā)現(xiàn)按上面的修改后,間接內(nèi)存只能用于數(shù)據(jù)緩沖區(qū)。此結(jié)論只作為一個經(jīng)驗,不是定論,請各位大俠補(bǔ)充修正。
2 注冊表中 AWE_WINDOW_MEMORY 參數(shù)大小的定義
....這個參數(shù)定義緩沖池使用普通內(nèi)存的大小,不能太小。在數(shù)據(jù)塊大小為4K,緩沖池為1G(即使用262144個塊作緩沖池)大小的情況下,此參數(shù)定義為100M時,oracle不能啟動,定義為200M時正常啟動。根據(jù)我閱讀文獻(xiàn)后對這個情況的理解,數(shù)據(jù)緩沖區(qū)的每一個塊的塊頭信息都將存放于普通內(nèi)存中,不能存放于間接內(nèi)存中。如果此參數(shù)定義過小,導(dǎo)致緩沖區(qū)塊頭信息都不能存放,則可導(dǎo)致數(shù)據(jù)庫啟動失敗。那么,是不是同樣大小的緩沖區(qū),數(shù)據(jù)庫塊越大,則這個參數(shù)就可以定義得越小,因而可以占用更少的普通內(nèi)存呢?有待驗證。
....在具體的應(yīng)用中,如何定義此參數(shù),應(yīng)綜合考慮最大并發(fā)連接數(shù)(專用服務(wù)器模式下)、用戶重用的堆棧大小、排序區(qū)、共享池、大池等內(nèi)存參數(shù)的設(shè)置情況,盡可能的將數(shù)據(jù)緩沖區(qū)放到間接內(nèi)存中,充分利用系統(tǒng)的資源。
3 間接內(nèi)存的性能
....據(jù)oracle的文獻(xiàn)講,間接內(nèi)存的性能(我想主要是指速度和效率吧?)不如直接內(nèi)存,絕不推薦在未安裝有4G物理內(nèi)存的系統(tǒng)上使用4GT特性。我不知道如何比較間接內(nèi)存與直接內(nèi)存的速度和效率,因而未作測試,姑且信之。
....一點(diǎn)小結(jié),期望能對大家有所啟發(fā)。還請各位大俠補(bǔ)充指正。
以上內(nèi)容的測試環(huán)境:
IBM X360 +4G內(nèi)存 + RAID 5陣列
Windows 2000 Advaced Server SP3 + oracle 8.1.6 專用服務(wù)器模式