Linux 下核心參數調整
kernel.shmmax
shmmax是核心參數中最重要的參數之一,用於定義單個共享內存段的最大值,shmmax設置應足夠大,能在一個共享內存段下容納下整個的SGA,設置的過低可能會導致需要創建多個共享內存段,可能導致系統性能的下降 。
Oralce建議一個大的共享內存段能容納整個SGA,這樣在任何時候都不會有性能下降的隱患。
Oracle安裝文檔建議,32位Linux設置shmmax 為32位最大限制值(settingshmmax to the 32-bit number limit),即4G,所以1-4G 的物理內存,可以直接設置shmmax 為最大物理內存即可,SGA 肯定在一個共享內存段中,32位Linux 物理內存大於4G 的設置為4G 即可
設置shmmax>=SGA(32位系統是否支持到1.7G 以上SGA 需要注意) 。如果是64位Linux 系統,shmmax 設置為大於SGA_MAX_SIZE即可。
Ipcs -sa 可以看到共享內存段個數
kernel.shmall
kernel.shmall 參數是控制共享內存頁數 。Linux共享內存頁大小為4KB, 共享內存段的大小都是共享內存頁大小的整數倍。一個共享內存段的最大大小是16G,需要共享內存頁數是16GB/4KB=16777216KB/4KB=4194304(頁),即64位系統16GB 物理內存,設置kernel.shmall=4194304才符合要求(幾乎是原來設置2097152的兩倍)。可以將shmmax參數調整到16G ,同時可以修改SGA_MAX_SIZE和SGA_TARGET為12G(設置的SGA最大大小也可是2G~14G等,還要協調PGA參數及OS 等其他內存使用,不能設置太滿,如16G)
kernel.shmmni
shmmni 內核參數是共享內存段的最大數量(注意該參數不是shmmin,是shmmni,shmmin 表示內存段最小大小 ) 。
shmmni缺省值4096 足夠。
shmmax(bytes) = shmmni(page size, default 4k) * shmall (page的個數)