歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux內核

Linux內核參數及Oracle相關參數調整

我們一般在Linux 上安裝設置Oracle 數據庫或者在更換或升級硬件的時候都需要配置Linux 系統的核心參數, 然後才是調整Oracle 系統參數 。具體這些 參數的實質意義是什麼,為什麼要做調整,如何合理調整? 帶著這些問題我們做以下的一些分析以及測試。

注意: 以下的一些測試可能只適用於Linux  系統,且測試Linux 系統為64Bit,32Bit Linux 系統可能有不一樣 。

測試環境: Linux AS 4.0 U5 64Bit

核心版本: 2.6.9-55.ELsmp #1 SMP x86_64

1. Linux 系統下的核心參數:

[root@ECSDB etc]# cat sysctl.conf 或者到 /proc/sys/kernel 下查看。

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

小技巧: 修改 /etc/sysctl.conf 文件之後立刻生效命令

# sysctl -p

2. Linux 下核心參數調整

kernel.shmmax ----SHMMAX Available physical memory Defines the maximum allowable sizeof one shared memory segment. The SHMMAX setting  should be large enoughto hold the entire SGA in one shared memory segment. A low setting cancause creation of multiple shared memory  segments which may lead toperformance degradation.

Shmmax 是核心參數中最重要的參數之一,用於定義單個共享內存段的最大值,

shmmax 設置應該足夠大,能在一個共享內存段下容納下整個的SGA ,設置的過低可能會

導致需要創建多個共享內存段,這樣可能導致系統性能的下降 。

論壇上的一些說法: SHMMAX 僅僅是在共享內存段被創建的時候用來比較的一個數字,當共享內存段被一個進程(Process)創建,操作系統檢查是否被 要求的共享內存段的值大於shmmax 的值 ,如果是,那麼將會拋出一個錯誤。這個時候系統會創建另外的一個或多個共享內存段滿足進程的需求 。一般來 說,共享內存段個數和系統性能沒有太直接的關系,也不會對性能產生太大的影響。

Steve Adams 在他的小冊子中說過,在實例啟動以及Server Process 創建的時候,多個小的共享內存段可能會導致當時輕微的系統性能的降低(在啟 動的時候 需要去創建多個虛擬地址段,在進程創建的時候要讓進程對多個段進行“識別”,會有一些影響),但是其他時候都不會有影響。這意味著如果 你的程序不是經常Create Processes(以及Destroy Them),性能方面就不是考慮的問題。

當然Oralce 的建議是希望一個大的共享內存段能容納整個SGA,這樣在任何時候都不會有甚至輕微的性能下降的隱患。Oracle 安裝文檔建議 32Bit  Linux 系統設置shmmax 為32Bit 最大的限制值(setting shmmax to the 32-bit number limit),也就是4G 。

所以一般來說,1-4G 的物理內存,可以直接設置shmmax 為最大物理內存即可,那麼SGA 肯定在一個共享內存段中,32Bit Linux 系統物理內存大 於4G 的設置為4G 即可 。

總之,一般設置shmmax >=SGA (32Bit 系統是否支持到1.7G 以上SGA 需要注意) 。如果是64Bit 的Linux 操作系統,shmmax 設置為大於SGA_MAX_SIZE 即可。

Ipcs  -sa 可以看到共享內存段個數

kernel.shmall ----kernel.shmall 參數是控制共享內存頁數 。Linux 共享內存頁大小為4KB, 共享內存段的大小都是共享內存頁大小的整數倍。一個共 享內存段的最大大小是16G,那麼需要共享內存頁數是16GB/4KB=16777216KB/4KB=4194304 (頁),也就是64Bit 系統下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 ,一般肯定是夠用了 。

3. Oracle 下需要做調整的參數

SGA_MAX_SIZE

SGA_TARGET

DB_CACHE_SIZE

SGA_MAX_SZIE 為實例允許使用的sga 上限,一個靜態參數,是不能動態修改的。

SGA_TARGET 為10g 推出的sga 自動管理的參數,動態參數,可以動態修改。

sga_max_size 與 SGA 各組件大小的關系

本文URL地址:http://www.bianceng.cn/OS/Linux/201410/45486.htm

設置的 sga_max_size 小於實際的SGA 中各個pool 的尺寸總和的大小,那麼sga_max_size 的值會被oracle 自動以實際的SGA 的總尺寸代替。如果不設置sga_max_size ,oracle 會自動的以實際的SGA 的總尺寸來設置sga_max_size 的值。

設置 sga_max_size 的值為大於SGA 中各個pool 的尺寸總和的值:但是sga_max_size 的值相對於所有可用的物理內存來說,是一個合理的值。sga_max_size的實際的值和pfile 中的sga_max_size 指定的值是一樣的。

在Oracle 10g 中引入了一個非常重要的參數:SGA_TARGET,這也是Oracle 10g的一個新特性。自動共享內存管理(Automatic Shared Memory Management ASMM),控制這一特性的,就僅僅是這個參數SGA_TARGE。設置這個參數後, 你就不需要為每個內存區來指定大小了。SGA_TARGET 指定了SGA 可以使用的最大內存大小,而SGA 中各個內存的大小由Oracle 自行控制,不需要人為指 定。Oracle 可以隨時調節各個區域的大小,使之達到系統性能最佳狀態的個最合理大小,並且控制他們之和在SGA_TARGET 指定的值之內。一旦給 SGA_TARGET 指定值後(默認為0,即沒有啟動ASMM),就自動啟動了ASMM特性。

10g 下設置 SGA_TARGET 之後啟動ASSM 特性之後, 只有以下的這些區的內存大小動態共享起來:

* Buffer cache (DB_CACHE_SIZE)

* Shared pool (SHARED_POOL_SIZE)

* Large pool (LARGE_POOL_SIZE)

* Java pool (JAVA_POOL_SIZE)

* Streams pool (STREAMS_POOL_SIZE)

而SGA 中的其他區域的內存大小仍然是固定不共享的。

它的含義和SGA_MAX_SIZE 的一樣,也表示SGA 最大的大小,於是它也就有了一個限制,那就是它的大小不能大於SGA_MAX_SIZE 的大小。

本文URL地址:http://www.bianceng.cn/OS/Linux/201410/45486.htm

Oracle10g 下, SGA_MAX_SIZE 仍然表示SGA 的大小的上限值,而SGA_TARGET 是SGA 的所有組件的大小的最大值之和,即當SGA_TARGET< SGA_MAX_SIZE  的時候,oracle就會忽略SGA_MAX_SIZE 的值,SGA_TARGET 也就成了SGA 的在此實例中的上限制,它能動態改變大小,但是不能夠大於SGA_MAX_SIZE 的值 。

有人曾經做過試驗,在某些版本中(可能在我的版本之後的版本),當SGA_TARGET< SGA_MAX_SIZE 時,實例重啟以後SGA_MAX_SIZE 就變成SGA_TARGET 的大小了。

在11g 中,這個SGA_TARGET 只能設置是等於SGA_MAX_SIZE 的大小了,設置比它小,oracle 會自動幫你調整,設置比它大,那還是出錯。現在可以自己想 想,oracle對SGA_TARGET 的大小處理在往正確的簡單的方向前進中。

SGA_TARGET 帶來一個重要的好處就是,能使SGA 的利用率達到最佳,從而節省內存成本。因為ASMM 啟動後,Oracle 會自動根據需要調整各個區域的大小 ,大大減少了某些區域內存緊張,而某些區域又有內存空閒的矛盾情況出現。

Copyright © Linux教程網 All Rights Reserved