使用32位 Windows 作業系統時避免記憶體問題的五個建議

pxbibm發表於2015-06-02

注:文件中需要參考的文件連結,需要有oracle support賬戶才能檢視。如果需要檢視那篇文件,可以微信我(pxboracle)。
在過去十年,Windows 伺服器作業系統無論是對於新興公司還是對於老公司而言都已經成為一個划算的、易於理解的選擇。伴隨著這個作業系統的流行,使用它們來承載 Oracle 資料庫的公司也在增多。

不幸地是,32位版本 Windows 伺服器甚至在處理一個普通大小的資料庫時也存在一些真正的限制,並且可能發生非常複雜的錯誤。“為什麼我的資料庫只有 2Gb 大小,並且有充足的實體記憶體可用,卻碰到 ORA-04030(使用者記憶體溢位)錯誤?”

這裡有五個方法來調整您的配置,最大限度利用 Windows 伺服器作業系統資源,並避免您的資料庫遇到記憶體溢位。


1. 增加 2Gb 限制

32位 Windows 的主要限制是,在其核心,它只能訪問 4Gb 的可定址記憶體。即使您塞進更大的記憶體卡或擴充到 4Gb 以上,Windows 只知道如何處理前 4Gb。

並且,Windows 在啟動時預設分配一半記憶體給作業系統核心,這意味著只有剩下的 2Gb 是實際給使用者程式使用的。 當您試圖把 Oracle 核心程式、SGA、使用者程式裝入剩下的 2Gb,它們可能會變得很不夠用,程式超預期的增大(或更多程式)可能超出 Windows 可用記憶體,造成 ORA-04030(記憶體溢位)錯誤。

從 Windows OS 核心中回收一些記憶體的最簡單辦法是透過 boot.ini /3Gb 開關. 這改變了 Windows 啟動時的設定,減少 OS 核心空間到 1Gb 並留出 3Gb 給使用者程式。這是增加可用記憶體的最快最簡單的方法,因為它只涉及設定 boot.ini 中的開關並重啟機器。


2. 實施地址視窗擴充套件(AWE)

對於有超過 4Gb 記憶體的伺服器,Windows 提供了一組擴充套件,允許應用程式訪問額外的記憶體。您可以在下面這些版本中實施這些擴充套件:

  • Windows 2000 Datacenter Server
  • Windows 2000 Advanced Server
  • Windows 2003 Data Center Edition (32-Bit)
  • Windows 2003 Enterprise Edition (32-Bit)
  • Windows 2008 Enterprise Edition (32-bit)

透過使用 /PAE 這個 boot.ini 開關,並對 Oracle 記憶體配置做一些更改後,Oracle 可以使用額外的記憶體作為資料庫 buffer cache。(然而,這部分記憶體不能用於共享池或使用者程式)。另外,您需要禁用自動共享記憶體管理(ASMM)或自動記憶體管理(AMM)的資料庫選項,因為您需要手工配置 buffer cache。您可以在下面的文件中找到關於配置地址視窗擴充套件(AWE)的詳細資訊:

  • Document 225349.1 : Implementing Address Windowing Extensions (AWE) or VLM on 32-bit Windows Platforms

3. 減少執行緒記憶體

在 Oracle 中每個使用者執行緒以預設 1MB 的堆疊空間啟動。在有大量使用者的環境中,堆疊空間可能快速達到對這些程式可用 PGA 記憶體數量產生影響的程度。

這個初始值可以被改變,可以讓您回收大量前期(分配的)記憶體(取決於您的使用者連線數)。您可以使用 orastack 工具減少 oracle.exe 和其他相關可執行程式的初始執行緒記憶體。

關於 orastack 和 Windows 伺服器記憶體的詳細資訊,請參考下面的文件:

  • Document 46001.1 : Oracle Database and the Windows NT memory architecture, Technical Bulletin

4. 實施 Dead Connection Detection

回收使用者程式使用的記憶體的另一個途徑是確保斷開的或長期空閒的使用者程式被終止掉。因為不確定使用者在另一端是否仍然有工作要做,所以Oracle 通常的做法是讓這些會話持續存在下去,但您可以設定 SQLNET 空閒時間,或者給這些特定使用者建立一個合適的 profile 指定合適的 IDLE_TIME 設定,來使這些連線在空閒達到指定的時間後被關閉。

關於 Dead Connection Detection 和 Profile 來終止非活動會話的更多細節,您可以從下面的文件中找到

  • Document 601605.1 : A discussion of Dead Connection Detection, Resource Limits, V$SESSION, V$PROCESS and OS processes

5. 配置 Oracle 使用共享伺服器

最後一個減少 Oracle 總體記憶體佔用的方法是切換到共享伺服器模式。 在共享伺服器模式下,單獨的使用者執行緒完全消失,而是配置了更少量的 dispatcher 執行緒處理多個連線。使用者記憶體實際上被存到了 SGA 的共享池(或大池)中,而不是去使用 PGA。

配置資料庫使用共享伺服器將縮減用於使用者程式的總體記憶體量。然而,使用這個配置時有一件事需要特別注意:使用者等待時間的增長可能表明共享伺服器程式發生了資源爭用,這意味著您需要配置額外的共享伺服器程式。關於配置資訊請檢視下列文件:


結論

如您所見,儘管32位 Windows 作業系統有先天限制,我們仍有辦法擴大 Oracle 可訪問的記憶體或減少 Oracle 各個工作元件的記憶體用量。

對於既要 Windows 的便利又想要64位作業系統全部功能的公司,最新版本的 Windows Server(2012)只有64位版本,提供了大資料庫所需全範圍記憶體(地址)可用性。

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

相關文章