突破32位操作繫系統記憶體限製
有這3篇高手寫的文件就比較全面了,不過要注意在SGA_MAX引數引數存在的時候老是抱錯,資料庫起不來,把sga max遮蔽後解決
眾所周知,在32位的作業系統如win2K上,作業系統能管理的記憶體為4GB(power(2,32) =4G) ,oracle使用的總記憶體有2G限制。目前大多數資訊系統都能為資料庫伺服器配上4G實體記憶體甚至更多,但無論你為系統配置多大的實體記憶體,正常情況下 都不能使oracle使用超過2G的記憶體(包含SGA、PGA等),從而造成系統資源浪費。那麼,有沒有什麼辦法能使執行在windows系統上的 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項中新增 /3G 引數。修改過後的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)="Microsoft Windows 2000 Advanced Server" /3G /fastdetect
注意在啟動win2K AdvServer的一欄裡,多了一個 /3G 引數。這個引數的作用,就是讓windows啟動時,將自己的核心及支援程式裝載到記憶體地址 0xC0000000 到 0xFFFFFFFF 之間,給應用程式留出3G的空間來。
3 修改oralce 的 init.ora 檔案
..1) 確定oracle的緩衝區及共享池大小,假設作如下定義:
........ db_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 專用伺服器模式[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/95530/viewspace-811715/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Delphi 的記憶體操作函式(5): 複製記憶體記憶體函式
- Linux作業系統:快速記憶體操作技術(轉)Linux作業系統記憶體
- Windows32位系統下Oracle記憶體突破1.7G的設定WindowsS3Oracle記憶體
- 虛擬記憶體系統——瞭解記憶體的工作原理記憶體
- 作業系統-記憶體管理作業系統記憶體
- 作業系統——記憶體管理作業系統記憶體
- win10系統如何優化記憶體_win10優化記憶體佔用率怎麼操作Win10優化記憶體
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- Linux記憶體子系統——Locking Pages(記憶體鎖定)Linux記憶體
- MySQL記憶體管理,記憶體分配器和作業系統MySql記憶體作業系統
- 計算機作業系統——虛擬記憶體與實體記憶體計算機作業系統記憶體
- Sieve—Android 記憶體分析系統Android記憶體
- 作業系統記憶體管理概述作業系統記憶體
- UNIX系統記憶體檢視方法記憶體
- 作業系統記憶體管理-原理作業系統記憶體
- 【作業系統】記憶體管理概述作業系統記憶體
- win10系統如何最佳化記憶體_win10最佳化記憶體佔用率怎麼操作Win10記憶體
- Win10系統中“系統和壓縮記憶體”佔用大量記憶體如何解決Win10記憶體
- 常用記憶體操作函式記憶體函式
- 作業系統的虛擬記憶體作業系統記憶體
- Linux核心記憶體管子系統分析Linux記憶體
- Linux AS 使用記憶體檔案系統Linux記憶體
- 虛擬記憶體檔案系統TMPFS記憶體
- Linux系統釋放cache記憶體Linux記憶體
- 虛擬記憶體與系統效能(轉)記憶體
- 作業系統-記憶體、檔案管理作業系統記憶體
- 作業系統——記憶體管理學習筆記作業系統記憶體筆記
- win10怎麼清理記憶體_windows10系統清理記憶體教程Win10記憶體Windows
- 手撕記憶體操作函式記憶體函式
- [譯]安全的WebAssembly記憶體操作Web記憶體
- 關於C中記憶體操作記憶體
- 32位win10系統支援多大記憶體_32位win10系統能識別多大記憶體Win10記憶體
- Linux作業系統記憶體淺析Linux作業系統記憶體
- Centos 伺服器系統記憶體故障排查CentOS伺服器記憶體
- AIX系統記憶體佔用率的計算AI記憶體
- HP-UX作業系統的記憶體UX作業系統記憶體
- windows作業系統支援的最大記憶體Windows作業系統記憶體
- Windows及Linux系統虛擬記憶體WindowsLinux記憶體