突破oracle for win
K的
G內存限制
眾所周知
在
位的操作系統如win
K上
操作系統能管理的內存為
GB(power(
) =
G)
oracle使用的總內存有
G限制
目前大多數信息系統都能為數據庫服務器配上
G物理內存甚至更多
但無論你為系統配置多大的物理內存
正常情況下都不能使oracle使用超過
G的內存(包含SGA
PGA等)
從而造成系統資源浪費
那麼
有沒有什麼辦法能使運行在windows系統上的oracle使用超過
G的內存呢?windows 提供了一種叫
GT(
G Tuning)的技術
使得oracle使用超過
G(不超過
G)的內存成為可能
而為了讓應用程序使用更大的內存
還有一種PSE
的技術
可以讓oracle使用超過
G的內存
這裡
只對我們使用
GT特性讓oracle使用超過
G的內存進行討論
一 使用
GT特性的基本要求
盡管可以在不超過
G物理內存的系統上使用
GT特性
但oracle並不推薦這種做法
因為這將會嚴重降低系統性能
以我的經驗來講
如果系統未安裝
G物理內存
最好也不要使用這種方法來讓oracle使用更多的內存
此外
在需要你的oracle使用超過
G的內存時
數據庫服務器最好不要再運行其他的服務
以減小系統的壓力
讓oracle工作得更好
另外
據MS的文檔
GT只能用於 Advanced Server
Datacenter版本上
Server 版以及 Professional 版不能使用
GT特性(實際上是不是也沒有必要?)
二 為什麼
GT能讓應用程序使用超過
G的內存
在正常情況下
windows系統對內存的分配是這樣的
在內存地址
x
到
x
FFFFFFF之間的空間
交給應用程序使用
操作系統內核及其支持則使用內存地址
x
到
xFFFFFFFF之間的空間
在使用
GT之後
操作系統將內核及其支持程序使用的內存地址空間壓縮到
xC
到
xFFFFFFFF之間
從而為應用程序
讓
出來
G的空間
但是
僅僅
讓
出來了這
G的空間還是不夠的
還需要指定哪一個應用程序來使用這
多出來的
G空間
以及如何分配份額等
後面將結合具體的參數設置來討論
為便於討論
我們將正常情況下應用程序可以使用的
G內存(即地址在
x
到
x
FFFFFFF 之間的內存)稱作普通內存
而將windows
讓
出來的
G內存(地址在
x
到
xBFFFFFFF之間)稱作間接內存
三 oracle使用超過
G內存
不超過
G內存的具體設置步驟
首先應卸載實例
關閉oracle服務
打開操作系統
G開關
修改boot
ini文件
在啟動windows項中添加 /
G 參數
修改過後的boot
ini文件應該類似以下內容
[boot loader]
timeout=
default=multi(
)disk(
)rdisk(
)partition(
)
[operating systems]
multi(
)disk(
)rdisk(
)partition(
)=
Microsoft Windows
Advanced Server
/
G /fastdetect
注意在啟動win
K AdvServer的一欄裡
多了一個 /
G 參數
這個參數的作用
就是讓windows啟動時
將自己的內核及支持程序裝載到內存地址
xC
到
xFFFFFFFF 之間
給應用程序留出
G的空間來
修改oralce 的 init
ora 文件
) 確定oracle的緩沖區及共享池大小
假設作如下定義
db_block_size =
db_block_buffers =
# 緩沖區大小為
G
share_pool_size =
# 使用
M共享池
) 添加下列各項內容
use_indirect_data_buffers = true
# 告訴oracle可以使用間接內存(即可以使用windows讓出來的
G內存作為數據緩沖區)
pre_page_sga = true
# 把oracle SGA鎖定到內存中
不產生頁面交換文件(
i的參數可能是lock_sga = true)
# 對於一個有
G物理內存的系統來講
可能這一個參數並不是必須的
修改注冊表
定義oracle的DBbuffer使用常規內存大小
在注冊表 _Local_Machine中添加一個二進制值
名稱為AWE_WINDOW_MEMORY
值的單位為字節
大小為你需要讓oracle使用普通內存作為緩存的大小(不是windows讓出來的
G
而是內存地址在
x
到
x
FFFFFFF 之間的內存大小)
假如設為
即
M大小
那麼oracle的數據緩沖區將占用
M的普通內存
其余部分(
G
M =
M)則使用間接內存
重新啟動操作系統
啟動數據庫
OK
你現在的 oracle 可以使用
G +
M內存了
四 幾個補充討論
windows系統
讓
出來的
G間接內存
只能用於數據緩沖區
在
GT特性測試中發現
間接內存只能用於數據緩沖區
而不能用於共享池
也不能分配給用戶作為PGA
或許有其他的參數可以定義
但我查到的文獻中沒有任何一篇講間接內存可以用於哪些地方
而在我們的測試中發現按上面的修改後
間接內存只能用於數據緩沖區
此結論只作為一個經驗
不是定論
請各位大俠補充修正
注冊表中 AWE_WINDOW_MEMORY 參數大小的定義
這個參數定義緩沖池使用普通內存的大小
不能太小
在數據塊大小為
K
緩沖池為
G(即使用
個塊作緩沖池)大小的情況下
此參數定義為
M時
oracle不能啟動
定義為
M時正常啟動
根據我閱讀文獻後對這個情況的理解
數據緩沖區的每一個塊的塊頭信息都將存放於普通內存中
不能存放於間接內存中
如果此參數定義過小
導致緩沖區塊頭信息都不能存放
則可導致數據庫啟動失敗
那麼
是不是同樣大小的緩沖區
數據庫塊越大
則這個參數就可以定義得越小
因而可以占用更少的普通內存呢?有待驗證
在具體的應用中
如何定義此參數
應綜合考慮最大並發連接數(專用服務器模式下)
用戶重用的堆棧大小
排序區
共享池
大池等內存參數的設置情況
盡可能的將數據緩沖區放到間接內存中
充分利用系統的資源
間接內存的性能
據oracle的文獻講
間接內存的性能(我想主要是指速度和效率吧?)不如直接內存
絕不推薦在未安裝有
G物理內存的系統上使用
GT特性
我不知道如何比較間接內存與直接內存的速度和效率
因而未作測試
姑且信之
一點小結
期望能對大家有所啟發
還請各位大俠補充指正
以上內容的測試環境
IBM X
+
G內存 + RAID
陣列
Windows
Advaced Server SP
+ oracle
專用服務器模式
From:http://tw.wingwit.com/Article/program/Oracle/201311/17283.html