Oracle 數據庫kernel.shmmax 及kernel.sem設置

最近因爲拿到一個好配置的生產機器。在裝完數據庫後,需要對參數進行調優。
首先這個機器內存是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/<name>.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.

發佈了75 篇原創文章 · 獲贊 15 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章