1. 程式人生 > >oracle如何使用4G以上記憶體

oracle如何使用4G以上記憶體

由於工作需要,單位的伺服器進行升級,使用至強CPU,記憶體為16GB,系統為windows server 2003 Enterprise R2,資料庫為oracle8i所以一直在查詢如何在32位系統中使oracle使用超過4G記憶體的問題,baidu了n篇文章,發現在細節上寫的都不夠詳細,又到微軟和oracle網站上查詢,終於對原理和方法有了一個大致瞭解,在此寫出來供大家參考,如有錯誤還請指正。

1、由於32位系統記憶體定址只能到4G,所以在32位系統上使用超過4G的記憶體,首先要使用支援大記憶體的軟硬體,比如使用至強的CPU(雖然是32位CPU,但是上增加了擴充套件定址的能力),windows2003企業版或資料中心版。

2、在作業系統中啟用PAE(Physical Address Extensions )功能,這樣oracle便可以通過windows的AWE(Address Windowing Extensions)API使用多餘4G的記憶體。
方法:開啟系統根目錄下的隱藏檔案 Boot.ini ,新增 PAE 開關:
(1)multi(0)disk(0)rdisk(0)partition(2)/%systemroot%="Windows Server 2003, Enterprise Edition" /PAE
(2)multi(0)disk(0)rdisk(0)partition(2)/%systemroot%="Windows Server 2003, Enterprise Edition" /3GB /PAE
      我們知道32位windows對於每個程序都分配4GB記憶體(虛擬記憶體),其中起始的2GB歸windows核心使用,剩餘的歸應用程式本身使用。因此這兩種方法的區別就在於:
方法一隻使用了/PAE開關表示啟用/PAE功能但是系統對每個程序仍然採用2G核心、2G應用程式的記憶體分配方式。
方法二除了/PAE開關還使用了/3GB開關表示不僅啟用/PAE功能並且系統對每個程序採用1G核心、3G應用程式的記憶體分配方式。不過這種方式不支援大於16GB的記憶體,也就是說如果你的實際記憶體超過16GB則只能使用方法一,這是因為大於16GB後1G的核心記憶體已經不夠windows實現PAE功能。

3、給執行Oracle資料庫的作業系統帳戶,授予"Lock Pages in Memory"的系統許可權。
執行 gpedit.msc開啟“組策略”控制檯
“計算機配置”->“Windows 設定”->“安全設定”->“本地策略”->“使用者權利指派”
雙擊右邊“鎖定記憶體中的頁”(或名為"記憶體中鎖定頁"),在“本地安全策略設定”對話方塊中,單擊“新增”按鈕,在“選擇使用者或組”對話方塊中,新增有權執行 oracle的帳戶:
      一般是 System —— 自動啟動資料庫服務時的預設使用者
                administrator —— 當使用administrator登陸到win2003進行手工操作時的使用者
                域使用者 —— 當使用域使用者登陸到系統時
注:
此策略將確定哪些帳戶可以使用程序將資料保留在實體記憶體中,從而阻止系統將資料分頁到磁碟的虛擬記憶體中。

4、配置oracle資料庫的引數檔案(init*.ora),新增USE_INDIRECT_DATA_BUFFERS=TRUE引數,表示使用擴充套件的記憶體。

5、修改登錄檔中的AWE_WINDOW_MEMORY鍵值為合適值。該值表示在3GB記憶體中(如果使用了/3GB開關,如果沒有使用該開關則為2GB)有多少用於資料庫塊快取。
注意:
(1)該值位置在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0為二進位制型別,單位為bytes。
(2)如果不存在表示使用預設值1GB。
(3)該值太大或太小都有可能導致資料庫無法啟動。
      這裡解釋一下:儘管我們現在擁有超過4GB的記憶體,但是這些多餘的記憶體並不是oracle可以隨便使用的,這些記憶體只能用於資料庫塊快取(即db_buffer),而像share Pool,log buffer等只能儲存在應用程式可訪問的3GB記憶體中(如果使用了/3GB開關,如果沒有使用該開關則為2GB)。在這裡我將4GB以外記憶體中的資料庫塊快取叫做AWE資料塊快取(自己起的名字:-))。這裡又有問題了,oracle緩衝的資料塊並不能全部儲存到4GB以外的記憶體中,還必須在應用程式可直接訪問的3GB記憶體(如果使用了/3GB開關,如果沒有使用該開關則為2GB)中使用一部分空間來儲存,這一部分記憶體我稱為直接資料塊快取(自己起的名字:-))。也就是說“資料塊快取=AWE資料塊快取+直接資料塊快取”,為什麼會這樣呢,因為oracle緩衝到記憶體中的每個資料塊的頭部必須儲存到“直接資料塊快取”中,是不能夠儲存到“AWE資料塊快取”中的,並且每個資料塊的大小(db_block_size)和資料塊的多少(db_block_buffers)都會影響到頭部佔用空間的多少。並且訪問“直接資料塊快取”要比“AWE資料塊快取” 快, 因此AWE_WINDOW_MEMORY一般來講需要設定的儘量大(但不能無限大,比如必須小於3GB),oracle建議以預設值為基礎,以20%遞增擴大,進行測試。比如先測試1GB大小,在測試1.2GB大小等等。
