Oracle 性能優化之內核的shmall 和shmmax 參數

Oracle 性能優化之內核的shmall 和shmmax 參數

 

內核的 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參數的設置。

 

 

配置信號燈( 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
------------
      86620

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

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

# cat /proc/sys/kernel/sem
250 32000 100 128

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

 

修改 /etc/sysctl.conf

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

執行 sudo sysctl -p

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章