在SAP應用環(huán)境下建議將以上參數設置為:


      vmo -p -o strict_maxclient=0


      vmo -p -o lru_file_repage=0


      vmo -p -o minperm%=3


      vmo -p -o maxclient%=8


      vmo -p -o maxperm%=8


      vmo -p -o minfree=[CPU數量]*120


      vmo -p -o maxfree=[CPU數量]*128


如果CPU數量是12,則minfree=1440, maxfree=1536


使用AIX 并行I/O (Concurrent I/O) 來提高數據庫的性能


內容提要: 
     
 AIX 5L v5.2.0.10( 或稱作AIX 5L v5.2 ML01) 在增強的日志文件系統(JFS2) 上引入了并行I/O (Concurrent I/O) 的新的功能。在許多應用環(huán)境下,這一新的功能可提高文件系統訪問的性能,尤其對于關系型數據庫的應用。在JFS2 的文件系統上采用并行I/O (Concurrent I/O) 技術后,可以得到與采用裸設備相似的性能。本文將對并行I/O (Concurrent I/O) 做一個簡要的介紹并給出在Oracle 9i 數據庫上進行性能比較的結果。


說明:



      1. 簡介


      文件系統長久以來一直是UNIX 存儲管理的核心,UNIX 的用戶通過系統命令和系統接口對存儲在文件系統上的數據進行操作和管理。文件系統的使用提供了對數據進行存儲的有效手段。


      如同使用其它方式一樣,文件系統的使用是對于性能與易用性平衡的結果。在應用和磁盤之間傳輸數據最快的方式是直接進行訪問,如使用裸設備。而使用文件系統來存數數據會產生很多額外開銷,如串行訪問,緩存和數據拷貝。這些都將對性能產生影響。使用裸設備進行數據的存儲雖然能減少這些額外開銷,但對用戶的技術水平要求較高,而且不同應用程序對裸設備的使用方式也不同,需要對用戶進行額外的培訓。但由于對裸設備進行訪問的高性能,傳統上來說,數據庫的應用程序更希望使用裸設備而不是文件系統。


       在JFS2 文件系統上采用并行I/O (Concurrent I/O) 技術后,數據庫用應用可以得到與采用裸設備相似的性能。


      2. 數據庫應用


      對于數據庫應用來說,之所以采用裸設備比采用文件系統具有更好的I/O 性能,主要是由于文件系統的一些特性:


       ▲文件緩存


       ▲文件寫保護鎖或inode 鎖


       ▲系統的sync 進程


       這些文件系統的特性可以幫助保護數據的一致性,提高容錯能力,事實上在許多情況下提高系統的性能。然而這些特性卻經常對于數據庫的應用的性能產生負面的影響。本文將解釋文件系統中這些特性的作用,并介紹在JFS2 上的新功能如何消除它們對性能的影響。


       2.1 文件緩存


       從最基本的層面來說,文件就是在介質上所存儲一些二進制位的集合,當一個進程需要從某個文件訪問數據的時候,操作系統將這些數據讀入內存,然后此進程可以對數據進行操作,最后將處理完的數據寫入磁盤。操作系統能夠從磁盤上直接讀出或寫入數據,但是由于磁盤較慢的訪問速度,這些操作的響應速度和吞吐率都較差。因此操作系統試圖通過文件緩存的技術,即在內存中緩存數據的方法,來減少對磁盤的訪問頻率。當進程需要從文件中讀取數據的時候,操作系統首先試圖從文件緩存中讀取所需要的數據,如果這些數據不在文件緩存中,那么從磁盤上文件系統的文件中讀取,同時將這些數據緩存在文件緩存中。如圖1 和圖2 所示:



圖1 讀操作- 數據在文件緩存中(命中)



圖2 讀操作- 數據不在文件緩存中(沒有命中)


      與讀數據相似,當寫數據時數據寫入文件緩存,因此將來需要再讀取這些數據時,不需要訪問磁盤,同時也降低了寫磁盤的頻率。當緩存的命中率高時,使用文件緩存將是非常有效的。并且可以采用預先讀取和延遲寫的技術來減少磁盤訪問的頻率。文件緩存所帶來的另一個好處是,以異步的方式進行寫操作,這使得應用可以繼續(xù)運行,而不用等待數據寫入磁盤操作的完成,如圖3 所示。


      雖然文件緩存提高了I/O 的性能,但是它消耗了大量的系統內存。AIX JFS2 文件系統允許系統管理員控制可以作為文件緩存的最大內存數。這種控制通過maxclient% 參數控制。系統管理員可以使用vmo 命令來調整maxclient% 參數。maxclient% 的卻省值是80 ,其含義是80%


的物理內存能夠作為文件緩存。maxclient% 參數的取值可在1 至100 之間變動。如可以采用以下命令設置最多50% 的系統物理內存能夠作為文件緩存:vmo ?Co maxclient%=50 。



圖3 寫操作


     與此相對應,裸設備不使用系統內存來緩存應用的數據,所以沒有以上圖示的操作。


     2.1.1 直接存?。―irect I/O )


      一些應用程序并不能從文件緩存中得到好處,如有些進行大量科學運算的程序,從不訪問以前訪問過的數據,而且由于他們對數據進行順序訪問,這使得文件緩存的命中率非常低。數據庫的應用通常在應用層上有自己的數據緩存技術,所以不需要操作系統進行文件緩存。在這種情況下,使用文件緩存會產生很多額外開銷,因為數據首先從磁盤被讀入系統的文件緩存,然后從文件緩存拷貝到應用的緩存中,這被稱為“重復拷貝”(double-copying ),重復拷貝增加了額外的CPU 開銷,并且相同的數據同時在文件緩存和應用的緩存中,增加了內存的消耗。


      JFS2 的直接存取(Direct I/O )技術可以使應用程序的數據被系統的文件緩存忽略。當使用Direct I/O 時,數據直接從磁盤讀取到應用程序的緩存中,而不是用系統的文件緩存。圖4 和圖5 說明了在Direct I/O 下的讀、寫操作。



圖4 Direct I/O 的讀操作



圖5 Direct I/O 的寫操作



      2.1.1.1 Direct I/O 的設置方法


      Direct I/O 可以通過兩種方式實現,一是通過在mount 文件系統時加 ?Co dio 的參數,即 mount ?Co dio /fs 。二是在調用open() 函數打開一個文件時加O_DIRECT 參數。當一個文件系統在mount 時使用了?Co dio 的參數,此文件系統的所有文件缺省都會使用Direct I/O ,你也可以通過namefs 使得Direct I/O 只對文件系統中某個子目錄中的文件起作用。例如:文件系統somefs 中有一些文件希望使用Direct I/O 功能,但是其它文件并不希望使用,你可以創(chuàng)建一個子目錄subsomefs ,將所有希望使用Direct I/O 功能的文件放入這個子目錄,在mount somefs 時不使用-o dio 參數,然后用mount ?Cv namefs ?Co dio /somefs/subsomefs /somefs 命令mount subsomefs 。


       Direct I/O 對應用程序I/O 的邊界(alignment )和塊大?。╨ength )有限制,表1 列出了JFS2 對此的要求,如果應用的I/O 不滿足此要求,所有的I/O 操作會按傳統的方式(文件緩存)的方式進行,但當數據被傳輸到應用的緩存后,系統緩存中的拷貝會被拋棄。當使用Direct I/O 時,文件系統的預讀功能將不會起作用。




表1 JFS 對Direct I/O 的限制

分享到

多易

相關推薦