一般來講AWE_WINDOW_MEMORY有一個最小公式
min(AWE_WINDOW_MEMORY)=(4096 * db_block_size * db_block_lru_latches)/8
其中:
db_block_lru_latches = (Max buffer pools * SETS_PER_POOL)
max buffer pools是一個常量=8
sets_per_tool=2*cpu_count (use_indirect_data_buffers=true)
sets_per_tool=cpu_count/2 (use_indirect_data_buffers<>true)

總結:使用中存在以下問題
(1)如果作業系統沒有啟用PAE功能,當分配給oracle的記憶體超過4G時出現作業系統中記憶體已經分配,但是show sga檢視oracle的實際記憶體分配時不正常(有時只顯示分配了幾百MB)
(2)如果沒有授予"Lock Pages in Memory"的系統許可權則提示如下錯誤資訊:
        ora-27102:out of memory
        OSD-00009:Message 9 not found; product=RDBMS; facility = SOSD
        O/S-Error: (OS 8) 4f4"?U<d2:Wc#,N^7(4&@m4KC|An!# (或O/S-Error: (OS 8) 儲存空間不足,無法處理此命令。)
(3)如果沒有新增USE_INDIRECT_DATA_BUFFERS=TRUE引數則啟動資料庫例項時提示如下錯誤資訊:
        ora-27102:out of memory
(4)平時如果使用shutdown命令停止資料庫,而不是停止oracle服務則會出現先前分配的記憶體沒有被釋放的現象

相關推薦

oracle如何使用4G以上記憶體

由於工作需要,單位的伺服器進行升級,使用至強CPU,記憶體為16GB,系統為windows server 2003 Enterprise R2,資料庫為oracle8i所以一直在查詢如何在32位系統中使oracle使用超過4G記憶體的問題,baidu了n篇文章,發現在細節上寫

解決linux無法識別4G以上記憶體問題一例

       單位的舊伺服器,作業系統為sles 10 sp1,安裝時僅有2G記憶體,遷移到虛擬機器之後增加記憶體到8G,無法識別新增記憶體,需要啟用bigsmp核心才能識別更多記憶體,剛開始查了很多重新編譯核心的資料

電腦一開機記憶體(共8G)就用了70%以上,工作管理員裡面檢視沒有佔用記憶體很高的程序,原來是驅動問題

現象描述:        出現兩次這個問題,都是長時間開機後,出現記憶體佔用很高,重啟還是記憶體佔用很高,而且工作管理員裡面檢視,實際沒有程序佔用那麼高。 曾經試過很多種辦法,但是一樣的現象卻有不同的原因。 比如試過停掉superf

【Linux開發】GCC 4.8及以上支援記憶體非法訪問檢查

gcc4.8及以上版本支援地址越界,野指標檢查,只需要在編譯時使用-fsanitize=address選項即可,當執行程式時如果訪問非本程式申請的地址就會報錯。[email protected]:/home/ngos/practice> vi nullpoi

Linux系統記憶體佔用90%以上——解決方法

最近遇到一個疑問,不管是top,還是cat /proc/meminfo,  發現free記憶體基本快沒了,難道我們的程式出問題了?排查半天沒有事, 後來百度到相關帖子,記錄一下,這是Linux核心機制, Linux與Windows不同,會存在快取記憶體,通常叫做Cac

