Oracle9i進程的內存占用問題
2024-08-29 13:46:56
供稿:網友
Oracle9i進程的內存占用問題
過去這段時間,我工作的其中之一就是在為一個電信業務系統的升級做預備,在兩臺IBM M85(6CPU*12G MEM AIX 5L)上對ORACLE9I RAC做具體的測試工作,開始的時候一切都很順利,但后來卻碰到一個難題,就是Oracle 9i的單個進程占用的內存過多。 經過一段時間測試,在先后解決了其它問題后,最后的主要問題集中到了內存上,ORACLE9i在AIX 5L上每個進程都占用了很多內存,一個空連接進程就會用到5M多的內存,而眾所周知,Oracle8i的單個進程占用的內存一般是2~3M,所以這就引起了我們的高度重視,因為假如按此計算,1000個連接什么事不做就要5G內存了!而我們的實際應用連接數比這還要多。 在出現問題之后,我先后對ORACLE進行了不同方向的調整,也問過了一些朋友以及IBM和ORACLE的技術支持, 翻遍了國內外我所知道的論壇,都沒有看到任何有意思的消息,更不要說解決方案了。這讓我開始懷疑是Oracle9i的BUG,果然在6月底Oracle公布了這個BUG(我是在7月底看到的,因為7月份的大部分時間在處理別的事)!造成這個問題是因為AIX上C的編譯器問題,使得本來可以共享的部分,最后都沒有共享,造成每個進程都浪費了大約1MB的內存。詳情參見本文最后BUG:3028673的描述。 為了驗證確實是AIX的問題,我在另外一臺HP-UX B11.11上進行了同樣的測試,結果顯示Oracle9i的單個進程仍然占用很多內存!經過分析發現這是由于兩方面原因造成的: 1、Oracle9i的初始化參數CURSOR_SPACE_FOR_TIME從默認的FALSE改成了TRUE; 2、HP-UX上的Oracle9i將虛擬內存數據頁(virtual memory data pages)的默認值從原來的D(4KB)改成了L(1GB)。 使用/usr/bin/chatr $ORACLE_HOME/bin/oracle查看oracle程序的內部屬性 ,我們發現虛擬內存的text段從原來的16M改成了64M,而DATA段從原來的64M改成了L(最大可達到1GB)。經過測試驗證 ,DATA段這個參數直接影響了Oracle9i單個進程所占用的內存的大小 。對于空連接來說,4MB是擴展的臨界點,因為空連接是擴不到16MB(4MB的下一個可設DATA段大?。?nbsp;
Oracle8i和Oracle9i虛擬內存默認值對比: 8i
......
shared library binding:
deferred
global hash table disabled
shared vtable support disabled
segments:
index type address flags size
5 text 4000000000000000 z-r-c 16M
6 data 8000000100000000 ---m- 64M
executable from stack: D (default)
kernel assisted branch PRediction enabled
lazy swap allocation for dynamic segments disabled9i
.........
shared library binding:
deferred
global hash table disabled
shared vtable support disabled
segments:
index type address flags size
5 text 4000000000000000 z-r-c 64M
6 data 8000000100000000 ---m- L (largest possible)
executable from stack: D (default)
kernel assisted branch prediction enabled
lazy swap allocation for dynamic segments disabled 我們可以使用/usr/bin/chatr +pd newsize $ORACLE_HOME/bin/oracle來更改DATA段的可用內存大小,對于text段的內存大小我們也可以使用chatr +pi來改,但gototop并不建議你這樣做,因為text段是給命令用的。 至此,我就在想了,自然在HP-UX上是因為這個原因造成的,那么在AIX上除了C編譯器的原因之外,是否也存在著同樣的問題呢?到目前為止,gototop還沒有的等到任何可靠的消息來證實這一點,但我猜想可能性很大。 gototop 2003年7月28日晚于辦公室附、BUG:3028673描述(摘自METALINK):Bug 號
3028673
已歸檔
27-JUN-2003
已更新
08-JUL-2003
產品
Oracle Server - Enterprise Edition V7
產品版本
9.2.0.3
平臺
Generic
平臺版本
無數據
數據庫版本
9.2.0.3
影響平臺
Port-Specific
優先級
Severe Loss of Service
狀態
Closed, Vendor OS Problem
基本 Bug
N/A
修復產品版本
無數據
問題陳述:ORACLE ON AIX DOES NOT SHARE MANY CONST STRUCTS - PER PROCESS MEMORY OVERHEAD
--------------------------------------------------------------------------------*** 06/27/03 10:31 am ***========================= PROBLEM:1. Clear description of the problem encountered: Oracle on IBM AIX platforms (AIX 5L and 4.3.3) use a large amount of memory per dedicated connection. For Oracle 9.2 on AIX 5L the memory required per idle Oracle process appears to be about 5Mb. A significant portion of this is related to non-shared const structures (probably about 1Mb) . This bug is to track the issue of the non-shared const structures.。。。。。。后面部分省略。