Linux 下 Oracle 核心引數優化
資料庫的效能優化涉及到整個資料庫執行環境的方方面面,諸如作業系統,Oracle自身,儲存,網路等等幾個大塊。而作業系統則是Oracle穩定執行與最大化效能的基石。本文主要描述基於Linux系統下 Oracle 核心引數的配置。
校驗下面的列表中顯示的核心引數的值被設定為大於或等於下面所顯示的最小值。
如果你的系統中下面的任意引數的當前值已經大於或高於下面列出的值,請不要做任何修改。
下面的步驟給出瞭如何去校驗並設定這些引數的值。
通過執行下面的命令進行校驗
/sbin/sysctl -a | egrep "kernel.shmall|kernel.shmmax|kernel.shmmn|kernel.sem"
然後比較下表所列出的值
注意:下表顯示的是核心引數以及shell 限制所需的最小值。對於生產資料庫,Oracle建議去調整這些值使得資料庫效能達到最優。有關優化核心引數更多資訊請參考作業系統相關文件。
Oracle 核心引數參考值
Parameter | Minimum Value | Recommended value | File |
semmsl semmns semopm semmni | 250 32000 100 128 | Set only if those that are set by OS or other applications are lower | /proc/sys/kernel/sem |
shmall | 2097152 | shmmax/page_size | /proc/sys/kernel/shmall |
shmmax | Minimum of the following values: · Half the size of the memory · 4GB - 1 byte Note: The minimum value required for shmmax is 0.5 GB. However, Oracle recommends that you set the value of shmmax to 2.0 GB for optimum performance of the system. | Half of RAM or if swap file is less then half of RAM the size of swap file | /proc/sys/kernel/shmmax |
shmmni | 4096 | /proc/sys/kernel/shmmni | |
file-max | 512 * PROCESSES | /proc/sys/fs/file-max | |
ip_local_port_range | Minimum:9000 Maximum: 65000 | /proc/sys/net/ipv4/ip_local_port_range | |
rmem_default | 262144 | /proc/sys/net/core/rmem_default | |
rmem_max | 4194304 | /proc/sys/net/core/rmem_max | |
wmem_default | 262144 | /proc/sys/net/core/wmem_default | |
wmem_max | 1048576 | /proc/sys/net/core/wmem_max | |
tcp_wmem | 262144 | /proc/sys/net/ipv4/tcp_wmem | |
tcp_rmem | 4194304 | /proc/sys/net/ipv4/tcp_rmem |
校驗核心引數
按照下面的步驟去檢視指定引數的值,如果有必要的話對其進行修改
執行下表中相應的命令來顯示這些核心引數的值,並標記該引數的值是否需要修改。
Parameter | Command |
semmsl, semmns, semopm, and semmni | # /sbin/sysctl -a | grep sem This command displays the value of the semaphore parameters in the order listed. |
shmall, shmmax, and shmmni | # /sbin/sysctl -a | grep shm This command displays the details of the shared memory segment sizes. |
file-max | # /sbin/sysctl -a | grep file-max This command displays the maximum number of file handles. |
ip_local_port_range | # /sbin/sysctl -a | grep ip_local_port_range This command displays a range of port numbers. |
rmem_default | # /sbin/sysctl -a | grep rmem_default |
rmem_max | # /sbin/sysctl -a | grep rmem_max |
wmem_default | # /sbin/sysctl -a | grep wmem_default |
wmem_max | # /sbin/sysctl -a | grep wmem_max |
tcp_wmem | # /sbin/sysctl -a | grep tcp_wmem |
tcp_rmem | # /sbin/sysctl -a | grep tcp_rmem |
修改核心引數
如果上述查詢的核心值小於最小值,按照下面的步驟進行修改:
使用任意的文字編輯器編輯/etc/sysctl.conf 檔案, 新增或編輯下列類似的行:
注:僅僅修改你需要調整的引數。對於訊號量引數 (kernel.sem), 你必須指定所有的四個值。 如果當前的值大於最小值,那麼使用或保留當前值。
fs.file-max = 512 * PROCESSES
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
or
kernel.sem = 250 256000 100 1024
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
net.ipv4.tcp_wmem = 262144 262144 262144
net.ipv4.tcp_rmem = 4194304 4194304 4194304
注:引數shmmax 最小值是 0.5 GB。然而 Oracle 建議設定該引數的值到2GB去最大化系統性能。
在/etc/sysctl.conf檔案裡指定的這些引數值,重新啟動系統後依然被保留。 然而在 SUSE Linux Enterprise Server 系統中,重新啟動系統前輸入下面的命令來確保系統啟動時讀到 /etc/sysctl.conf 檔案:
# /sbin/chkconfig boot.sysctl on
輸入下面的命令以使得當前修改的這些核心引數的值立即生效:
上面的這個命令同時可以看到剛剛設定的引數及值,如果不正確再次編輯該檔案並輸入正確的值。
可以通過命令/sbin/sysctl -a 顯示當前所有可用值.
在 SUSE 系統中,輸入下面的命令使得系統讀取/etc/sysctl.conf檔案當系統啟動的時候:
# /sbin/chkconfig boot.sysctl on
在 SUSE 系統中,你必須輸入oinstall 組的gid作為引數 /proc/sys/vm/hugetlb_shm_group的值. 主要是為oinstall組內的成員授予許可去建立共享記憶體段
如下面的示例,oinstall組id為501
# echo 501 > /proc/sys/vm/hugetlb_shm_group
執行上述命令後,使用vi新增下列文字到 /etc/sysctl.conf,以允許 boot.sysctl 隨作業系統啟動時執行:
vm.hugetlb_shm_group=501
注:僅僅一個組能夠被定義給vm.hugetlb_shm_group.
一旦在/etc/sysctl.conf 檔案更新引數後,要麼重新啟動計算機或者執行命令 sysctl -p 啟用 /etc/sysctl.conf 檔案的新值,並使之生效。
為Oracle 使用者設定shell限制
為提高oracle效能,必須為oracle使用者增加下列shell限制:
Shell Limit | Item in limits.conf | Hard Limit |
Maximum number of open file descriptors | nofile | 65536 |
Maximum number of processes available to a single user | nproc | 16384 |
增加shell 限制:
新增下列行到/etc/security/limits.conf 檔案:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
新增或編輯/etc/pam.d/login 檔案,當下面的條目不存在時:
session required pam_limits.so
取決於Oracle使用者預設的shell環境,為預設的shell啟動檔案作下列更改:
對於Bourne, Bash, or Korn shell, 新增下列行到/etc/profile 檔案 (SUSE Linux 則新增到/etc/profile.local):
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
更多參考