oracle讀書筆記--在linux系統上裝oracle為什麼要修改作業系統的核心參數____小程式

來源:互聯網
上載者:User

我們一般在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 ,設定的過低可能會

導致需要建立多個共用記憶體段,這樣可能導致系統效能的下降。

http://www.itpub.net/showthread.php?threadid=551229&pagenumber

    論壇上的一些說法: 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

http://www.itpub.net/551203,1.html

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.