Oracle 效能最佳化之核心的shmall 和shmmax 引數

甲骨文技術支援發表於2018-07-18

1. 核心的 shmall 和 shmmax 引數

SHMMAX = 配置了最大的記憶體segment的大小 ——> 這個設定的比SGA_MAX_SIZE大比較好。

SHMMAX引數:Linux程式可以分配的單獨共享記憶體段的最大值。一般設定為記憶體總大小的一半。這個值的設定應該大於SGA_MAX_TARGET或MEMORY_MAX_TARGET的值,因此對於安裝Oracle資料庫的系統,shmmax的值應該比記憶體的二分之一大一些。

SHMMIN= 最小的記憶體segment的大小 。

SHMMNI= 整個系統的記憶體segment的總個數 。設定系統級最大共享記憶體段數量。Oracle10g推薦最小值為4096,可以適當比4096增加一些。

SHMSEG= 每個程式可以使用的記憶體segment的最大個數

shmall =是全部允許使用的共享記憶體大小,shmmax 是單個段允許使用的大小。這兩個可以設定為記憶體的 90%。例如 16G 記憶體,16*1024*1024*1024*90% = 15461882265,shmall 的大小為 15461882265/4k(getconf PAGESIZE可得到) = 3774873。

shmall設定共享記憶體總頁數。這個值太小有可能導致資料庫啟動報錯。很多人調整系統核心引數的時候只關注SHMMAX引數,而忽略了SHMALL引數的設定。

2.配置訊號燈( semphore )的引數

訊號燈semaphores是程式或執行緒間訪問共享記憶體時提供同步的計數器。

SEMMSL= 設定每個訊號燈組中訊號燈最大數量, 推薦的最小值是250 。對於系統中存在大量併發連線的系統,推薦將這個值設定為 PROCESSES初始化引數加10

SEMMNI= 設定系統中訊號燈組的最大數量。Oracle10g和11g的推薦值為142。

SEMMNS=設定系統中訊號燈的最大數量。作業系統在分配訊號燈時不會超過LEAST(SEMMNS, SEMMSL*SEMMNI )。事實上,如果SEMMNS的值超過了SEMMSL*SEMMNI是非法的, 因此推薦SEMMNS的值就設定為SEMMSL*SEMMNI 。Oracle推薦SEMMNS的設定 不小於32000 ,假如資料庫的PROCESSES引數設定為600,則SEMMNS的設定應為:

SQL> select (600+10)*142 from dual;(600+10)*142------------
      8662012345

SEMOPM引數:設定每次系統呼叫可以同時執行的最大訊號燈操作的數量。由於一個訊號燈組最多擁有SEMMSL個訊號燈,因此有推薦將SEMOPM設定為SEMMSL的值。Oracle驗證的10.2和11.1的SEMOPM的配置為100。

透過下面的命令可以檢查訊號燈相關配置:

# cat /proc/sys/kernel/sem250 32000 100 12812

對應的4個值從左到右分別為SEMMSL、SEMMNS、SEMOPM和SEMMNI

3.修改 /etc/sysctl.conf

kernel.shmmax=15461882265 
kernel.shmall=3774873 
kernel.msgmax=65535 
kernel.msgmnb=65535

執行  sudo sysctl -p

可以使用  ipcs -l  看結果,ipcs -u 可以看到實際使用的情況


本文轉自: https://blog.csdn.net/sunansheng/article/details/51889044

感謝原作者

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

相關文章