最近因為拿到一個好配置的生產機器。在裝完數據庫后,需要對參數進行調優。
首先這個機器內存是128G的 ,而且/dev/shm 設置的是63G (物理內存的一半)。Oracle設置用的是AMM管理,那么就想是否能把這個內存設置大點。
首先這個參數文件在 vi /etc/sysctl.conf 里,重新加載生效是 sysctl -p# System default settings live in /usr/lib/sysctl.d/00-system.conf.
# To override those settings, enter new settings here, or in an /etc/sysctl.d/.conf file
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
#ORACLE SETTING
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 15728640
kernel.shmmax = 64424509440
kernel.shmmni = 4096
kernel.sem = 5010 641280 5010 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.shmall: 共享內存頁數的最大值
Linux共享內存頁大小為4KB, 共享內存段的大小都是共享內存頁大小的整數倍。一個共享內存段的最大大小是16G,需要共享內存頁數是
16GB/4KB=16777216KB/4KB=4194304(頁)
kernel.shmmax:單個共享內存段的最大值
shmmax是核心參數中最重要的參數之一,用於定義單個共享內存段的最大值,shmmax設置應足夠大,能在一個共享內存段下容納下整個的SGA,設置的過低可能會導致需要創建多個共享內存段,可能導致系統性能的下降 。
kernel.shmmni:共享內存段的最大數量
注意該參數不是shmmin,是shmmni,shmmin 表示內存段最小大小 )
shmmni缺省值4096 足夠。
shmmax(bytes) = shmmni(page size, default 4k) * shmall (page的個數)
下面專門說說kernel.sem:對應4個值
SEMMSL、SEMMNS、SEMOPM、SEMMNI
SEMMSL: 每個信號集的最大信號數量
數據庫最大 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 。
設計完這些之后可以 sysctl -p 生效,剩下可以配置AMM.