AIX上pin住Oracle的SGA的方法(轉)

wangguangli發表於2009-02-10

在aix上,我們可以將oracle SGA pin在記憶體中,防止這部分記憶體交換。所以,通過pin住oracle SGA,能帶來很大的效能好處。
 

如果想要正確的pin住記憶體,涉及到2個OS核心引數與一個oracle init引數:

1、aix引數v_pinshm=1,預設是0,表示aix將支援pin住記憶體,設定方法為

#vmo -p -o v_pinshm=1

2、aix引數maxpin%=記憶體百分比,預設80%,表示支援的最大的可pin住記憶體的比例,設定方法為

#vmo -p -o maxpin%=90

3、oracle引數LOCK_SGA=true,表示oracle將使用這部分被pin住的記憶體,其實就是告訴oracle使用另外一種記憶體呼叫方法。

 

因為這部分pin住的記憶體不僅僅是oracle在使用,aix核心也可能需要用到這部分記憶體,所以,我們不能設定SGA超過如下2個公式的範圍:

1、SGA < 總記憶體*(maxpin%-10%),如果是預設值,則SGA不能超過總記憶體的70%

2、OS的pin住記憶體的總量(穩定執行時的總量,會隨SGA大小而變化) < 總記憶體*(maxpin%-5%),如果是預設值,則pin住的記憶體總量,不能超過總記憶體的75%

至於Oracle的SGA總量,可以通過如下命令檢視

SQL> select sum(value)/1024/1024/1024 "SIZE(G)" from v$SGA;
 
SIZE(G)
----------
71.2681394
至於被pin住的記憶體總量,可以通過OS的命令svmon來檢視

#svmon -G

                   size      inuse       free        pin    virtual
    memory     27394048   23520958    3873090   20424376   20884173
    pg space   16777216      41932
    ......

注意,以上pin住的部分,是表示4k大小的頁面個數(沒有使用大頁的情況下),那麼,折算成記憶體大小則是20424376*4/1024/1024=77.91G。

那麼,如果採用預設的maxpin%設定(80%),我們將需要多大的實體記憶體呢?

公式1:實體記憶體 = 71.27/0.7 = 102G

公式2:實體記憶體 = 77.91/0.75 = 104G

在兩者裡面取大值,表示我們至少需要104G的實體記憶體,再去掉其它轉換消耗,固定消耗,購買記憶體起碼需要108G。

 

關於以上2個公式,我還想補充說明一下,在5.2的早些版本中,只需要滿足公式1即可,如果實際設定的SGA記憶體超過了公式1的範圍,其實OS也只pin住maxpin%-10%的記憶體,其它的沒有pin住的記憶體,可能會導致交換的發生,最多是影響效能。

但 是,aix 5.2以後的一些版本以及aix 5.3版本,因為不同page size的出現(如64K的page size的大量使用),如果不符合以上的兩個公式,最嚴重的後果就是會導致OS被hang住,其實也就是aix的一個新的psm後臺程式,一個負責頁面轉 換的程式,當發現記憶體不夠的時候,會直接殺掉執行的程式。

夠狠,也夠爛。

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

相關文章