熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

突破oracle for win2K的2G內存限制

2013-11-13 15:46:27  來源: Oracle 

  突破oracle for winK的G內存限制
   
    眾所周知位的操作系統如winK上操作系統能管理的內存為GB(power() =G) oracle使用的總內存有G限制目前大多數信息系統都能為數據庫服務器配上G物理內存甚至更多但無論你為系統配置多大的物理內存正常情況下都不能使oracle使用超過G的內存(包含SGAPGA等)從而造成系統資源浪費那麼有沒有什麼辦法能使運行在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系統對內存的分配是這樣的在內存地址xxFFFFFFF之間的空間交給應用程序使用操作系統內核及其支持則使用內存地址 xxFFFFFFFF之間的空間在使用GT之後操作系統將內核及其支持程序使用的內存地址空間壓縮到 xCxFFFFFFFF之間從而為應用程序出來G的空間但是僅僅出來了這G的空間還是不夠的還需要指定哪一個應用程序來使用這多出來的G空間以及如何分配份額等後面將結合具體的參數設置來討論為便於討論我們將正常情況下應用程序可以使用的G內存(即地址在 xxFFFFFFF 之間的內存)稱作普通內存而將windows 出來的G內存(地址在 xxBFFFFFFF之間)稱作間接內存
  
  三 oracle使用超過G內存不超過G內存的具體設置步驟
  
   首先應卸載實例關閉oracle服務
  
   打開操作系統G開關
  
  修改bootini文件在啟動windows項中添加 /G 參數修改過後的bootini文件應該類似以下內容
  
  [boot loader]
  
  timeout=
  
  default=multi()disk()rdisk()partition()
  
  [operating systems]
  
  multi()disk()rdisk()partition()=Microsoft Windows Advanced Server /G /fastdetect
  
  注意在啟動winK AdvServer的一欄裡多了一個 /G 參數這個參數的作用就是讓windows啟動時將自己的內核及支持程序裝載到內存地址 xCxFFFFFFFF 之間給應用程序留出G的空間來
  
   修改oralce 的 initora 文件
  
  ) 確定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而是內存地址在xxFFFFFFF 之間的內存大小)假如設為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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.