1. 程式人生 > >oracle:swap效能調優

oracle:swap效能調優

目標:解決大量Log寫入佔用大量的File Cache,內容利用不充分導致swap


基本原則:儘量使用記憶體,減少swap,同時,儘早flush到外存,早點釋放記憶體給寫cache使用。---特別在持續的寫入操作中,此優化非常有效。


調優措施:


vm.swapiness :60 改成 10
vm.dirty_ratio:90 改成 10
vm.dirty_background_ratio:60 改成 5
vm.dirty_expire_centisecs:3000改成500
vm.vfs_cache_pressure:100 改成 500


下面重點解釋一下各個配置的含義:


一,vm.swappiness優化:


swappiness的值的大小對如何使用swap分割槽是有著很大的聯絡的。swappiness=0的時候表示最大限度使用實體記憶體,然後才是 swap空間,swappiness=100的時候表示積極的使用swap分割槽,並且把記憶體上的資料及時的搬運到swap空間裡面。linux的基本預設設定為60,具體如下:


cat /proc/sys/vm/swappiness
60


也就是說,你的記憶體在使用到100-60=40%的時候,就開始出現有交換分割槽的使用。大家知道,記憶體的速度會比磁碟快很多,這樣子會加大系統io,同時造的成大量頁的換進換出,嚴重影響系統的效能,所以我們在作業系統層面,要儘可能使用記憶體,對該引數進行調整。


臨時調整的方法如下,我們調成10:


sysctl vm.swappiness=10
vm.swappiness = 10
cat /proc/sys/vm/swappiness
10


這只是臨時調整的方法,重啟後會回到預設設定的


要想永久調整的話,需要將在/etc/sysctl.conf修改,加上:


cat /etc/sysctl.conf
vm.swappiness=10

 


二,vm.dirty_ratio: 同步刷髒頁,會阻塞應用程式


這個引數控制檔案系統的同步寫寫緩衝區的大小,單位是百分比,表示當寫緩衝使用到系統記憶體多少的時候(即指定了當檔案系統快取髒頁數量達到系統記憶體百分之多少時(如10%),),開始向磁碟寫出資料,即系統不得不開始處理快取髒頁(因為此時髒頁數量已經比較多,為了避免資料丟失需要將一定髒頁刷入外存),在此過程中很多應用程序可能會因為系統轉而處理檔案IO而阻塞。


增大之會使用更多系統記憶體用於磁碟寫緩衝,也可以極大提高系統的寫效能。但是,當你需要持續、恆定的寫入場合時,應該降低其數值,一般啟動上預設是 10。


 


三,vm.dirty_background_ratio:非同步刷髒頁,不會阻塞應用程式 


這個引數控制檔案系統的後臺程序,在何時重新整理磁碟。單位是百分比,表示系統記憶體的百分比,意思是當寫緩衝使用到系統記憶體多少的時候,就會觸發pdflush/flush/kdmflush等後臺回寫程序執行,將一定快取的髒頁非同步地刷入外存。增大之會使用更多系統記憶體用於磁碟寫緩衝,也可以極大提高系統的寫效能。但是,當你需要持續、恆定的寫入場合時,應該降低其數值,一般啟動上預設是 5。


注意:如果dirty_ratio設定比dirty_background_ratio大,可能認為dirty_ratio的觸發條件不可能達到,因為每次肯定會先達到vm.dirty_background_ratio的條件,然而,確實是先達到vm.dirty_background_ratio的條件然後觸發flush程序進行非同步的回寫操作,但是這一過程中應用程序仍然可以進行寫操作,如果多個應用程序寫入的量大於flush程序刷出的量那自然會達到vm.dirty_ratio這個引數所設定的坎,此時作業系統會轉入同步地處理髒頁的過程,阻塞應用程序。


 


四,vm.dirty_expire_centisecs:


   這個引數宣告Linux核心寫緩衝區裡面的資料多“舊”了之後,pdflush程序就開始考慮寫到磁碟中去。單位是 1/100秒。預設是 3000,也就是 30 秒的資料就算舊了,將會重新整理磁碟。對於特別過載的寫操作來說,這個值適當縮小也是好的,但也不能縮小太多,因為縮小太多也會導致IO提高太快。建議設定為 1500,也就是15秒算舊。當然,如果你的系統記憶體比較大,並且寫入模式是間歇式的,並且每次寫入的資料不大(比如幾十M),那麼這個值還是大些的好。


 


五,Vm.dirty_writeback_centisecs:


   這個引數控制核心的髒資料重新整理程序pdflush的執行間隔。單位是 1/100 秒。預設數值是500,也就是 5 秒。如果你的系統是持續地寫入動作,那麼實際上還是降低這個數值比較好,這樣可以把尖峰的寫操作削平成多次寫操作。設定方法如下:

 echo "200" > /proc/sys/vm/dirty_writeback_centisecs


如果你的系統是短期地尖峰式的寫操作,並且寫入資料不大(幾十M/次)且記憶體有比較多富裕,那麼應該增大此數值:


 


六,Vm.vfs_cache_pressure:


增大這個引數設定了虛擬記憶體回收directory和inode緩衝的傾向,這個值越大。越易回收


該檔案表示核心回收用於directory和inode cache記憶體的傾向;預設值100表示核心將根據pagecache和swapcache,把directory和inode cache保持在一個合理的百分比;降低該值低於100,將導致核心傾向於保留directory和inode cache;增加該值超過100,將導致核心傾向於回收directory和inode cache。


This variable controls the tendency of the kernel to reclaim thememory which is used for caching of VFS caches, versus pagecache and swap.Increasing this value increases the rate at which VFS caches are reclaimed.Itis difficult to know when this should be changed, other than byexperimentation. The slabtop command (part of the package procps) shows topmemory objects used by the kernel. The vfs caches are the "dentry"and the "*_inode_cache" objects. If these are consuming a largeamount of memory in relation to pagecache, it may be worth trying to increasepressure. Could also help to reduce swapping. The default value is 100.