WINDOWS平臺上擴充套件SGA (zt)
WINDOWS平臺上擴充套件SGA
針對32bit的Windows。Windows2000上不能利用超過4G的記憶體,一般是2G的記憶體保留給程式,2G記憶體保留給核心的。在Windows2000 Advanced Server上可以分配3G給程式,1G留給核心的。
1. 如果機器的記憶體在4G以下,可以使用Physical Address Extensions(PAE)或者是Address Windowing Extensions(AWE)進行擴充套件,如果機器記憶體大於4GB就只能使用AWE進行擴充套件了。
AWE支援以下的Windows作業系統:
Windows 2000 Datacenter Server
Windows 2000 Advanced Server
Windows 2003 Datacenter Edition(32bit)
Windows 2003 Enterprise Edition(32bit)
AWE不支援以下的Windows作業系統:
Windows 2000 Server(Standard)
Windows2000 Professional
Windows XP Home Edition
Windows XP Professional
Windows 2003 Standard Edition
Windows 2003 Web Edition
AWE支援的Oracle資料庫的版本:
Oracle 8.1.6.X
Oracle 8.1.7.X
Oracle 9.2.X
AWE不支援Oracle9.0.1.X
在標準版的Oracle9.2.0.1上,如果你設定了use_indirect_data_buffers=true,啟動就會報錯:
ORA-439-feature not enabled:very large memory.
這個是標準版的Oracle的9.2.0.1的一個bug(#2520796),在Oracle9.2.0.2中解決了。
2. 在作業系統上啟動AWE
AWE在作業系統上可以通過在boot.ini檔案中加/PAE切換啟用。
例如:
multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Advanced Server" /PAE
也可以同時使用/PAE和/3G在同一臺機器上,例如:
multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Advanced Server" /3GB /PAE
但是同時使用記憶體最到能夠支援到16G,如果用使用16G以上的記憶體,則必須選擇其中的一種使用了。
3. 在Oracle上啟用AWE
首先要在啟動的引數檔案中設定引數
USE_INDIRECT_DATA_BUFFERS=TRUE
如果設定了這個引數,對於Oracle9.2.0的版本則不能再使用DB_CACHE_SIZE引數了,只能使用DB_BLOCK_BUFFERS引數。
擴充套件的記憶體只能增加到BUFFER CACHE中去使用,因此只能增大DB_BLOCK_BUFFERS這個引數去擴充套件SGA區。
4. AWE_WINDOW_MEMORY實現故障解決
在Oracle8.1.7版本以下啟動資料庫的時候不用設定AWE_WINDOW_MEMORY的最小值,而在Oracle9.2.0的版本中則強制要設定AWE_WINDOW_MEMORY的最小值,這個最小值在Oracle8.1.7中通過DB_BLOCK_LRU_LATCHES引數設定,在Oracle9.2.0中則通過_DB_BLOCK_LRU_LATCHES隱含引數設定,Oracle9.2.0的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_POOL是個變數,它的大小由是否啟用VLM(即設定USE_INDIRECT_DATA_BUFFERS=TRUE引數)決定:
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的登錄檔中的HKLMSoftwareOracleHomex下的AWE_WINDOW_MEMORY值至少是1024M,否則就會提示錯誤:
ORA-27102 out of memory
OSD-00034 Message 34 not found; Product=RDBMS;facility =SOSD
O/S Error: (OS 8) Not enough storage is available to process this command
========================================
如何讓oracle突破記憶體的限制
測試環境: CPU: XEON 3.0*4
RAM: 5G Database Version: 9.2.0.4
OS: Windows Server 2003 Enterprise
32bit Windows上不能利用超過4G的記憶體,一般是2G的記憶體保留給程式,
2G記憶體保留給核心。在機器記憶體大於4GB的情況下,可以使用AWE(Address Windowing Extensions)擴大對記憶體的使用,但擴充套件的記憶體只能增加到data buffer中去使用。
具體設定步驟:
.首先應解除安裝例項,關閉oracle服務:
C:Documents and SettingsAdministrator>sqlplus /nolog
SQL> conn/as sysdba
Connected
SQL>shutdown immediate;
關閉oracle服務:右擊我的電腦->管理->服務->OracleService->stop;
.在作業系統上啟動AWE:
開啟我的電腦 -> 資料夾選項 -> 檢視 -> 選擇“顯示所有檔案和資料夾”,不“隱藏保護的作業系統檔案(建議使用)”及不“隱藏已知檔案型別的副檔名”,如圖所示:
開啟C盤,找到boot.ini檔案並開啟,在啟動windows項中新增 /3GB /PAE 引數。修改過後的boot.ini內容:
[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" /3GB /PAE /fastdetect /NoExecute=OptOut
.AWE_WINDOW_MEMORY實現:
(為便於敘述,將正常情況下應用程式可以使用的3G記憶體稱作普通記憶體,而將超過4G的記憶體稱作擴充套件記憶體。)
AWE_WINDOW_MEMORY引數定義data buffers使用普通記憶體中多少記憶體作為快取的大小。
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_POOL是個變數,它的大小由是否啟用VLM(即設定USE_INDIRECT_DATA_BUFFERS=TRUE引數)決定:
SETS_PER_POOL = 2* CPU_COUNT (啟用 VLM)
SETS_PER_POOL= CPU Count /2 (不啟用VLM)
SFCDB521資料庫中各引數如下:
CPU_COUNT = 4
DB_BLOCK_SIZE = 4096
Total RAM = 6GB
SETS_PER_POOL = 2 * CPU_COUNT = 8
_DB_BLOCK_LRU_LATCHES =(Max buffer pools * SETS_PER_POOL)= 8*8 =64 MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 4096 * 64) / 8 = 134217728 bytes = 128MB
AWE_WINDOW_MEMORY的預設值為1GB,即1073741824位元組
綜上所述,在登錄檔HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE -> HOME0中新增一個二進位制值,名稱為AWE_WINDOW_MEMORY ,值為1073741824。
.1.在引數檔案中設定引數:USE_INDIRECT_DATA_BUFFERS=TRUE
2.在引數檔案中不能使用DB_CACHE_SIZE引數,改用DB_BLOCK_BUFFERS引數.
設定db_block_buffers大小:
data buffer cache=Total RAM-4GB+AWE_WINDOW_MEMORY=6-4+1=3G
db_block_size=4096
db_block_buffers=786432
.重新開啟資料庫
1. 開啟oracle服務:
右擊我的電腦 -> 管理 -> 服務 -> OracleService -> start;
2. 載入例項:
C:Documents and SettingsAdministrator>sqlplus /nolog
SQL> conn/as sysdba
Connected
SQL>startup pfile=’xxxxxxx’;
具體修改如下:
1.修改boot.ini 檔案內容:
[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" /3GB /PAE /fastdetect /NoExecute=OptOut
2. 修改登錄檔
執行regedit ,進入到
HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE -> HOME0中,新增一個二進位制值,名稱為AWE_WINDOW_MEMORY ,值為1073741824;
3.data buffer cache(db_block_buffers * db_block_size=4096)調整到2.8Gb,在oracle配置檔案裡作以下引數修改:
遮蔽db_cache_size引數
遮蔽sga_max_size引數
新增USE_INDIRECT_DATA_BUFFERS=TRUE
新增db_block_buffers=734003
================================================
針對32bit的Windows,Windows2000上不能利用超過4G的記憶體,一般是2G的記憶體保留給程式,2G記憶體保留給核心的。在Windows2000 Advanced Server上可以分配超過2G的記憶體給程式。
但是多出來的這部分記憶體只能給db block buffers,不能給其他如shared pool。
具體原理記得應該是2的32次方為windows的最大定址空間,也就是4G。但是這4G裡,預設情況下,會分配0G到2G的這個位置給作業系統使用,而其他非作業系統程式只能使用2G到4G這部分記憶體。即便只有oracle這一個程式,也最多使用2G記憶體。可以壓縮作業系統使用的部分,也就是0G到2G,可以壓縮出1個G的記憶體給非作業系統程式使用。
設定方式如下,這是實際做過的,現在仍然在執行,效果不錯:
1) boot.ini 新增 /3GB /PAE
2) init.ora use_indirect_data_buffers=true (and increase DB buffers)
3) HKLMSoftwareOracleHome0下新增字串:AWE_WINDOW_MEMORY (this was entered as 500000000 for 500MB vs default 1GB)
當然這樣做了9i下的db_buffer_cache就沒用了,需要設定db_block_buffers。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-440343/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微信公眾平臺/擴充套件套件
- windows系統磁碟擴容/擴充套件Windows套件
- LOCK_SGA(zt)
- 如何設計高擴充套件的線上網頁製作平臺套件網頁
- Bittrex與受監管的交易平臺Rialto合作擴充套件平臺套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 關於32位oracle擴充套件SGA的一些問題Oracle套件
- Apollo 釋出 GraphQL 平臺和 VS 程式碼擴充套件套件
- 如何為SAP WebIDE開發擴充套件(Extension),並部署到SAP雲平臺上WebIDE套件
- [外掛擴充套件]多圖上傳欄位擴充套件MultiImages0.4套件
- Linux 上安裝 PHP 擴充套件LinuxPHP套件
- Laravel 後臺擴充套件包 Laravel-admin 多圖上傳功能之擴充套件 -- 已上傳圖片之可拖拽排序Laravel套件排序
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- windows下安裝MongoDB擴充套件和配置WindowsMongoDB套件
- 快速入門pandas擴充套件庫(上)套件
- Coinbase是如何在其加密貨幣交易平臺上應對擴充套件性挑戰的加密套件
- 擴充套件工具套件
- Sanic 擴充套件套件
- Mybatis擴充套件MyBatis套件
- SpringMVC 擴充套件SpringMVC套件
- ORACLE 擴充套件Oracle套件
- 在Windows下為PHP安裝redis擴充套件WindowsPHPRedis套件
- windows下安裝各個版本memcache擴充套件Windows套件
- 在windows的php中安裝grpc擴充套件WindowsPHPRPC套件
- windows右鍵選單擴充套件容器[開源]Windows套件
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- KubeVela 外掛指南:輕鬆擴充套件你的平臺專屬能力套件
- 什麼是XR擴充套件現實,XR雲串流平臺有哪些套件
- hyperf oss/cos 檔案上傳擴充套件套件
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- ASP.NET Core擴充套件庫之Http通用擴充套件ASP.NET套件HTTP
- kestra: 無限可擴充套件的開源編排和排程平臺套件
- 進行Windows Azure SQL Database的水平擴充套件GVWindowsSQLDatabase套件
- iOS 通知擴充套件iOS套件
- swift擴充套件ExtensionsSwift套件
- 擴充套件BSGS/exBSGS套件
- Json擴充套件方法JSON套件