Oracle 10G 如何使用超過1.7G的記憶體

eric0435發表於2012-05-25

Oracle 10G 如何使用超過1.7G的記憶體

(2009-10-21 18:20:17)

轉載

標籤:

雜談

 

如果你的ORACLE 版本是32位的,如果不做一些配置你是無論如何使用不到1.7G以上記憶體的。

前兩天公司裡一個軟體系統,需要配置這樣的環境,對於我這樣的ORACLE所謂的高手,有點不知所措,甚至要硬著頭皮去搞定它,
這可是到新公司接到的第一件活。必須搞定,否則ORACLE DBA就圖有虛名了。於是馬上上網搜一下,文章果然,但是大都雷同,
而且針對的是ORACLE9I 的。我在實驗的時候,也把客戶的環境搞雜了,實在慚愧呀。不過經過一天多的折騰,也算是搞出來了。

軟體環境:
Oracle 10.2.0.1
OS:Windows 2003 Server SP2 32bit

硬體環境:
記憶體:4G
CPU:Intel Core(TM)2 6300 1.86Ghz

這個環境很重要,特別是ORACLE的版本,跟ORACLE9i的配置肯定是不一樣的。

1) 作業系統配置AWE,主要是修改boot.ini檔案

    右擊"我的電腦",選擇"屬性"--&gt高階選項卡,找到啟動與故障恢復,單擊設定,然後單擊編輯
   
  

/PAE選項,修改後的檔案如下:
    [boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect/pae
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn

2) 配置oracle可以使用的記憶體,修改登錄檔。
  
找到ORACLE的登錄檔項HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1,再你的機器上KEY_OraDb10g_home1不是這個名稱,
  
新增一個字串值項:AWE_WINDOW_MEMORY ,這個值是你準備分配給資料庫用的最大記憶體數(BYTE為單位),例如你想分配4G,那這個值就是
   4*1024*1024*1024

 

3) 獲取可編輯的ORACLE初始化引數檔案
Windows
命令列

Sqlplus "/ as sysdba"   REM (如果登陸不進去將當前使用者加入到ora_dba組中)

SQLPLUS>CREATE PFILE='初始化引數檔案的路徑' from spfile

SQLPLUS>Shutdown immediate

SQLPLUS>exit

4) 編輯ORACLE初始化引數檔案
請用Ulatra editor(當然其他的也可以,但是千萬不要用記事本) 開啟在第三步生成的初始化引數檔案(最好能備份一下,以便出現差錯的時候還可以使用最初的檔案啟動)

第一登出掉以下行:
sga_max_size
sga_target
DB_CACHE_SIZE

修改或者新增以下引數
*.db_block_buffers=262144
    #等於原來的DB_CACHE_SIZE/db_block_size, 例如你希望DB_CACHE_SIZE的大小是2G,則此值是2*1024*1024K/8K= 262144
*.SHARED_POOL_SIZE=419430400    #
是以byte為單位的   400M(這個引數設定過大會報錯的,因為ORACLE AWE的配置不是針對他的)
*.log_buffer=73400320           #
是以byte為單位的   70M(這個引數設定過大會報錯的,因為ORACLE AWE的配置不是針對他的)
*.use_indirect_data_buffers=true   #
這個引數的含義是我們是透過設定db_block_buffers來計算得到DB_CACHE_SIZE

 

5) 啟動ORACLE,並重新建立spfile
 Windows
命令列下執行:
 Sqlplus "/ as sysdba"
 SQLPLUS>Startup pfile='
第四步修改後的初始化引數檔案的路徑'
 SQLPLUS>Create Spfile from pfile='
第四步修改後的初始化引數檔案的路徑'   #你會發現在你的ORACLE HOME/Database目錄下新生成了一個檔案SPFILEOracleSID.ORA
 SQLPLUS>Shutdown immediate

6) 將第三步生成的檔案ORACLE HOME/Database/SPFILEOracleSID.ORA 複製到ORACLE HOME/dbs

前面兩步的目的是恢復預設的以spfile引數檔案方式啟動資料庫,否則你的設定都將無效

7) 重新啟動Oracle
Windows
命令列
Sqlplus "/ as sysdba"
SQLPLUS>Startup

 

本文來自:http://www.cnblogs.com/SharkXu/archive/2009/03/31/oracle10g_awe.html

google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);

oracle4G以上記憶體的使用方法


來源:中國自學程式設計網   釋出日期:2008-11-17 


