談談ORACLE核心引數

lpwebnet發表於2013-11-21

以伺服器記憶體為4G
修改/etc/sysctl.conf檔案 (ROOT賬戶)

kernel.shmmax = 2147483648
//公式:2G*1024*1024*1024=2147483648(位元組)
//表示最大共享記憶體,如果小的話可以按實際情況而定,一般為實體記憶體的一半(單位:位元組)

kernel.shmmni=4096
//表示最小共享記憶體固定4096KB(由於32位作業系統預設一頁為4K)

kernel.shmall=1048576
//公式:4G*1024*1024/4K = 1048576(頁)
//表示所有記憶體大小(單位:頁)

kernel.sem=250 32000 100 128
//4個引數依次是SEMMSL:每個使用者擁有訊號量最大數,SEMMNS:系統訊號量最大數,SEMOPM:每次semopm系統呼叫運算元,SEMMNI:系統辛苦量集數最大數。這4個引數為固定內容大小

fs.file-max=65536
//file-max固定大小65536

net.ipv4.ip_local_port_range=1024 65000
//ip_local_port_range表示埠的範圍,為指定的內容

以上步驟做完執行 /sbin/sysctl -p 使核心生效

驗證引數(root賬戶執行):
#/sbin/sysctl -a | grep shm
#/sbin/sysctl -a | grep sem
#/sbin/sysctl -a | grep file-max
#/sbin/sysctl -a | grep ip_local_port_range

1、與oracle相關的訊號量和共享記憶體段引數


   一般unix系統中和訊號量相關的是三個引數SEMMNI SEMMSL SEMMNS。他們相互關聯決定系統可以分配的訊號量。Oracle使用訊號量完成內部程式之間的通訊。


   關於共享記憶體段使用shmmx引數進行總體控制。它指定了系統可以分配的共享記憶體段最大大小,實際並沒有分配那麼多隻是給出一個可以使用的最大限制。


   對於類核引數的修改必須要重新啟動系統之後才會生效。
2
、出現訊號量和共享記憶體段相關問題的情況


   oracle只有在startup nomount的時候才會請求os的這些資源,用於建立SGA和啟動後臺程式。


   有些情況下因為oracle崩潰之後os沒有清除oracle分配的SGA,也可能造成共享記憶體段不足,需要人工清除。


3、如何解決相關的問題


   你可以簡單的修改init引數減少oracle對共享記憶體段和訊號量的需求。


   對於控制訊號量的三個引數SEMMNI SEMMSL SEMMNS 。最終可以使用的訊號量由下面公式 提取 (semmsl * semmni) 或者 semmns中最小的值。


    例如在linux. 進入目錄/proc/sys/kernel;用cat命令或more命令檢視semaphore當前引數的值:
cat sem
命令執行後將會出現如下的結果:
250 32000 32 128
其中, 250 是引數SEMMSL的值,32000是引數SEMMNS的值, 32是引數SEMOPM的值,而128則是引數SEMMNI的值。250*128=32000


對於oracle7需要訊號量的設定等於initprocesses的設定。對於8i 9i需要等於processes*2


對於訊號量引數的設定一定要小心,因為不正確的設定可能會讓系統使用預設值。這個值一般比oracle系統要求的低。在HP unix上遇到過這樣的問題,當時在引數配置的時候指定兩個不同的sem-mni造成系統使用預設的設定。


對於共享記憶體段,系統的設定至少要等於SGA的大小。

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

相關文章