Android6.0以上應用在長時間在後臺,因為記憶體不足導致系統回收記憶體,當再次啟動應用出現Fragment重疊或者空白、異常解決方案(提供模擬記憶體不足導致系統回收記憶體的方案)。

  Android6.0以上應用在長時間在後臺,因為記憶體不足導致系統回收記憶體,當再次啟動應用出現Fragment重疊或者空白解決方案。首先提供一個方法模擬記憶體不足導致系統回收記憶體的方案:開啟Android Studio -->Tools-->Android

Android 5.1版本以上WebView記憶體洩漏問題及快速解決方法

轉載自:http://www.jb51.net/article/113315.htm 問題背景 今天在排查專案記憶體洩漏過程中發現了一些由WebView引起的記憶體洩漏,經過測試發現該部分洩漏只會出現在android 5.1及以上的機型。雖然專案使用WebView的

Monkey出現SystemServer 記憶體佔用高達200MB以上,長時間等待無降低

5臺手機有一臺保持在280M佔用沒有降下來,其他4臺都降到150M左右; 沒有降下來的手機其佔用增長,主要體現在java heap和native heap上面。 XXXX:/ # cat /d/ion/ion_mm_heap | grep Splash 0xc2552cc

利用 LeakCanary 來檢查 Android 記憶體洩漏 6.0以上版本空指標解決

1.3. 在6.0預覽版報錯 * FAILURE: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a nul

WF4.0以上使用代碼完整自定義動態生成執行工作流Xaml文件

load 控制 brush 類型 rpv 返回 cap 並且 sco 給大家分享一下,如何完全使用代碼自定義的創建生成工作流文件(用代碼創建Xaml文件),並且動態加載運行所生成的工作流。 工作流生成後 在Xaml文件裏的主要節點如下: 輸入輸出參數 <x

使用fdmemTable來代替clientDataset,解決MySQL5.6(含)以上版本用cds多次更新時的錯誤

提交 sage string fdm pos final .text .post 1.5 //讀取mysql保存到fdMemTable中 procedure TForm3.btnOpen1Click(Sender: TObject);var stream, stream2

HBase1.0以上版本號的API改變

reg hbase value col min sea ron factor valueof HBase1.0以上版本號已經廢棄了 HTableInterface,HTable,HBaseAdmin等API的使用。新增了一些API來實現之前的功能: Connect

fixedBox固定div漂浮代碼 支持ie6以上大部分瀏覽器

after set document .sh head ack align his cti fixedBox固定div漂浮代碼 支持ie6以上大部分瀏覽器 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi

關於PS4以上的一個新方法

style 微軟雅黑 justify 關於PS4以上的一個新方法最近在無意中發現一個PSCmdlet中的新的方法,應該在PS3.0 以上都會有2.0 由於實在懶得弄個demo所以沒驗證,估計沒有這裏還得提一下 某不給代碼就噴的孩子 如果你要噴出門左轉 不謝!由於我是在C# 開發Cmdlet中無意發

Xcode7 運行iOS10以上系統(10.1、10.2、10.3)解決Could not find Developer Disk Image

ges 添加 -1 eve device images 真機 文件 eight 由於歷史原因,需要在Xcode7上真機運行下app,無奈手機系統已是10.3了,一運行, 就提示:Could not find Developer Disk Image 解決辦法: 1、找

mysql5.7以上安裝

set https ini 密碼 -1 sta success 添加 sed 下載:https://dev.mysql.com/downloads/mysql/ 1.在解壓的mysql下(bin目錄統計),創建my.ini 文件,內容日下(路徑根

如何判斷瀏覽器為ie10以上

style ast media -h css ras 媒體查詢 如果 and 如果針對ie10 以上單獨寫css樣式的話,ie10以上已經不提供 <!--[if 。。。]><![endif]--> 這種方法去操作了,所以可以用css媒體查詢的

處理百萬級以上數據提高查詢速度的方法

pro 需要 存儲空間 and 包括 col sql查詢 意義 調整 1.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。 2.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的

ECshop在PHP5.3以上版本錯誤處理

use 替換 version not 開源 lac 剛才 錯誤2 值傳遞 ecshop是一套開源的商城系統,由於出現較早,很多寫法不支持較高版本的PHP,目前PHP5.2對ecshop的支持很少。 一般在高版本的PHP中,會出現一些問題,下面是一些在網上找到的答案,經過自己

springmvc圖片上傳(兼容ie8以上,實時預覽)

處理 spa aps news time htm tip 技術分享 ans html代碼: <form id="uploadform" method="post" enctype="multipart/form-data"> <