oracle內核參數詳解


一、前言

       在生產中,我們安裝oracle數據庫時,為達到最優我們需要對操作系統的內核參數進行一定的調整。主要從內存、cpu、io以及網絡等方面,根據實際情況進行調整。以下參數可供大家參考,如有不當之處還望大家指出,一起研究學習。

二、參數調整建議

參數名稱                                                           含義                                                          建議值                        
kernel.shmmax  單個共享內存段的最大值 取內存大小減1,單位為byte
kernel.shmall 控制共享內存頁數 4294967296
kernel.shmmni   共享內存段的最大數量 4096
kernel.sem 信號集容納最大信號數量 所有信號的最大數量 調用單個信號集中最大信號數量 信號集的最大值 5010 641280 5010 128
fs.file-max  系統中所允許的文件句柄最大數目 512 乘以 processes
fs.aio-max-nr  限制並發未完成的請求 10485760
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  發送套接字緩沖區大小的最大值 1048576
vm.nr_hugepages   大頁,直接分配並保留對應大小的內存區域 sga/2M稍微大一點,可參考MOS:749851.1
vm.vfs_cache_pressure directory和inode cache保持在一個合理的百分比 200
vm.swappiness  內存使用率剩余多少時開始使用swap 10
vm.min_free_kbytes  最低保留多少內存 524288
vm.dirty_ratio 臟頁數量達到系統總內存的多大比例觸發pdflush/flush/kdmflush等后台回寫進程 5
vm.dirty_background_ratio 所有全局系統進程的臟頁數量達到系統總內存的多大比例觸發pdflush/flush/kdmflush等后台回寫進程 5
vm.dirty_writeback_centisecs 喚起去刷新臟數據的時間 100,單位1/100秒
vm.dirty_expire_centisecs  指定臟數據能存活的時間 100,單位1/100秒
vm.drop_caches  清空緩存機制 3
vm.overcommit_memory 內存申請分配機制 2
vm.overcommit_ratio 物理內存分配時的比例 90
kernel.panic 系統發生panic時內核重新引導之前的等待時間 10
kernel.panic_on_oops 當系統發生oops或BUG時,所采取的措施 1
kernel.sysrq 文件指定的值為非零,則激活鍵盤上的sysrq按鍵 1
net.ipv4.conf.bond1.rp_filter 開啟源地址校驗規則 2
net.ipv4.ipfrag_high_thresh  碎片整理時的最大內存 33554432
net.ipv4.ipfrag_low_thresh 碎片整理時的最小內存 31457280

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、參數詳解

# Controls the maximum shared segment size, in bytes

kernel.shmmax = 34359738368  

(定義單個共享內存段的最大值,設置應該足夠大,能在一個共享內存段下容納下整個的SGA,設置過低可能會導致需要創建多個共享內存段)

建議值:取內存大小減1

ipcs -sa查看共享內存段的個數

cat /etc/sysctl.conf | grep kernel.shmmax

 舉例:

sga_target=1G,

kernel.shmmax = 102400000

如下圖所示,共享內存段分成了10個,導致oracle性能有一定的下降。

 

# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 4294967296

(kernel.shmall 參數是控制共享內存頁數。該參數大小為物理內存除以pagesize;默認值已經是4294967296*4k/1024/1024/1024=16T足夠大了,一般不用改。)

[root@ceshi ~]# getconf PAGE_SIZE

4096

一個共享內存頁為4k

 

kernel.shmmni = 4096

(shmmni 內核參數是共享內存段的最大數量,缺省值 4096 ,一般肯定是夠用了)

kernel.sem = 5010 641280 5010 128

(信號集容納最大信號數量 所有信號的最大數量 調用單個信號集中最大信號數量 信號集的最大值)

fs.file-max = 6815744

(該參數決定了系統中所允許的文件句柄最大數目,文件句柄設置代表linux系統中可以打開的文件的數量,fs.file-max為512 乘以 processes)

fs.aio-max-nr = 10485760

(此參數限制並發未完成的請求,應該設置避免I/O子系統故障)

net.ipv4.ip_local_port_range = 9000 65500

(當前系統開放端口范圍,默認是32768到61000,對於繁忙的網絡服務器需要增加網絡端口范圍來增強它的處理能力)

