AIX上pin住Oracle的SGA的方法

oracle_ace發表於2008-01-10

Performance測試過程中,我們在新部署的AIX上都是通過設定作業系統的v_pinshm,maxpin%引數以及Oracle中的lock_sga等引數,將oracle SGA pin在記憶體中,目的就是為了防止這部分記憶體交換出去。通過pin住oracle SGA在一定程度上提高了我們資料庫的效能。在做對比測試的時候可以突出一點點instance tuning的作用。

對於這些引數的設定方法如下:

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

#vmo -p -o v_pinshm=1 當然也可以通過smitty

2、作業系統引數maxpin%=記憶體百分比,預設是80%,表示支援的最大的可pin住記憶體的比例,在我們performance測試的過程中,我們將這個設定為

#vmo -p -o maxpin%=90 當然也可以通過smitty

3、設定oracle引數LOCK_SGA=true,表示oracle將會使用這部分被OS pin住的記憶體.

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

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

2、OS的pin住Oracle穩定執行的記憶體總量 < 總記憶體*(maxpin%-5%),如果maxpin%是80%的預設值,則pin住的記憶體總量,不能超過總記憶體的75%

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

SQL> select sum(value)/1024/1024/1024 "SIZE(G)" from v$SGA;
 
   SIZE(G)
----------
   1.28125

至於被pin住的記憶體總量,可以通過OS的命令svmon來檢視

# svmon -G
               size      inuse       free        pin    virtual
memory       983040     724686     258354     430433     521412
pg space     655360       2108

               work       pers       clnt
pin          430433          0          0
in use       521412          0     203274


關於以上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/12361284/viewspace-133965/,如需轉載,請註明出處,否則將追究法律責任。

相關文章