在SAP應(yīng)用環(huán)境下建議將以上參數(shù)設(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ù)庫的性能


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


說明:



      1. 簡介


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


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


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


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


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


       ▲文件緩存


       ▲文件寫保護鎖或inode 鎖


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


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


       2.1 文件緩存


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



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



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


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


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


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



圖3 寫操作


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


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


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


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



圖4 Direct I/O 的讀操作



圖5 Direct I/O 的寫操作



      2.1.1.1 Direct I/O 的設(shè)置方法


      Direct I/O 可以通過兩種方式實現(xiàn),一是通過在mount 文件系統(tǒng)時加 ?Co dio 的參數(shù),即 mount ?Co dio /fs 。二是在調(diào)用open() 函數(shù)打開一個文件時加O_DIRECT 參數(shù)。當(dāng)一個文件系統(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 對應(yīng)用程序I/O 的邊界(alignment )和塊大?。╨ength )有限制,表1 列出了JFS2 對此的要求,如果應(yīng)用的I/O 不滿足此要求,所有的I/O 操作會按傳統(tǒng)的方式(文件緩存)的方式進行,但當(dāng)數(shù)據(jù)被傳輸?shù)綉?yīng)用的緩存后,系統(tǒng)緩存中的拷貝會被拋棄。當(dāng)使用Direct I/O 時,文件系統(tǒng)的預(yù)讀功能將不會起作用。




表1 JFS 對Direct I/O 的限制

分享到

多易

相關(guān)推薦