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

來源:互聯網
上載者:User

我們一般在Linux 上安裝設定Oracle 資料庫或者在更換或升級硬體的時候都需要配置Linux 系統的核心參數, 然後才是調整Oracle 系統參數 。

kernel.shmall為實體記憶體除以pagesize;
kernel.shmmax為實體記憶體的一半;
fs.file-max為512 乘以 processes (如128個process則為 65536);
net.ipv4.ip_local_port_range/net.core.rmem_default/net.core.rmem_max三個參數設定和官方文檔不一樣, 這是根據metalink 343431.1 最新要求更改的;
net.ipv4.tcp_rmem/net.ipv4.tcp_wmem兩個參數一般情況下無需設定, 除非是在Dataguard/Streams等需很多網路傳輸情況下;
其它參數根據官方文檔要求設定即可.

查看os系統頁的大小
#getconf PAGESIZE
4096

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

# vi /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536

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

修改以後讓參數生效:
# /sbin/sysctl -p

2. Linux 下核心參數調整

kernel.shmmax ----

SHMMAX Available physical memory Defines the maximum allowable size of one shared memory segment. The SHMMAX setting should be large enough to hold the entire SGA in one shared memory segment. A low setting can cause creation of multiple shared memory segments which may lead to performance 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 即可。
(僅供參考)

http://download-west.oracle.com/docs/html/A96167_01/pre.htm#CHDHDABJ

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 各組件大小的關係
設定的 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 的大小。Oracle10g 下, SGA_MAX_SIZE 仍然表示SGA 的大小的上限值,而SGA_TARGET 是SGA 的所有組件的大小的最大值之和,即當SGA_TARGET< SGA_MAX_SIZE 的時候,oracle就會忽略SGA_MAX_SIZE 的值,SGA_TARGET 也就成了SGA 的在此執行個體中的上限制,它能動態改變大小,但是不能夠大於SGA_MAX_SIZE 的值。

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

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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.