1. 程式人生 > >Linux 下 Oracle 核心引數優化

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
usually page_size=4

/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

更多參考