由於工作需要,單位的伺服器進行升級,使用至強CPU,記憶體為8GB,系統為windows2003,資料庫為oracle8i所以一直在查詢如何在32位系統中使oracle使用超過4G記憶體的問題,baidun篇文章,發現在細節上寫的都不夠詳細,又到微軟和oracle網站上查詢,終於對原理和方法有了一個大致瞭解,在此寫出來供大家參考,如有錯誤還請指正。
1
、由於32位系統記憶體定址只能到4G,所以在32位系統上使用超過4G的記憶體,首先要使用支援大記憶體的軟硬體,比如使用至強的CPU(雖然是32CPU,但是上增加了擴充套件定址的能力),windows2003企業版或資料中心版。
2
、在作業系統中啟用PAEPhysical Address Extensions )功能,這樣oracle便可以透過windowsAWEAddress Windowing ExtensionsAPI使用多餘4G的記憶體。
方法:開啟系統根目錄下的隱藏檔案 Boot.ini ,新增 PAE 開關:
1multi(0)disk(0)rdisk(0)partition(2)\%systemroot%="Windows Server 2003, Datacenter Edition" /PAE
2multi(0)disk(0)rdisk(0)partition(2)\%systemroot%="Windows Server 2003, Datacenter Edition" /3GB /PAE
我們知道32windows對於每個程式都分配4GB記憶體(虛擬記憶體),其中起始的2GBwindows核心使用,剩餘的歸應用程式本身使用。因此這兩種方法的區別就在於:
方法一隻使用了/PAE開關表示啟用/PAE功能但是系統對每個程式仍然採用2G核心、2G應用程式的記憶體分配方式。
方法二除了/PAE開關還使用了/3GB開關表示不僅啟用/PAE功能並且系統對每個程式採用1G核心、3G應用程式的記憶體分配方式。不過這種方式不支援大於16GB的記憶體,也就是說如果你的實際記憶體超過16GB則只能使用方法一,這是因為大於16GB1G的核心記憶體已經不夠windows實現PAE功能。
3
、給執行Oracle資料庫的作業系統帳戶,授予"Lock Pages in Memory"的系統許可權。
執行 gpedit.msc開啟組策略控制檯
計算機配置”->“Windows 設定”->“安全設定”->“本地策略”->“使用者權利指派
雙擊右邊鎖定記憶體中的頁(或名為"記憶體中鎖定頁"),在本地安全策略設定對話方塊中,單擊新增按鈕,在選擇使用者或組對話方塊中,新增有權執行 oracle的帳戶。
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 Poollog 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
其中:
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

32Windows上使用超過1.7GB SGA的方法


正常情況下,Oracle SGA32位作業系統下的最高上限是1.7GB;若要調到1.7GB以上,就會提示ORA-27102out of memory)錯誤。
要想使SGA超過1.7GB,則必須使用Windows提供的4GT4G Tunning)技術。4GT技術原則上可以使用在實體記憶體不超過2GB的狀況下,但Oracle公司不推薦這種做法,這樣會嚴重影響Oracle執行的效能。但實體記憶體在4GB4GB以上時,為使Oracle 9.2.0.xSGA超過1.7GB,則必須使用4GT技術。
MS的文件,4GT只能用於以下Windows的版本:
Ø        Windows 2000 Datacenter Server
Ø        Windows 2000 Advanced Server
Ø        Windows 2003 Datacenter Edition
32bit
Ø        Windows 2003 Enterprise Edition
32bit
4GT
支援的Oracle資料庫的版本:
Ø        Oracle 8.1.6.X
Ø        Oracle 8.1.7.X
Ø        Oracle 9.2.X
注意:不支援Oracle 9.1.0.x
方法
u       
第一步:修改 boot.init的啟動引數,加入 /3G /PAE切換開關。
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows Server 2003, Enterprise" /3G /PAE /fastdetect
PAE
Pysical Address Extensions.
u       
第二步:修改登錄檔,加入AWE_WINDOW_MEMORY
AWE
Address Windows Extensions
Oracle 8.1.7版本及其以下版本啟動資料庫時,不需要設定AWE_WINDOW_MEMORY的最小值,而在Oracle 9.2.0.x的版本中則需要強制設定AWE_WINDOW_MEMORY的最小值。這個最小值在Oracle 8.1.7中透過 DB_BLOCK_LRU_LATCHES引數設定,在Oracle9.2.0.x中則透過 _DB_BLOCK_LRU_LATCHES隱含引數設定。Oracle 9.2.0.xAWE_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_POOL是個變數,它的大小是由是否啟用VLM(即設定USE_INDIRECT_DATA_BUFFERS=TRUE引數)決定:
SETS_PER_POOL = 2* CPU_COUNT (
啟用 VLM)
SETS_PER_POOL= CPU Count /2 (
不啟用VLM)
例如:
CPU's = 2
DB_BLOCK_SIZE = 8192
Total RAM = 8 GB
SETS_PER_POOL = 2 * CPU_COUNT = 4
_DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*4 = 32
MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 8192 * 32) / 8 = 134217728 bytes = 128 MB
這樣在Windows的登錄檔中的HKLMSoftwareOracleHomex下的AWE_WINDOW_MEMORY值至少是128M,否則就會提示ORA-27102out of memory)錯誤。
u       
第三步:在Oracle中啟用AWE
修改初始化引數檔,註釋掉 DB_CACHE_SIZE引數,加入以下引數:
USE_INDIRECT_DATA_BUFFERS = TRUE
DB_BLOCK_BUFFERS = 360000
登入SQL*PLUS,產生SPFILE,然後執行啟動資料庫,此時SGA已經超過 1.7GB了。


本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/george188/archive/2009/10/19/4699231.aspx

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-730930/,如需轉載,請註明出處,否則將追究法律責任。

相關文章