Oracle相關參數調整(如SGA_MAX_SIZE)
在Linux 上安裝設置Oracle 或在更換或升級硬體的時需要配置Linux 系統的核心參數, 然後才調整Oracle系統參數
編輯/etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax =8405194752
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
fs.file-max = 65536
net.ipv4.ip_local_port_range= 1024
65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default =262144
net.core.wmem_max = 262144
參數解釋:
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 足夠。
kernel.sem
kernel.sem = 250 32000 100 128
上面的4個資料分別對應:SEMMSL、SEMMNS、SEMOPM、SEMMNI這四個核心參數,具體含義和配置如下。
SEMMSL :用於控制每個信號集的最大信號數量。
Oracle 建議將 SEMMSL 設置為 init.ora 檔(用於 Linux 系統中的所有資料庫)中的最大 PROCESS 實例參數的設置值再加上 10 。此外, Oracle 建議將 SEMMSL 的值設置為不少於 100 。
SEMMNS:用於控制整個 Linux 系統中信號(而不是信號集)的最大數。
Oracle 建議將 SEMMNS 設置為:系統中每個資料庫的 PROCESSES 實例參數設置值的總和,加上最大 PROCESSES 值的兩倍,最後根據系統中 Oracle 資料庫的數量,每個加 10 。 使用以下計算式來確定在 Linux 系統中可以分配的信號的最大數量。它將是以下兩者中較小的一個值:SEMMNS 或 (SEMMSL * SEMMNI)
SEMOPM: 內核參數用於控制每個 semop 系統調用可以執行的信號操作的數量。semop 系統調用(函數)提供了利用一個 semop 系統調用完成多項信號操作的功能。一個信號集能夠擁有每個信號集中最大數量的SEMMSL 信號,因此建議設置 SEMOPM 等於SEMMSL 。
Oracle 建議將 SEMOPM 的值設置為不少於 100 。
SEMMNI :內核參數用於控制整個 Linux 系統中信號集的最大數量。
Oracle 建議將 SEMMNI 的值設置為不少於 100