轉(zhuǎn)自:http://blog.163.com/yy_wq80/blog/static/4027606200812911834338/
前一陣,單位的oralce突然當(dāng)機(jī)了.檢查原因.一看原來SGA的內(nèi)存只有1.4G太小了.那就調(diào)吧.準(zhǔn)備先調(diào)到3G可是一調(diào)報(bào)錯(cuò)了.查了相關(guān)資料原來發(fā)現(xiàn)是oracle的限制.
我的電腦配置:
CPU:至強(qiáng)2.8X8、內(nèi)存:12G、硬盤:1T、磁盤陣列5
以下是操作步驟
1.打開開關(guān) boot.ini 增加 /3G /PAE
為什么要加二個(gè)呢.有的資料是這么說的:同時(shí)使用內(nèi)存最到能夠支持到16G,如果用使用16G以上的內(nèi)存,則必須選擇其中的一種使用了。以下是我的boot文件
[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
2.修改注冊表
HKEY_Local_Machine-software-oracle-homeX(代表不同的數(shù)0,1,2,3...)
在 他的里面增加一個(gè)DWORD值,名稱為AWE_WINDOW_MEMORY 里面的內(nèi)存是十六進(jìn)制數(shù),單位為字節(jié),比如你要增加200M就要在里面寫上200X1024X1024=209715200 即200M大小,那么oracle的數(shù)據(jù)緩沖區(qū)將占用200M的普通內(nèi)存,其余部分(1G - 200M = 824M)則使用間接內(nèi)存。我填寫的是1024X1024X1024=1048576000,1G內(nèi)存。大小為你需要讓oracle使用普通內(nèi)存作為緩存的大小(不是windows讓出來的1G,而是內(nèi)存地址在0x00000000 到 0x7FFFFFFF 之間的內(nèi)存大小)這樣在Windows的注冊表中的HKLM\Software\Oracle\HomeX下的AWE_WINDOW_MEMORY若未設(shè)定,默認(rèn)值為1024M。下面會(huì)說明這個(gè)值的具體計(jì)算方法。
3.打開本地安全策略,將本地策略中的用戶權(quán)利指派下的“內(nèi)存中鎖定頁”(Lock Pages in Memory權(quán)限)權(quán)限賦給管理員(運(yùn)行Oracle的用戶).
4.重起計(jì)算機(jī)
5.如果你的是oracle 9.0.2.1就要下載補(bǔ)丁了要用oracle 9.0.2.7 就要去網(wǎng)上下了
6.接下來就是要配oralce的參數(shù)
需要設(shè)置的參數(shù)如下(通過PFILE、SPFILE都可以,注意先備份,免得出錯(cuò)無法啟動(dòng)Oracle):
#如果設(shè)置了這個(gè)參數(shù),對(duì)于Oracle9.2.0的版本則不能再使用DB_CACHE_SIZE參數(shù)了,只能使用DB_BLOCK_BUFFERS參數(shù)。擴(kuò)展的內(nèi)存只能增加到BUFFER CACHE中去使用,因此只能增大DB_BLOCK_BUFFERS這個(gè)參數(shù)去擴(kuò)展SGA區(qū)。
USE_INDIRECT_DATA_BUFFERS=TRUE
#乘數(shù)據(jù)庫塊的大小,為高速緩存的大小。
#reset掉參數(shù)DB_CACHE_SIZE
DB_BLOCK_BUFFERS=262144 #若塊大小為4096,則為1G
# 把oracle SGA鎖定到內(nèi)存中,不產(chǎn)生頁面交換文件(8i的參數(shù)可能是lock_sga = true)
# 對(duì)于一個(gè)有4G物理內(nèi)存的系統(tǒng)來講,可能這一個(gè)參數(shù)并不是必須的
pre_page_sga = true
#使用命令,注意雙引號(hào),alter system set "_db_block_lru_latches"=64 scope=spfile;
_db_block_lru_latches=64
設(shè)置完畢。
_db_block_lru_latches = (Max buffer pools * SETS_PER_POOL)
Max Buffer Pools是個(gè)常量,等于8,SETS_PER_POOL是個(gè)變量,它的大小由是否啟用VLM(即設(shè)定USE_INDIRECT_DATA_BUFFERS=TRUE參數(shù))決定:
SETS_PER_POOL = 2* CPU_COUNT (啟用 VLM)
SETS_PER_POOL= CPU Count /2 (不啟用VLM)
例如:
CPU's = 16
DB_BLOCK_SIZE = 8192
Total RAM = 16 GB
SETS_PER_POOL = 2 * CPU_COUNT = 32
_DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*32 = 256 MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 8192 * 256) / 8 = 1073741824 bytes = 1024 MB
這樣在Windows的注冊表中的HKLM\Software\Oracle\Homex下的AWE_WINDOW_MEMORY值至少是1024M,否則就會(huì)提示錯(cuò)誤:
ORA-27102 out of memory
OSD-00034 Message 34 not found; Product=RDBMS;facility =SOSD
O/S Error: (OS
Not enough storage is available to process this command
另外幾篇文章:
(第一篇)redhat
-----------------------------------
今天一臺(tái)Linux服務(wù)器擴(kuò)展了一下內(nèi)存,達(dá)到4G,開發(fā)的人自己修改了一下SGA結(jié)果數(shù)據(jù)庫無法啟動(dòng)了.
啟動(dòng)不了時(shí),出的錯(cuò)誤是這個(gè)樣子的:
[oracle@neirong oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Fri Nov 25 15:43:26 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-27123: unable to attach to shared memory segment
Linux Error: 22: Invalid argument
Additional information: 1
Additional information: 458753
SQL> exit
Disconnected
在32位平臺(tái)上,缺省的SGA最大只能擴(kuò)展到1.7G,如果需要支持更大的內(nèi)存,就需要降低mapped_base,重新Link Oracle軟件.
俺的平臺(tái)為:
[oracle@neirong bdump]$ cat /etc/redhat-release
Red Hat Enterprise Linux AS release 3 (Taroon Update 2)
簡單操作如下:
cd $ORACLE_HOME/rdbms/lib
cp ksms.s ksms.s.bak
genksms -s 0x12000000 > ksms.s
make -f ins_rdbms.mk ksms.o
make -f ins_rdbms.mk ioracle
此處先備份ksms.s文件,如果編譯過程中出現(xiàn)錯(cuò)誤,保證操作可以被恢復(fù):
恢復(fù)步驟大致如下:
cd $ORACLE_HOME/rdbms/lib
cp ksms.s.bak ksms.s
genksms > ksms.s
make -f ins_rdbms.mk ksms.o
make -f ins_rdbms.mk ioracle
以下是操作日志:
[oracle@neirong dbs]$ cd $ORACLE_HOME/rdbms/lib
[oracle@neirong lib]$ genksms -s 0x12000000 > ksms.s
[oracle@neirong lib]$ make -f ins_rdbms.mk ksms.o
[oracle@neirong lib]$ make -f ins_rdbms.mk ioracle
- Linking Oracle
rm -f /opt/oracle/product/9.2.0/rdbms/lib/oracle
gcc -o /opt/oracle/product/9.2.0/rdbms/lib/oracle -L/opt/oracle/product/9.2.0/rdbms/lib/
-L/opt/oracle/product/9.2.0/lib/ -L/opt/oracle/product/9.2.0/lib/stubs/
-Wl,-E `test -f /opt/oracle/product/9.2.0/rdbms/lib/skgaioi.o && echo
/opt/oracle/product/9.2.0/rdbms/lib/skgaioi.o` /opt/oracle/product/9.2.0/rdbms/lib/opimai.o
/opt/oracle/product/9.2.0/rdbms/lib/ssoraed.o /opt/oracle/product/9.2.0/rdbms/lib/ttcsoi.o
/opt/oracle/product/9.2.0/lib/nautab.o /opt/oracle/product/9.2.0/lib/naeet.o
/opt/oracle/product/9.2.0/lib/naect.o /opt/oracle/product/9.2.0/lib/naedhs.o
/opt/oracle/product/9.2.0/rdbms/lib/config.o -lserver9 -lodm9 -lskgxp9 -lskgxn9 -lclient9
-lvsn9 -lwtcserver9 -lcommon9 -lgeneric9 /opt/oracle/product/9.2.0/rdbms/lib/defopt.o
-lknlopt `if /usr/bin/ar tv /opt/oracle/product/9.2.0/rdbms/lib/libknlopt.a | grep
xsyeolap.o > /dev/null 2>&1 ; then echo "-loraolap9" ; fi`
-lslax9 -lpls9 -lplp9 -lserver9 -lclient9 -lvsn9 -lwtcserver9 -lcommon9 -lgeneric9
-lknlopt -lslax9 -lpls9 -lplp9 -ljox9 -lserver9 -locijdbcst9 -lwwg9
`cat /opt/oracle/product/9.2.0/lib/ldflags` -lnsslb9 -lncrypt9 -lnsgr9 -lnzjs9
-ln9 -lnl9 -lnro9 `cat /opt/oracle/product/9.2.0/lib/ldflags` -lnsslb9 -lncrypt9
......
mv -f /opt/oracle/product/9.2.0/bin/oracle /opt/oracle/product/9.2.0/bin/oracleO
mv /opt/oracle/product/9.2.0/rdbms/lib/oracle /opt/oracle/product/9.2.0/bin/oracle
chmod 6751 /opt/oracle/product/9.2.0/bin/oracle
此后數(shù)據(jù)庫可以以超過1.7G的SGA區(qū)設(shè)置啟動(dòng):
SQL> startup
ORACLE instance started.
Total System Global Area 2685476820 bytes
Fixed Size 454612 bytes
Variable Size 1073741824 bytes
Database Buffers 1610612736 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
(第二篇)WINDOWS平臺(tái)上擴(kuò)展SGA
-----------------------
針對(duì)32bit的Windows。Windows2000上不能利用超過4G的內(nèi)存,一般是2G的內(nèi)存保留給進(jìn)程,2G內(nèi)存保留給核心的。在Windows2000 Advanced Server上可以分配3G給進(jìn)程,1G留給核心的。
1. 如果機(jī)器的內(nèi)存在4G以下,可以使用Physical Address Extensions(PAE)或者是Address Windowing Extensions(AWE)進(jìn)行擴(kuò)展,如果機(jī)器內(nèi)存大于4GB就只能使用AWE進(jìn)行擴(kuò)展了。
AWE支持以下的Windows操作系統(tǒng):
Windows 2000 Datacenter Server
Windows 2000 Advanced Server
Windows 2003 Datacenter Edition(32bit)
Windows 2003 Enterprise Edition(32bit)
AWE不支持以下的Windows操作系統(tǒng):
Windows 2000 Server(Standard)
Windows2000 Professional
Windows XP Home Edition
Windows XP Professional
Windows 2003 Standard Edition
Windows 2003 Web Edition
AWE支持的Oracle數(shù)據(jù)庫的版本:
Oracle 8.1.6.X
Oracle 8.1.7.X
Oracle 9.2.X
AWE不支持Oracle9.0.1.X
在標(biāo)準(zhǔn)版的Oracle9.2.0.1上,如果你設(shè)置了use_indirect_data_buffers=true,啟動(dòng)就會(huì)報(bào)錯(cuò):
ORA-439-feature not enabled:very large memory.
這個(gè)是標(biāo)準(zhǔn)版的Oracle的9.2.0.1的一個(gè)bug(#2520796),在Oracle9.2.0.2中解決了。
2. 在操作系統(tǒng)上啟動(dòng)AWE
AWE在操作系統(tǒng)上可以通過在boot.ini文件中加/PAE切換啟用。
例如:
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /PAE
也可以同時(shí)使用/PAE和/3G在同一臺(tái)機(jī)器上,例如:
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /3GB /PAE
但是同時(shí)使用內(nèi)存最到能夠支持到16G,如果用使用16G以上的內(nèi)存,則必須選擇其中的一種使用了。
3. 在Oracle上啟用AWE
首先要在啟動(dòng)的參數(shù)文件中設(shè)置參數(shù)
USE_INDIRECT_DATA_BUFFERS=TRUE
如果設(shè)置了這個(gè)參數(shù),對(duì)于Oracle9.2.0的版本則不能再使用DB_CACHE_SIZE參數(shù)了,只能使用DB_BLOCK_BUFFERS參數(shù)。
擴(kuò)展的內(nèi)存只能增加到BUFFER CACHE中去使用,因此只能增大DB_BLOCK_BUFFERS這個(gè)參數(shù)去擴(kuò)展SGA區(qū)。
4. AWE_WINDOW_MEMORY實(shí)現(xiàn)故障解決
在Oracle8.1.7版本以下啟動(dòng)數(shù)據(jù)庫的時(shí)候不用設(shè)置AWE_WINDOW_MEMORY的最小值,而在Oracle9.2.0的版本中則強(qiáng)制要設(shè)置AWE_WINDOW_MEMORY的最小值,這個(gè)最小值在Oracle8.1.7中通過DB_BLOCK_LRU_LATCHES參數(shù)設(shè)定,在Oracle9.2.0中則通過_DB_BLOCK_LRU_LATCHES隱含參數(shù)設(shè)定,Oracle9.2.0的AWE_WINDOW_MEMORY的最小值由以下的公式計(jì)算:
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是個(gè)常量,等于8,SETS_PER_POOL是個(gè)變量,它的大小由是否啟用VLM(即設(shè)定USE_INDIRECT_DATA_BUFFERS=TRUE參數(shù))決定:
SETS_PER_POOL = 2* CPU_COUNT (啟用 VLM)
SETS_PER_POOL= CPU Count /2 (不啟用VLM)
例如:
CPU's = 16
DB_BLOCK_SIZE = 8192
Total RAM = 16 GB
SETS_PER_POOL = 2 * CPU_COUNT = 32
_DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*32 = 256 MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 8192 * 256) / 8 = 1073741824 bytes = 1024 MB
這樣在Windows的注冊表中的HKLM\Software\Oracle\Homex下的AWE_WINDOW_MEMORY值至少是1024M,否則就會(huì)提示錯(cuò)誤:
ORA-27102 out of memory
OSD-00034 Message 34 not found; Product=RDBMS;facility =SOSD
O/S Error: (OS
Not enough storage is available to process this command
(第三篇)windows內(nèi)存調(diào)優(yōu)
內(nèi)存優(yōu)化是Windows平臺(tái)的關(guān)鍵設(shè)置,首先了解一下Windows 2000平臺(tái)的Oracle結(jié)構(gòu):
基于線程的結(jié)構(gòu)
Windows2000是基于線程的結(jié)構(gòu),相反,Unix操作系統(tǒng)是基于進(jìn)程的結(jié)構(gòu)。這意味著Windows中更多的應(yīng)用,包括Oracle在內(nèi),是以帶有多個(gè)線程的單個(gè)進(jìn)程的形式執(zhí)行,這種基于線程的結(jié)構(gòu)的確給Window2000帶來優(yōu)勢——更容易共享內(nèi)存。內(nèi)存空間為每個(gè)進(jìn)程分配,進(jìn)程間共享內(nèi)存很笨拙,要使用附加編碼,線程是進(jìn)程的子集,使用比進(jìn)程少得多的內(nèi)存。特定進(jìn)程的所有線程共享同樣的進(jìn)程內(nèi)存空間,同一進(jìn)程的線程間共享內(nèi)存比不同進(jìn)程共享內(nèi)存要快,這給基于線程的結(jié)構(gòu)很大優(yōu)勢,更有效。
在服務(wù)器上運(yùn)行的每個(gè)應(yīng)用程序都有一個(gè),而且只有一個(gè)進(jìn)程。進(jìn)程是應(yīng)用程序的載體,是用來容納執(zhí)行應(yīng)用程序?qū)嶋H工作的線程的。從用戶角度看,進(jìn)程是不用任何專門工具就可以看到的組件。進(jìn)程對(duì)其他應(yīng)用程序組件的作用就像容器一樣。它持有虛擬的存儲(chǔ)空間、數(shù)據(jù)、系統(tǒng)資源和應(yīng)用程序設(shè)置。雖然線程可以分配、重新分配和釋放內(nèi)存,但是進(jìn)程接受初始的內(nèi)存分配,并將它分配到請(qǐng)求內(nèi)存的所有線程。線程是包含在進(jìn)程內(nèi)共享所有進(jìn)程資源的單個(gè)執(zhí)行路徑。它還包含堆棧(存儲(chǔ)在內(nèi)存中的變量和其他數(shù)據(jù))、CPU寄存器的狀態(tài)信息(所以,線程可以恢復(fù)它的環(huán)境)、和在系統(tǒng)調(diào)度程序的執(zhí)行列表中的一個(gè)登錄項(xiàng)。每個(gè)線程規(guī)定了完成任務(wù)應(yīng)用程序需要作的某種工作。
使用Task Manager的主要問題是看不到任何線程。Task Manager被設(shè)計(jì)成從進(jìn)程層將應(yīng)用程序作為整體看待。當(dāng)然還可以使用性能監(jiān)視器來監(jiān)視Windows下的Oracle內(nèi)存使用。
從“開始/程序/管理工具”選擇“性能”啟動(dòng)“系統(tǒng)監(jiān)視器”。注意,“性能”包括兩個(gè)MMC插件:“系統(tǒng)監(jiān)視器”和“性能日志和變更”。這時(shí),需要一些被監(jiān)視的計(jì)數(shù)器(計(jì)數(shù)器是一些性能指示器,用于對(duì) Windows 2000的特殊對(duì)象進(jìn)行統(tǒng)計(jì),例如統(tǒng)計(jì)特定線程所要求的處理器時(shí)間)。單擊“添加”按鈕(在圖中看起來象一個(gè)加號(hào)),將看到“添加計(jì)數(shù)器”對(duì)話框。首先需要選擇想監(jiān)視的“性能”對(duì)象。在包含“進(jìn)程”對(duì)象和“線程”對(duì)象的“性能”下拉列表中選擇。
進(jìn)程觀察器(Process Viewer)是比較容易檢查線程和進(jìn)程的方法之一??梢栽?Windows 2000 Support Tools 或Windows 2000 Resource Kit內(nèi)找到一些工具。Windows 2000 Support Tools是Windows 2000的一部分,但是并不自動(dòng)安裝。支持安裝的Windows Installer文件在%CDROM%\SUPPORT\TOOLS\目錄下。只要在2000RKST.MSJ上右擊,并從context菜單上選擇安裝即可。
內(nèi)存
基于線程的結(jié)構(gòu)的確有一些內(nèi)存限制,因?yàn)閱蝹€(gè)進(jìn)程由線程組成,而進(jìn)程的地址空間是受限的,因此很少有空間是機(jī)動(dòng)的。因?yàn)閃indows 2000仍然是32為操作系統(tǒng),單個(gè)進(jìn)程地址空間被限制在4GB內(nèi),其中一半被操作系統(tǒng)保留,這2GB被OS保留的系統(tǒng)內(nèi)存也被視為系統(tǒng)地址空間,他包括OS內(nèi)核編碼、硬件抽象層編碼(HAL)和需要管理進(jìn)程和OS交互的不同的其它結(jié)構(gòu),這2GB的系統(tǒng)地址空間是禁止應(yīng)用程序進(jìn)程訪問的。因此,Windows 2000標(biāo)準(zhǔn)服務(wù)器單個(gè)應(yīng)用程序進(jìn)程可使用內(nèi)存空間共2GB。在Windows 2000高級(jí)服務(wù)器啟動(dòng)文件boot.ini中有/3GB開關(guān),改變這個(gè)比例到3GB,這項(xiàng)技術(shù)被稱作4GB調(diào)優(yōu)(4-gigabyte tuning,或4GT),我們將針對(duì)這個(gè)問題展開詳細(xì)討論。
保留的內(nèi)存是分配給線程的內(nèi)存并且留作將來使用,但沒有實(shí)際使用的內(nèi)存。因?yàn)闆]有實(shí)際使用,因此它對(duì)其它進(jìn)程仍然有效。但是,因?yàn)樗呀?jīng)被分配,它仍然由對(duì)擁有線程的進(jìn)程的總的內(nèi)存限制產(chǎn)生,因此,保留內(nèi)存的計(jì)算針對(duì)2GB或3GB的限制,并且進(jìn)程保留的和使用的內(nèi)存的總和不能超過這個(gè)限制。
除了系統(tǒng)中安裝的物理內(nèi)存之外,Windows 2000還使用虛擬內(nèi)存。這實(shí)際上是駐留在硬盤上的內(nèi)存。但是Windows 2000使得它對(duì)應(yīng)用程序來說,就像是安裝在機(jī)器上內(nèi)存一樣。當(dāng)某個(gè)應(yīng)用程序塊要求訪問那個(gè)內(nèi)存時(shí),Windows 2000就把另外的內(nèi)存塊復(fù)制到磁盤上,而把所要求的內(nèi)存放到物理內(nèi)存中,這些內(nèi)存塊的大小是4KB。也就是說,每次應(yīng)用程序提出對(duì)內(nèi)存的要求時(shí),內(nèi)存就被分配在4KB的頁面內(nèi)。在磁盤上模擬內(nèi)存的文件叫做頁面調(diào)度文件。Virtual Memory Manager(VMM虛擬內(nèi)存管理器)是操作系統(tǒng)管理機(jī)器上的虛擬內(nèi)存組件。所有的內(nèi)存訪問都通過VMM。這意味著每當(dāng)操作系統(tǒng)需要進(jìn)行內(nèi)存調(diào)頁時(shí),就要提出VMM請(qǐng)求。
內(nèi)存調(diào)優(yōu)方法:
(一)使用超過4GB的內(nèi)存
另外,有辦法允許為單個(gè)進(jìn)程或應(yīng)用分配超過32位地址空間的內(nèi)存,為實(shí)現(xiàn)這一點(diǎn),Windows 2000使用物理地址擴(kuò)展(physical address extensions ,或PAE),PAE本質(zhì)上把地址空間從32位增加到36位,但是必須有Pentium Pro或更新的處理器才能享受這個(gè)優(yōu)勢。在Windows NT 4.0下,Intel提供PSE36驅(qū)動(dòng)程序享受全部36位地址空間的優(yōu)勢,但是在Windows 2000 Advanced Server中36位地址空間的支持已經(jīng)建立在操作系統(tǒng)中,然而,應(yīng)用程序必須使用地址窗口擴(kuò)展(Address Windowing Extensions ,或AWE)API寫成,Oracle9i 發(fā)行號(hào)1(Release 1)不支持AWE,所有的Oracle 8i發(fā)行號(hào)(releases 8.1.5–8.1.7)都支持AWE。Oracle在9i發(fā)行號(hào)2(Release 2)中實(shí)現(xiàn)了對(duì)AWE的支持。
(二)AWE和Windows 2000
AWE允許你使用系統(tǒng)中任何附加的超過4GB的內(nèi)存,為了體現(xiàn)這個(gè)優(yōu)勢,你必須有超過4GB的內(nèi)存,必須有Pentium Pro或更新的處理器,必須運(yùn)行Windows 2000高級(jí)服務(wù)器或Windows 2000數(shù)據(jù)中心服務(wù)器,不需要特殊的驅(qū)動(dòng)程序,因?yàn)閃indows 2000已經(jīng)支持AWE。
為了利用這項(xiàng)優(yōu)勢,必須在啟動(dòng)Windows 2000機(jī)器時(shí)在boot.ini文件中使用/PAE開關(guān),你必須確保運(yùn)行Oracle服務(wù)的帳戶有Lock Pages in Memory權(quán)限。給運(yùn)行Oracle服務(wù)的帳戶增加Lock Pages in Memory權(quán)限后,要重新啟動(dòng)OracleService 服務(wù)。
(三)AWE和Oracle
可以確定,Oracle8i所有發(fā)行號(hào)版本和Oracle9i發(fā)行號(hào)2只允許你為數(shù)據(jù)庫塊緩沖區(qū)配置超過4GB限制的內(nèi)存空間,因此,要為用戶連接釋放標(biāo)準(zhǔn)進(jìn)程地址空間的內(nèi)存(低于3GB界限的內(nèi)存)、PGA內(nèi)存和組成SGA的不同內(nèi)存緩沖池。
在初始化參數(shù)文件init.ora中要設(shè)置參數(shù)USE_INDIRECT_DATA_BUFFERS=TRUE,沒有這個(gè)參數(shù),Oracle不能尋址到4GB以上的地址空間。接下來要設(shè)置決定內(nèi)存使用總量的緩沖池大小,設(shè)定DB_BLOCK_SIZE和DB_BLOCK_BUFFERS兩個(gè)參數(shù)。
在Oracle9i發(fā)行號(hào)2中,參數(shù)DB_BLOCK_BUFFERS被參數(shù)DB_CACHE_SIZE所代替,這樣就改變了原來指定緩沖區(qū)塊數(shù)到指定緩沖區(qū)字節(jié)數(shù),同樣,也解釋了在Oracle9i發(fā)行號(hào)2的一個(gè)數(shù)據(jù)庫中支持多個(gè)數(shù)據(jù)庫塊大小。無論用哪種辦法,如果你設(shè)定參數(shù)USE_INDIRECT_BUFFERS=TRUE,你將只能定義和使用單個(gè)數(shù)據(jù)庫塊大小和塊緩沖區(qū)(就象在9i以前的發(fā)行號(hào)中),因此,如果缺省數(shù)據(jù)庫塊大小是4k、8k或其它,而設(shè)置DB_2k_CACHE_SIZE是不允許的。
接下來需要在注冊表中為ORACLE_HOME設(shè)置合適的AWE_WINDOW_MEMORY參數(shù)值,也就是在HKEY_LOCAL_MACHINE\ Software\Oracle\HOME0下,這個(gè)參數(shù)指定字節(jié)數(shù),如果沒有設(shè)置,缺省值是1 GB。這個(gè)參數(shù)的大小取決于你要設(shè)置多少緩沖區(qū)大小,并視為來自3GB進(jìn)程地址空間的常規(guī)內(nèi)存。以緩沖區(qū)大小為6 GB為例,設(shè)置AWE_WINDOW_MEMORY為缺省值1GB,你希望1GB 視為常規(guī)內(nèi)存,并且剩余5GB緩沖區(qū)來自4GB限制以上的地址空間。你希望更多的緩沖池盡可能保留在常規(guī)地址空間,因?yàn)樵L問超過4GB以上的緩沖池比訪問虛擬地址空間緩沖池要慢(盡管仍然比磁盤I/O操作快)。
(四)解決與AWE相關(guān)的內(nèi)存問題
需要注意的是每個(gè)4GB界限以上的塊緩沖區(qū)需要在常規(guī)地址空間保留大約200字節(jié)的緩沖區(qū)頭,因此,在上面的例子中,我們大約有312000個(gè)緩沖區(qū)頭指向擴(kuò)展地址空間的緩沖區(qū),緩沖區(qū)頭大約占80MB常規(guī)內(nèi)存空間,如果數(shù)據(jù)庫塊很小,那么這個(gè)數(shù)量會(huì)相當(dāng)高,因此,必須確保這些緩沖區(qū)頭、AWE_WINDOW_MEMORY、和所有Oracle.exe進(jìn)程的內(nèi)存需求,包括編碼、SGA其它組件、PGA內(nèi)存和每個(gè)用戶連接棧都適合Oracle.exe進(jìn)程的常規(guī)3GB虛擬地址空間。
確認(rèn)你有足夠的物理內(nèi)存處理超過AWE_WINDOW_MEMORY之外的DB_BLOCK_BUFFERS,在我們的例子中定義緩沖池大小為6GB,1GB來自常規(guī)地址空間,剩余5GB來自4GB以外的對(duì)整個(gè)進(jìn)程有效的系統(tǒng)和進(jìn)程地址空間,因此,這個(gè)例子只能工作在至少有9GB內(nèi)存的機(jī)器上,你還應(yīng)該為其它進(jìn)程保留一些空間,只有一個(gè)進(jìn)程可以在某一時(shí)刻訪問附加的內(nèi)存。
象前面所說的那樣,/PAE開關(guān)只用于系統(tǒng)有超過4GB物理內(nèi)存的時(shí)候,但如果系統(tǒng)內(nèi)存少于4GB時(shí),也可模仿這項(xiàng)功能。在boot.ini文件中設(shè)置MAXMEM參數(shù)的值,如下面例子,設(shè)為2GB,意味著任何2GB以上的內(nèi)存都將保留為AWE內(nèi)存。
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced
Server" /fastdetect /PAE /MAXMEM:2048
為一個(gè)數(shù)據(jù)庫使用附加的多個(gè)進(jìn)程
真正的應(yīng)用集群(Real Applications Clusters,RAC)提供有多個(gè)實(shí)例運(yùn)行和訪問同一數(shù)據(jù)的能力。通常,這用于有兩個(gè)或多個(gè)節(jié)點(diǎn)的項(xiàng)目,一個(gè)實(shí)例運(yùn)行在每個(gè)節(jié)點(diǎn)。無論如何,它支持在Oracle9i有兩個(gè)實(shí)例運(yùn)行在一個(gè)節(jié)點(diǎn)訪問同一個(gè)數(shù)據(jù)庫。這能克服每個(gè)進(jìn)程的內(nèi)存限制,又提供某些其它的利益,如應(yīng)用程序失敗檢測。
前一陣,單位的oralce突然當(dāng)機(jī)了.檢查原因.一看原來SGA的內(nèi)存只有1.4G太小了.那就調(diào)吧.準(zhǔn)備先調(diào)到3G可是一調(diào)報(bào)錯(cuò)了.查了相關(guān)資料原來發(fā)現(xiàn)是oracle的限制.
我的電腦配置:
CPU:至強(qiáng)2.8X8、內(nèi)存:12G、硬盤:1T、磁盤陣列5
以下是操作步驟
1.打開開關(guān) boot.ini 增加 /3G /PAE
為什么要加二個(gè)呢.有的資料是這么說的:同時(shí)使用內(nèi)存最到能夠支持到16G,如果用使用16G以上的內(nèi)存,則必須選擇其中的一種使用了。以下是我的boot文件
[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
2.修改注冊表
HKEY_Local_Machine-software-oracle-homeX(代表不同的數(shù)0,1,2,3...)
在 他的里面增加一個(gè)DWORD值,名稱為AWE_WINDOW_MEMORY 里面的內(nèi)存是十六進(jìn)制數(shù),單位為字節(jié),比如你要增加200M就要在里面寫上200X1024X1024=209715200 即200M大小,那么oracle的數(shù)據(jù)緩沖區(qū)將占用200M的普通內(nèi)存,其余部分(1G - 200M = 824M)則使用間接內(nèi)存。我填寫的是1024X1024X1024=1048576000,1G內(nèi)存。大小為你需要讓oracle使用普通內(nèi)存作為緩存的大小(不是windows讓出來的1G,而是內(nèi)存地址在0x00000000 到 0x7FFFFFFF 之間的內(nèi)存大小)這樣在Windows的注冊表中的HKLM\Software\Oracle\HomeX下的AWE_WINDOW_MEMORY若未設(shè)定,默認(rèn)值為1024M。下面會(huì)說明這個(gè)值的具體計(jì)算方法。
3.打開本地安全策略,將本地策略中的用戶權(quán)利指派下的“內(nèi)存中鎖定頁”(Lock Pages in Memory權(quán)限)權(quán)限賦給管理員(運(yùn)行Oracle的用戶).
4.重起計(jì)算機(jī)
5.如果你的是oracle 9.0.2.1就要下載補(bǔ)丁了要用oracle 9.0.2.7 就要去網(wǎng)上下了
6.接下來就是要配oralce的參數(shù)
需要設(shè)置的參數(shù)如下(通過PFILE、SPFILE都可以,注意先備份,免得出錯(cuò)無法啟動(dòng)Oracle):
#如果設(shè)置了這個(gè)參數(shù),對(duì)于Oracle9.2.0的版本則不能再使用DB_CACHE_SIZE參數(shù)了,只能使用DB_BLOCK_BUFFERS參數(shù)。擴(kuò)展的內(nèi)存只能增加到BUFFER CACHE中去使用,因此只能增大DB_BLOCK_BUFFERS這個(gè)參數(shù)去擴(kuò)展SGA區(qū)。
USE_INDIRECT_DATA_BUFFERS=TRUE
#乘數(shù)據(jù)庫塊的大小,為高速緩存的大小。
#reset掉參數(shù)DB_CACHE_SIZE
DB_BLOCK_BUFFERS=262144 #若塊大小為4096,則為1G
# 把oracle SGA鎖定到內(nèi)存中,不產(chǎn)生頁面交換文件(8i的參數(shù)可能是lock_sga = true)
# 對(duì)于一個(gè)有4G物理內(nèi)存的系統(tǒng)來講,可能這一個(gè)參數(shù)并不是必須的
pre_page_sga = true
#使用命令,注意雙引號(hào),alter system set "_db_block_lru_latches"=64 scope=spfile;
_db_block_lru_latches=64
設(shè)置完畢。
_db_block_lru_latches = (Max buffer pools * SETS_PER_POOL)
Max Buffer Pools是個(gè)常量,等于8,SETS_PER_POOL是個(gè)變量,它的大小由是否啟用VLM(即設(shè)定USE_INDIRECT_DATA_BUFFERS=TRUE參數(shù))決定:
SETS_PER_POOL = 2* CPU_COUNT (啟用 VLM)
SETS_PER_POOL= CPU Count /2 (不啟用VLM)
例如:
CPU's = 16
DB_BLOCK_SIZE = 8192
Total RAM = 16 GB
SETS_PER_POOL = 2 * CPU_COUNT = 32
_DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*32 = 256 MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 8192 * 256) / 8 = 1073741824 bytes = 1024 MB
這樣在Windows的注冊表中的HKLM\Software\Oracle\Homex下的AWE_WINDOW_MEMORY值至少是1024M,否則就會(huì)提示錯(cuò)誤:
ORA-27102 out of memory
OSD-00034 Message 34 not found; Product=RDBMS;facility =SOSD
O/S Error: (OS

另外幾篇文章:
(第一篇)redhat
-----------------------------------
今天一臺(tái)Linux服務(wù)器擴(kuò)展了一下內(nèi)存,達(dá)到4G,開發(fā)的人自己修改了一下SGA結(jié)果數(shù)據(jù)庫無法啟動(dòng)了.
啟動(dòng)不了時(shí),出的錯(cuò)誤是這個(gè)樣子的:
[oracle@neirong oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Fri Nov 25 15:43:26 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-27123: unable to attach to shared memory segment
Linux Error: 22: Invalid argument
Additional information: 1
Additional information: 458753
SQL> exit
Disconnected
在32位平臺(tái)上,缺省的SGA最大只能擴(kuò)展到1.7G,如果需要支持更大的內(nèi)存,就需要降低mapped_base,重新Link Oracle軟件.
俺的平臺(tái)為:
[oracle@neirong bdump]$ cat /etc/redhat-release
Red Hat Enterprise Linux AS release 3 (Taroon Update 2)
簡單操作如下:
cd $ORACLE_HOME/rdbms/lib
cp ksms.s ksms.s.bak
genksms -s 0x12000000 > ksms.s
make -f ins_rdbms.mk ksms.o
make -f ins_rdbms.mk ioracle
此處先備份ksms.s文件,如果編譯過程中出現(xiàn)錯(cuò)誤,保證操作可以被恢復(fù):
恢復(fù)步驟大致如下:
cd $ORACLE_HOME/rdbms/lib
cp ksms.s.bak ksms.s
genksms > ksms.s
make -f ins_rdbms.mk ksms.o
make -f ins_rdbms.mk ioracle
以下是操作日志:
[oracle@neirong dbs]$ cd $ORACLE_HOME/rdbms/lib
[oracle@neirong lib]$ genksms -s 0x12000000 > ksms.s
[oracle@neirong lib]$ make -f ins_rdbms.mk ksms.o
[oracle@neirong lib]$ make -f ins_rdbms.mk ioracle
- Linking Oracle
rm -f /opt/oracle/product/9.2.0/rdbms/lib/oracle
gcc -o /opt/oracle/product/9.2.0/rdbms/lib/oracle -L/opt/oracle/product/9.2.0/rdbms/lib/
-L/opt/oracle/product/9.2.0/lib/ -L/opt/oracle/product/9.2.0/lib/stubs/
-Wl,-E `test -f /opt/oracle/product/9.2.0/rdbms/lib/skgaioi.o && echo
/opt/oracle/product/9.2.0/rdbms/lib/skgaioi.o` /opt/oracle/product/9.2.0/rdbms/lib/opimai.o
/opt/oracle/product/9.2.0/rdbms/lib/ssoraed.o /opt/oracle/product/9.2.0/rdbms/lib/ttcsoi.o
/opt/oracle/product/9.2.0/lib/nautab.o /opt/oracle/product/9.2.0/lib/naeet.o
/opt/oracle/product/9.2.0/lib/naect.o /opt/oracle/product/9.2.0/lib/naedhs.o
/opt/oracle/product/9.2.0/rdbms/lib/config.o -lserver9 -lodm9 -lskgxp9 -lskgxn9 -lclient9
-lvsn9 -lwtcserver9 -lcommon9 -lgeneric9 /opt/oracle/product/9.2.0/rdbms/lib/defopt.o
-lknlopt `if /usr/bin/ar tv /opt/oracle/product/9.2.0/rdbms/lib/libknlopt.a | grep
xsyeolap.o > /dev/null 2>&1 ; then echo "-loraolap9" ; fi`
-lslax9 -lpls9 -lplp9 -lserver9 -lclient9 -lvsn9 -lwtcserver9 -lcommon9 -lgeneric9
-lknlopt -lslax9 -lpls9 -lplp9 -ljox9 -lserver9 -locijdbcst9 -lwwg9
`cat /opt/oracle/product/9.2.0/lib/ldflags` -lnsslb9 -lncrypt9 -lnsgr9 -lnzjs9
-ln9 -lnl9 -lnro9 `cat /opt/oracle/product/9.2.0/lib/ldflags` -lnsslb9 -lncrypt9
......
mv -f /opt/oracle/product/9.2.0/bin/oracle /opt/oracle/product/9.2.0/bin/oracleO
mv /opt/oracle/product/9.2.0/rdbms/lib/oracle /opt/oracle/product/9.2.0/bin/oracle
chmod 6751 /opt/oracle/product/9.2.0/bin/oracle
此后數(shù)據(jù)庫可以以超過1.7G的SGA區(qū)設(shè)置啟動(dòng):
SQL> startup
ORACLE instance started.
Total System Global Area 2685476820 bytes
Fixed Size 454612 bytes
Variable Size 1073741824 bytes
Database Buffers 1610612736 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
(第二篇)WINDOWS平臺(tái)上擴(kuò)展SGA
-----------------------
針對(duì)32bit的Windows。Windows2000上不能利用超過4G的內(nèi)存,一般是2G的內(nèi)存保留給進(jìn)程,2G內(nèi)存保留給核心的。在Windows2000 Advanced Server上可以分配3G給進(jìn)程,1G留給核心的。
1. 如果機(jī)器的內(nèi)存在4G以下,可以使用Physical Address Extensions(PAE)或者是Address Windowing Extensions(AWE)進(jìn)行擴(kuò)展,如果機(jī)器內(nèi)存大于4GB就只能使用AWE進(jìn)行擴(kuò)展了。
AWE支持以下的Windows操作系統(tǒng):
Windows 2000 Datacenter Server
Windows 2000 Advanced Server
Windows 2003 Datacenter Edition(32bit)
Windows 2003 Enterprise Edition(32bit)
AWE不支持以下的Windows操作系統(tǒng):
Windows 2000 Server(Standard)
Windows2000 Professional
Windows XP Home Edition
Windows XP Professional
Windows 2003 Standard Edition
Windows 2003 Web Edition
AWE支持的Oracle數(shù)據(jù)庫的版本:
Oracle 8.1.6.X
Oracle 8.1.7.X
Oracle 9.2.X
AWE不支持Oracle9.0.1.X
在標(biāo)準(zhǔn)版的Oracle9.2.0.1上,如果你設(shè)置了use_indirect_data_buffers=true,啟動(dòng)就會(huì)報(bào)錯(cuò):
ORA-439-feature not enabled:very large memory.
這個(gè)是標(biāo)準(zhǔn)版的Oracle的9.2.0.1的一個(gè)bug(#2520796),在Oracle9.2.0.2中解決了。
2. 在操作系統(tǒng)上啟動(dòng)AWE
AWE在操作系統(tǒng)上可以通過在boot.ini文件中加/PAE切換啟用。
例如:
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /PAE
也可以同時(shí)使用/PAE和/3G在同一臺(tái)機(jī)器上,例如:
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /3GB /PAE
但是同時(shí)使用內(nèi)存最到能夠支持到16G,如果用使用16G以上的內(nèi)存,則必須選擇其中的一種使用了。
3. 在Oracle上啟用AWE
首先要在啟動(dòng)的參數(shù)文件中設(shè)置參數(shù)
USE_INDIRECT_DATA_BUFFERS=TRUE
如果設(shè)置了這個(gè)參數(shù),對(duì)于Oracle9.2.0的版本則不能再使用DB_CACHE_SIZE參數(shù)了,只能使用DB_BLOCK_BUFFERS參數(shù)。
擴(kuò)展的內(nèi)存只能增加到BUFFER CACHE中去使用,因此只能增大DB_BLOCK_BUFFERS這個(gè)參數(shù)去擴(kuò)展SGA區(qū)。
4. AWE_WINDOW_MEMORY實(shí)現(xiàn)故障解決
在Oracle8.1.7版本以下啟動(dòng)數(shù)據(jù)庫的時(shí)候不用設(shè)置AWE_WINDOW_MEMORY的最小值,而在Oracle9.2.0的版本中則強(qiáng)制要設(shè)置AWE_WINDOW_MEMORY的最小值,這個(gè)最小值在Oracle8.1.7中通過DB_BLOCK_LRU_LATCHES參數(shù)設(shè)定,在Oracle9.2.0中則通過_DB_BLOCK_LRU_LATCHES隱含參數(shù)設(shè)定,Oracle9.2.0的AWE_WINDOW_MEMORY的最小值由以下的公式計(jì)算:
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是個(gè)常量,等于8,SETS_PER_POOL是個(gè)變量,它的大小由是否啟用VLM(即設(shè)定USE_INDIRECT_DATA_BUFFERS=TRUE參數(shù))決定:
SETS_PER_POOL = 2* CPU_COUNT (啟用 VLM)
SETS_PER_POOL= CPU Count /2 (不啟用VLM)
例如:
CPU's = 16
DB_BLOCK_SIZE = 8192
Total RAM = 16 GB
SETS_PER_POOL = 2 * CPU_COUNT = 32
_DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*32 = 256 MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 8192 * 256) / 8 = 1073741824 bytes = 1024 MB
這樣在Windows的注冊表中的HKLM\Software\Oracle\Homex下的AWE_WINDOW_MEMORY值至少是1024M,否則就會(huì)提示錯(cuò)誤:
ORA-27102 out of memory
OSD-00034 Message 34 not found; Product=RDBMS;facility =SOSD
O/S Error: (OS

(第三篇)windows內(nèi)存調(diào)優(yōu)
內(nèi)存優(yōu)化是Windows平臺(tái)的關(guān)鍵設(shè)置,首先了解一下Windows 2000平臺(tái)的Oracle結(jié)構(gòu):
基于線程的結(jié)構(gòu)
Windows2000是基于線程的結(jié)構(gòu),相反,Unix操作系統(tǒng)是基于進(jìn)程的結(jié)構(gòu)。這意味著Windows中更多的應(yīng)用,包括Oracle在內(nèi),是以帶有多個(gè)線程的單個(gè)進(jìn)程的形式執(zhí)行,這種基于線程的結(jié)構(gòu)的確給Window2000帶來優(yōu)勢——更容易共享內(nèi)存。內(nèi)存空間為每個(gè)進(jìn)程分配,進(jìn)程間共享內(nèi)存很笨拙,要使用附加編碼,線程是進(jìn)程的子集,使用比進(jìn)程少得多的內(nèi)存。特定進(jìn)程的所有線程共享同樣的進(jìn)程內(nèi)存空間,同一進(jìn)程的線程間共享內(nèi)存比不同進(jìn)程共享內(nèi)存要快,這給基于線程的結(jié)構(gòu)很大優(yōu)勢,更有效。
在服務(wù)器上運(yùn)行的每個(gè)應(yīng)用程序都有一個(gè),而且只有一個(gè)進(jìn)程。進(jìn)程是應(yīng)用程序的載體,是用來容納執(zhí)行應(yīng)用程序?qū)嶋H工作的線程的。從用戶角度看,進(jìn)程是不用任何專門工具就可以看到的組件。進(jìn)程對(duì)其他應(yīng)用程序組件的作用就像容器一樣。它持有虛擬的存儲(chǔ)空間、數(shù)據(jù)、系統(tǒng)資源和應(yīng)用程序設(shè)置。雖然線程可以分配、重新分配和釋放內(nèi)存,但是進(jìn)程接受初始的內(nèi)存分配,并將它分配到請(qǐng)求內(nèi)存的所有線程。線程是包含在進(jìn)程內(nèi)共享所有進(jìn)程資源的單個(gè)執(zhí)行路徑。它還包含堆棧(存儲(chǔ)在內(nèi)存中的變量和其他數(shù)據(jù))、CPU寄存器的狀態(tài)信息(所以,線程可以恢復(fù)它的環(huán)境)、和在系統(tǒng)調(diào)度程序的執(zhí)行列表中的一個(gè)登錄項(xiàng)。每個(gè)線程規(guī)定了完成任務(wù)應(yīng)用程序需要作的某種工作。
使用Task Manager的主要問題是看不到任何線程。Task Manager被設(shè)計(jì)成從進(jìn)程層將應(yīng)用程序作為整體看待。當(dāng)然還可以使用性能監(jiān)視器來監(jiān)視Windows下的Oracle內(nèi)存使用。
從“開始/程序/管理工具”選擇“性能”啟動(dòng)“系統(tǒng)監(jiān)視器”。注意,“性能”包括兩個(gè)MMC插件:“系統(tǒng)監(jiān)視器”和“性能日志和變更”。這時(shí),需要一些被監(jiān)視的計(jì)數(shù)器(計(jì)數(shù)器是一些性能指示器,用于對(duì) Windows 2000的特殊對(duì)象進(jìn)行統(tǒng)計(jì),例如統(tǒng)計(jì)特定線程所要求的處理器時(shí)間)。單擊“添加”按鈕(在圖中看起來象一個(gè)加號(hào)),將看到“添加計(jì)數(shù)器”對(duì)話框。首先需要選擇想監(jiān)視的“性能”對(duì)象。在包含“進(jìn)程”對(duì)象和“線程”對(duì)象的“性能”下拉列表中選擇。
進(jìn)程觀察器(Process Viewer)是比較容易檢查線程和進(jìn)程的方法之一??梢栽?Windows 2000 Support Tools 或Windows 2000 Resource Kit內(nèi)找到一些工具。Windows 2000 Support Tools是Windows 2000的一部分,但是并不自動(dòng)安裝。支持安裝的Windows Installer文件在%CDROM%\SUPPORT\TOOLS\目錄下。只要在2000RKST.MSJ上右擊,并從context菜單上選擇安裝即可。
內(nèi)存
基于線程的結(jié)構(gòu)的確有一些內(nèi)存限制,因?yàn)閱蝹€(gè)進(jìn)程由線程組成,而進(jìn)程的地址空間是受限的,因此很少有空間是機(jī)動(dòng)的。因?yàn)閃indows 2000仍然是32為操作系統(tǒng),單個(gè)進(jìn)程地址空間被限制在4GB內(nèi),其中一半被操作系統(tǒng)保留,這2GB被OS保留的系統(tǒng)內(nèi)存也被視為系統(tǒng)地址空間,他包括OS內(nèi)核編碼、硬件抽象層編碼(HAL)和需要管理進(jìn)程和OS交互的不同的其它結(jié)構(gòu),這2GB的系統(tǒng)地址空間是禁止應(yīng)用程序進(jìn)程訪問的。因此,Windows 2000標(biāo)準(zhǔn)服務(wù)器單個(gè)應(yīng)用程序進(jìn)程可使用內(nèi)存空間共2GB。在Windows 2000高級(jí)服務(wù)器啟動(dòng)文件boot.ini中有/3GB開關(guān),改變這個(gè)比例到3GB,這項(xiàng)技術(shù)被稱作4GB調(diào)優(yōu)(4-gigabyte tuning,或4GT),我們將針對(duì)這個(gè)問題展開詳細(xì)討論。
保留的內(nèi)存是分配給線程的內(nèi)存并且留作將來使用,但沒有實(shí)際使用的內(nèi)存。因?yàn)闆]有實(shí)際使用,因此它對(duì)其它進(jìn)程仍然有效。但是,因?yàn)樗呀?jīng)被分配,它仍然由對(duì)擁有線程的進(jìn)程的總的內(nèi)存限制產(chǎn)生,因此,保留內(nèi)存的計(jì)算針對(duì)2GB或3GB的限制,并且進(jìn)程保留的和使用的內(nèi)存的總和不能超過這個(gè)限制。
除了系統(tǒng)中安裝的物理內(nèi)存之外,Windows 2000還使用虛擬內(nèi)存。這實(shí)際上是駐留在硬盤上的內(nèi)存。但是Windows 2000使得它對(duì)應(yīng)用程序來說,就像是安裝在機(jī)器上內(nèi)存一樣。當(dāng)某個(gè)應(yīng)用程序塊要求訪問那個(gè)內(nèi)存時(shí),Windows 2000就把另外的內(nèi)存塊復(fù)制到磁盤上,而把所要求的內(nèi)存放到物理內(nèi)存中,這些內(nèi)存塊的大小是4KB。也就是說,每次應(yīng)用程序提出對(duì)內(nèi)存的要求時(shí),內(nèi)存就被分配在4KB的頁面內(nèi)。在磁盤上模擬內(nèi)存的文件叫做頁面調(diào)度文件。Virtual Memory Manager(VMM虛擬內(nèi)存管理器)是操作系統(tǒng)管理機(jī)器上的虛擬內(nèi)存組件。所有的內(nèi)存訪問都通過VMM。這意味著每當(dāng)操作系統(tǒng)需要進(jìn)行內(nèi)存調(diào)頁時(shí),就要提出VMM請(qǐng)求。
內(nèi)存調(diào)優(yōu)方法:
(一)使用超過4GB的內(nèi)存
另外,有辦法允許為單個(gè)進(jìn)程或應(yīng)用分配超過32位地址空間的內(nèi)存,為實(shí)現(xiàn)這一點(diǎn),Windows 2000使用物理地址擴(kuò)展(physical address extensions ,或PAE),PAE本質(zhì)上把地址空間從32位增加到36位,但是必須有Pentium Pro或更新的處理器才能享受這個(gè)優(yōu)勢。在Windows NT 4.0下,Intel提供PSE36驅(qū)動(dòng)程序享受全部36位地址空間的優(yōu)勢,但是在Windows 2000 Advanced Server中36位地址空間的支持已經(jīng)建立在操作系統(tǒng)中,然而,應(yīng)用程序必須使用地址窗口擴(kuò)展(Address Windowing Extensions ,或AWE)API寫成,Oracle9i 發(fā)行號(hào)1(Release 1)不支持AWE,所有的Oracle 8i發(fā)行號(hào)(releases 8.1.5–8.1.7)都支持AWE。Oracle在9i發(fā)行號(hào)2(Release 2)中實(shí)現(xiàn)了對(duì)AWE的支持。
(二)AWE和Windows 2000
AWE允許你使用系統(tǒng)中任何附加的超過4GB的內(nèi)存,為了體現(xiàn)這個(gè)優(yōu)勢,你必須有超過4GB的內(nèi)存,必須有Pentium Pro或更新的處理器,必須運(yùn)行Windows 2000高級(jí)服務(wù)器或Windows 2000數(shù)據(jù)中心服務(wù)器,不需要特殊的驅(qū)動(dòng)程序,因?yàn)閃indows 2000已經(jīng)支持AWE。
為了利用這項(xiàng)優(yōu)勢,必須在啟動(dòng)Windows 2000機(jī)器時(shí)在boot.ini文件中使用/PAE開關(guān),你必須確保運(yùn)行Oracle服務(wù)的帳戶有Lock Pages in Memory權(quán)限。給運(yùn)行Oracle服務(wù)的帳戶增加Lock Pages in Memory權(quán)限后,要重新啟動(dòng)OracleService 服務(wù)。
(三)AWE和Oracle
可以確定,Oracle8i所有發(fā)行號(hào)版本和Oracle9i發(fā)行號(hào)2只允許你為數(shù)據(jù)庫塊緩沖區(qū)配置超過4GB限制的內(nèi)存空間,因此,要為用戶連接釋放標(biāo)準(zhǔn)進(jìn)程地址空間的內(nèi)存(低于3GB界限的內(nèi)存)、PGA內(nèi)存和組成SGA的不同內(nèi)存緩沖池。
在初始化參數(shù)文件init.ora中要設(shè)置參數(shù)USE_INDIRECT_DATA_BUFFERS=TRUE,沒有這個(gè)參數(shù),Oracle不能尋址到4GB以上的地址空間。接下來要設(shè)置決定內(nèi)存使用總量的緩沖池大小,設(shè)定DB_BLOCK_SIZE和DB_BLOCK_BUFFERS兩個(gè)參數(shù)。
在Oracle9i發(fā)行號(hào)2中,參數(shù)DB_BLOCK_BUFFERS被參數(shù)DB_CACHE_SIZE所代替,這樣就改變了原來指定緩沖區(qū)塊數(shù)到指定緩沖區(qū)字節(jié)數(shù),同樣,也解釋了在Oracle9i發(fā)行號(hào)2的一個(gè)數(shù)據(jù)庫中支持多個(gè)數(shù)據(jù)庫塊大小。無論用哪種辦法,如果你設(shè)定參數(shù)USE_INDIRECT_BUFFERS=TRUE,你將只能定義和使用單個(gè)數(shù)據(jù)庫塊大小和塊緩沖區(qū)(就象在9i以前的發(fā)行號(hào)中),因此,如果缺省數(shù)據(jù)庫塊大小是4k、8k或其它,而設(shè)置DB_2k_CACHE_SIZE是不允許的。
接下來需要在注冊表中為ORACLE_HOME設(shè)置合適的AWE_WINDOW_MEMORY參數(shù)值,也就是在HKEY_LOCAL_MACHINE\ Software\Oracle\HOME0下,這個(gè)參數(shù)指定字節(jié)數(shù),如果沒有設(shè)置,缺省值是1 GB。這個(gè)參數(shù)的大小取決于你要設(shè)置多少緩沖區(qū)大小,并視為來自3GB進(jìn)程地址空間的常規(guī)內(nèi)存。以緩沖區(qū)大小為6 GB為例,設(shè)置AWE_WINDOW_MEMORY為缺省值1GB,你希望1GB 視為常規(guī)內(nèi)存,并且剩余5GB緩沖區(qū)來自4GB限制以上的地址空間。你希望更多的緩沖池盡可能保留在常規(guī)地址空間,因?yàn)樵L問超過4GB以上的緩沖池比訪問虛擬地址空間緩沖池要慢(盡管仍然比磁盤I/O操作快)。
(四)解決與AWE相關(guān)的內(nèi)存問題
需要注意的是每個(gè)4GB界限以上的塊緩沖區(qū)需要在常規(guī)地址空間保留大約200字節(jié)的緩沖區(qū)頭,因此,在上面的例子中,我們大約有312000個(gè)緩沖區(qū)頭指向擴(kuò)展地址空間的緩沖區(qū),緩沖區(qū)頭大約占80MB常規(guī)內(nèi)存空間,如果數(shù)據(jù)庫塊很小,那么這個(gè)數(shù)量會(huì)相當(dāng)高,因此,必須確保這些緩沖區(qū)頭、AWE_WINDOW_MEMORY、和所有Oracle.exe進(jìn)程的內(nèi)存需求,包括編碼、SGA其它組件、PGA內(nèi)存和每個(gè)用戶連接棧都適合Oracle.exe進(jìn)程的常規(guī)3GB虛擬地址空間。
確認(rèn)你有足夠的物理內(nèi)存處理超過AWE_WINDOW_MEMORY之外的DB_BLOCK_BUFFERS,在我們的例子中定義緩沖池大小為6GB,1GB來自常規(guī)地址空間,剩余5GB來自4GB以外的對(duì)整個(gè)進(jìn)程有效的系統(tǒng)和進(jìn)程地址空間,因此,這個(gè)例子只能工作在至少有9GB內(nèi)存的機(jī)器上,你還應(yīng)該為其它進(jìn)程保留一些空間,只有一個(gè)進(jìn)程可以在某一時(shí)刻訪問附加的內(nèi)存。
象前面所說的那樣,/PAE開關(guān)只用于系統(tǒng)有超過4GB物理內(nèi)存的時(shí)候,但如果系統(tǒng)內(nèi)存少于4GB時(shí),也可模仿這項(xiàng)功能。在boot.ini文件中設(shè)置MAXMEM參數(shù)的值,如下面例子,設(shè)為2GB,意味著任何2GB以上的內(nèi)存都將保留為AWE內(nèi)存。
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced
Server" /fastdetect /PAE /MAXMEM:2048
為一個(gè)數(shù)據(jù)庫使用附加的多個(gè)進(jìn)程
真正的應(yīng)用集群(Real Applications Clusters,RAC)提供有多個(gè)實(shí)例運(yùn)行和訪問同一數(shù)據(jù)的能力。通常,這用于有兩個(gè)或多個(gè)節(jié)點(diǎn)的項(xiàng)目,一個(gè)實(shí)例運(yùn)行在每個(gè)節(jié)點(diǎn)。無論如何,它支持在Oracle9i有兩個(gè)實(shí)例運(yùn)行在一個(gè)節(jié)點(diǎn)訪問同一個(gè)數(shù)據(jù)庫。這能克服每個(gè)進(jìn)程的內(nèi)存限制,又提供某些其它的利益,如應(yīng)用程序失敗檢測。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
