突破oracle for win2K的2G記憶體限制 (轉)
眾所周知,在32位的操作如win2K上,能管理的記憶體為4GB(power(2,32) =4G) ,oracle使用的總記憶體有2G限制。目前大多數資訊系統都能為配上4G實體記憶體甚至更多,但無論你為系統多大的實體記憶體,正常情況下都不能使oracle使用超過2G的記憶體(包含SGA、PGA等),從而造成系統資源浪費。那麼,有沒有什麼辦法能使執行在系統上的oracle使用超過2G的記憶體呢?windows 提供了一種叫4GT(4G Tuning)的技術,使得oracle使用超過2G(不超過3G)的記憶體成為可能。而為了讓應用使用更大的記憶體,還有一種PSE36的技術,可以讓oracle使用超過3G的記憶體。這裡,只對我們使用4GT特性讓oracle使用超過2G的記憶體進行討論。
一 使用4GT特性的基本要求:
....儘管可以在不超過2G實體記憶體的系統上使用4GT特性,但oracle並不推薦這種做法,因為這將會嚴重降低系統。以我的來講,如果系統未4G實體記憶體,最好也不要使用這種方法來讓oracle使用更多的記憶體。此外,在需要你的oracle使用超過2G的記憶體時,資料庫伺服器最好不要再執行其他的服務,以減小系統的壓力,讓oracle工作得更好。
....另外,據MS的文件,4GT只能用於 Advanced Server , Datacenter版本上,Server 版以及 Professional 版不能使用4GT特性(實際上是不是也沒有必要?)
二 為什麼4GT能讓應用程式使用超過2G的記憶體
....在正常情況下,windows系統對記憶體的分配是這樣的:在記憶體地址0x00000000 到 0x7FFFFFFF之間的空間,交給應用程式使用,作業系統核心及其支援則使用記憶體地址 0x80000000 到 0xFFFFFFFF之間的空間。在使用4GT之後,作業系統將核心及其支援程式使用的記憶體地址空間到 0xC0000000 到 0xFFFFFFFF之間,從而為應用程式“讓”出來1G的空間。但是,僅僅“讓”出來了這1G的空間還是不夠的,還需要指定哪一個應用程式來使用這“多出來的”1G空間,以及如何分配份額等。後面將結合具體的引數設定來討論。為便於討論,我們將正常情況下應用程式可以使用的2G記憶體(即地址在 0x00000000 到 0x7FFFFFFF 之間的記憶體)稱作普通記憶體,而將windows “讓”出來的1G記憶體(地址在 0x80000000 到 0xBFFFFFFF之間)稱作間接記憶體。
三 oracle使用超過2G記憶體,不超過3G記憶體的具體設定步驟:
1 首先應解除安裝例項,關閉oracle服務。
2 開啟作業系統3G開關:
....修改boot.ini,在啟動windows項中新增 /引數。修改過後的boot.ini檔案應該類似以下內容:
[boot loader]
timeout=8
default=multi(0)disk(0)rdisk(0)partition(1)
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)=" Advanced Server" /3G /fastdetect
注意在啟動win2K AdvServer的一欄裡,多了一個 /3G 引數。這個引數的作用,就是讓windows啟動時,將自己的核心及支援程式裝載到記憶體地址 0xC0000000 到 0xFFFFFFFF 之間,給應用程式留出3G的空間來。
3 修改oralce 的 init.檔案
..1) 確定oracle的緩衝區及共享池大小,假設作如下定義:
........ _block_size = 4096
........ db_block_buffers = 262144 # 緩衝區大小為1G
........ share_pool_size = 314572800 # 使用300M共享池
..2) 新增下列各項內容:
........ use_indirect_data_buffers = true
........ # 告訴oracle可以使用間接記憶體(即可以使用windows讓出來的1G記憶體作為資料緩衝區)
........ pre_page_sga = true
........ # 把oracle SGA鎖定到記憶體中,不產生頁面檔案(8i的引數可能是lock_sga = true)
........ # 對於一個有4G實體記憶體的系統來講,可能這一個引數並不是必須的
4 修改登錄檔,定義oracle的DBbuffer使用常規記憶體大小
....在登錄檔 _Local_Machine中新增一個二進位制值,名稱為AWE_WINDOW_MEMORY ,值的單位為位元組,大小為你需要讓oracle使用普通記憶體作為快取的大小(不是windows讓出來的1G,而是記憶體地址在0x00000000 到 0x7FFFFFFF 之間的記憶體大小)。假如設為209715200,即200M大小,那麼oracle的資料緩衝區將佔用200M的普通記憶體,其餘部分(1G - 200M = 824M)則使用間接記憶體。
5 重新啟動作業系統,啟動資料庫。OK,你現在的 oracle 可以使用2G + 824M記憶體了。
四 幾個補充討論
1 windows系統“讓”出來的1G間接記憶體,只能用於資料緩衝區
....在4GT特性測試中發現,間接記憶體只能用於資料緩衝區,而不能用於共享池,也不能分配給作為PGA。或許有其他的引數可以定義,但我查到的文獻中沒有任何一篇講間接記憶體可以用於哪些地方,而在我們的測試中發現按上面的修改後,間接記憶體只能用於資料緩衝區。此結論只作為一個經驗,不是定論,請各位大俠補充修正。
2 登錄檔中 AWE_WINDOW_MEMORY 引數大小的定義
....這個引數定義緩衝池使用普通記憶體的大小,不能太小。在資料塊大小為4K,緩衝池為1G(即使用262144個塊作緩衝池)大小的情況下,此引數定義為100M時,oracle不能啟動,定義為200M時正常啟動。根據我閱讀文獻後對這個情況的理解,資料緩衝區的每一個塊的塊頭資訊都將存放於普通記憶體中,不能存放於間接記憶體中。如果此引數定義過小,導致緩衝區塊頭資訊都不能存放,則可導致資料庫啟動失敗。那麼,是不是同樣大小的緩衝區,資料庫塊越大,則這個引數就可以定義得越小,因而可以佔用更少的普通記憶體呢?有待驗證。
....在具體的應用中,如何定義此引數,應綜合考慮最大併發連線數(專用伺服器下)、使用者重用的堆疊大小、排序區、共享池、大池等記憶體引數的設定情況,儘可能的將資料緩衝區放到間接記憶體中,充分利用系統的資源。
3 間接記憶體的效能
....據oracle的文獻講,間接記憶體的效能(我想主要是指速度和吧?)不如直接記憶體,絕不推薦在未安裝有4G實體記憶體的系統上使用4GT特性。我不知道如何比較間接記憶體與直接記憶體的速度和效率,因而未作測試,姑且信之。
....一點小結,期望能對大家有所啟發。還請各位大俠補充指正。
以上內容的測試環境:
IBM X360 +4G記憶體 + RAID 5陣列
Windows 2000 Advaced Server SP3 + oracle 8.1.6 專用伺服器模式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-960558/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 突破oracle for win2K的2G記憶體限制Oracle記憶體
- 利用USE_INDIRECT_DATA_BUFFERS突破32位的2G記憶體限制(二)記憶體
- 利用USE_INDIRECT_DATA_BUFFERS突破32位的2G記憶體限制(一)記憶體
- 解決sqlserver限制2G記憶體限制安裝SQLServer記憶體
- ORACLE 使用超過2G記憶體Oracle記憶體
- oracle 9i 突破win2003記憶體限制Oracle記憶體
- 全記憶體的redis用習慣了?那能突破記憶體限制類redis產品ssdb呢?記憶體Redis
- win2K中的“秘密武器”之記憶體工具(轉)記憶體
- windows 32位的 Oracle 記憶體限制問題WindowsOracle記憶體
- Netweaver工作程式的記憶體限制 VS CloudFoundry應用的記憶體限制記憶體Cloud
- 程式設計師修仙之路--突破記憶體限制的高效能排序程式設計師記憶體排序
- 轉:Oracle 記憶體分析Oracle記憶體
- 擺脫限制使有限的記憶體用在刀刃上(轉)記憶體
- 2G記憶體搞定一億資料的分析引擎記憶體
- oracle-記憶體表(轉)Oracle記憶體
- 安裝記憶體2g的可以裝win10系統嗎_2g記憶體裝win10系統的方法記憶體Win10
- windows2003/32bit和oracle32位突破記憶體1.7GB限制WindowsOracle記憶體
- Node記憶體限制和垃圾回收記憶體
- Node記憶體限制與垃圾回收記憶體
- aix 共享記憶體段大小限制AI記憶體
- npm打包進行記憶體限制NPM記憶體
- Windows 32bit OS上實體記憶體限制以及ORACLE 10G 在32bit OS的SGA記憶體分配限制解決方法Windows記憶體Oracle 10g
- Oracle9i的實體記憶體管理(轉)Oracle記憶體
- Oracle記憶體結構(四)----如何獲得Oracle各記憶體段的內部資訊(轉)Oracle記憶體
- win10系統2g記憶體夠用嗎_2g記憶體可以裝win10流暢嗎會不會卡Win10記憶體
- MikroTik RouterOS x86最大記憶體只能支援2GROS記憶體
- 顯示卡視訊記憶體2G和4G的區別 視訊記憶體越大效能越好嗎?記憶體
- 谷歌NLP新模型「大鳥」突破BERT限制,稀疏注意力機制更省記憶體谷歌模型記憶體
- oracle程式和記憶體轉儲說明Oracle記憶體
- GoldenGate通過CACHEMGR限制記憶體利用Go記憶體
- CentOS限制實體記憶體大小方法CentOS記憶體
- Oracle 記憶體管理Oracle記憶體
- oracle 共享記憶體Oracle記憶體
- Windows32位系統下Oracle記憶體突破1.7G的設定WindowsS3Oracle記憶體
- [轉載] Java直接記憶體與堆記憶體Java記憶體
- Oracle記憶體結構(一)----SGA的區域資訊(轉)Oracle記憶體
- Memory Dumps(ORACLE記憶體結構轉儲)Oracle記憶體
- 記憶體才2G,蘋果iPhone為啥敢賣那麼貴?記憶體蘋果iPhone