[root@ceshi ~]# cat /proc/sys/net/ipv4/ip_local_port_range

32768      61000

net.core.rmem_default = 262144

(接收套接字緩沖區大小的默認值)

net.core.rmem_max = 4194304

(接收套接字緩沖區大小的最大值)

net.core.wmem_default = 262144

(發送套接字緩沖區大小的默認值)

net.core.wmem_max = 1048576

(發送套接字緩沖區大小的最大值)

vm.nr_hugepages = 16400

(在系統啟動時,直接分配並保留對應大小的內存區域,使用改參數時需要禁用AMM)

計算公式:sga/2M稍微大一點即可或者使用腳本計算,可參考MOS:749851.1

vm.vfs_cache_pressure=200

(缺省值100表示內核將根據pagecache和swapcache,把directory和inode cache保持在一個合理的百分比;該值低於100,將導致內核傾向於保留directory和inode cache;該值超過100,將導致內核傾向於回收directory和inode cache)

vm.swappiness=10

(表示內存使用率超過90%時開始出現有交換分區的使用)

vm.min_free_kbytes=524288

(最低保留多少內存,設置過高會觸發kswapd0進程消耗大量 CPU一般512M即可)

vm.dirty_ratio = 5

(單個進程的臟頁數量達到系統總內存的多大比例后,就會觸發pdflush/flush/kdmflush等后台回寫進程運行。)

vm.dirty_background_ratio=5

(所有全局系統進程的臟頁數量達到系統總內存的多大比例后,就會觸發pdflush/flush/kdmflush等后台回寫進程運行)

vm.dirty_writeback_centisecs=100

(單位:1/100秒;表示每1秒pdflush會被喚起去刷新臟數據,如果刷新臟數據的時間超過了這個時間,完成后將會sleep1秒)

vm.dirty_expire_centisecs=100

(單位:1/100秒;指定臟數據能存活的時間,超過該時間就會從內存中寫入磁盤)

vm.drop_caches=3

(1表示清空頁緩存;2表示清空inode和目錄樹緩存;3表示清空所有緩存)

注意:手動清理時需要執行sync命令將數據同步到磁盤

sync

echo 3 > /proc/sys/vm/drop_caches

vm.overcommit_memory=2

(0表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。1表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。2表示內核允許分配超過所有物理內存和交換空間總和的內存)

vm.overcommit_ratio=90

(當vm.overcommit_memory=2時生效,為物理內存分配時的比例)

結合以上兩個參數可以計算可以:

使用的內存大小為= SWAP內存大小 + 物理內存 * overcommit_ratio / 100

kernel.panic = 10

(單位秒,系統發生panic時內核重新引導之前的等待時間,0表示禁止重新引導)

kernel.panic_on_oops = 1

(當系統發生oops或BUG時,所采取的措施0:繼續運行;1:讓klog記錄oops的輸出,然后panic,若kernel.panic不為0,則等待后重新引導內核)

kernel.sysrq=1

(該文件指定的值為非零,則激活鍵盤上的sysrq按鍵。這個按鍵用於給內核傳遞信息,用於緊急情況下重啟系統。當遇到死機或者沒有響應的時候,甚至連 tty 都進不去,可以嘗試用 SysRq 重啟計算機。)

net.ipv4.conf.bond1.rp_filter = 2

(0:不開啟源地址校驗。1:開啟嚴格的反向路徑校驗。對每個進來的數據包,校驗其反向路徑是否是最佳路徑。如果反向路徑不是最佳路徑,則直接丟棄該數據包。2:開啟松散的反向路徑校驗。對每個進來的數據包,校驗其源地址是否可達,即反向路徑是否能通(通過任意網口),如果反向路徑不同,則直接丟棄該數據包)

net.ipv4.ipfrag_high_thresh = 33554432

(系統中當數據包傳輸發生錯誤,會進行碎片整理,有效的數據包被保留,而無效的數據包被丟棄,ipfrag參數指定了碎片整理時的最大內存。)

net.ipv4.ipfrag_low_thresh = 31457280

(系統中當數據包傳輸發生錯誤,會進行碎片整理,有效的數據包被保留,而無效的數據包被丟棄,ipfrag參數指定了碎片整理時的最小內存。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM