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


      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數(shù)量]*120


      vmo -p -o maxfree=[CPU數(shù)量]*128


如果CPU數(shù)量是12,則minfree=1440, maxfree=1536


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


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


說明:



      1. 簡介


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


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


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


      2. 數(shù)據(jù)庫應用


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


       ▲文件緩存


       ▲文件寫保護鎖或inode 鎖


       ▲系統(tǒng)的sync 進程


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


       2.1 文件緩存


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



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



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


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


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


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



圖3 寫操作


     與此相對應,裸設備不使用系統(tǒng)內存來緩存應用的數(shù)據(jù),所以沒有以上圖示的操作。


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


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


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



圖4 Direct I/O 的讀操作



圖5 Direct I/O 的寫操作



      2.1.1.1 Direct I/O 的設置方法


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


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




表1 JFS 對Direct I/O 的限制

分享到

多易

相關推薦