決定應該賦予數(shù)據(jù)庫什么樣的存儲和配置,已經(jīng)成為一項雜亂無章的工作,這種現(xiàn)象我見得多了。數(shù)據(jù)庫工程師一般都是數(shù)據(jù)庫的專家,而對于存儲配置的低層細節(jié)幾乎一無所知。另外存儲管理員和工程師也往往不知道數(shù)據(jù)庫如何利用下層的存儲,以及數(shù)據(jù)庫、索引文件、記錄文件,當然還有文件系統(tǒng)和卷管理器的需求和最佳配置又是什么。
這往往造成了存儲資源利用率低,增加了整體成本,導致性能降低甚至可能無法滿足你的需求,此外預算也總是很緊張,而管理上又要求有效地利用可獲得的預算。本文將解決數(shù)據(jù)庫管理員和存儲工程師在解決架構問題而進行協(xié)作時的一些問題。
數(shù)據(jù)庫與存儲架構配置
組件
大部分數(shù)據(jù)庫的端到端存儲架構所需硬件和軟件如下:
數(shù)據(jù)庫
* 控制文件(Control file)
* 表空間(Table space)
* 索引文件(Index file)
* 重做日志(亦稱在線日志,Redo log)
操作系統(tǒng)
文件系統(tǒng)和卷管理器(如果數(shù)據(jù)庫運行在裸設備上,這一項可能沒有關系)
主機總線適配器(HBA)
存儲硬件
以上每一部分都擁有多個組件,具有多種特性和功能,對整體性能影響顯著。
數(shù)據(jù)庫
數(shù)據(jù)庫應用本身具有多重特性和功能,必須加以考慮。Oracle的組件如下:
控制文件—-記錄數(shù)據(jù)庫的物理結構,用于激活數(shù)據(jù)庫
表空間—-來自數(shù)據(jù)庫各行各列的實際數(shù)據(jù)
索引文件/空間—-Oracle中并不需要索引,不過大型數(shù)據(jù)庫總會用到索引,因為在數(shù)據(jù)庫中進行查找時,索引可以大幅提升查找速度
重做日志—-被激活的數(shù)據(jù)庫請求,允許你在數(shù)據(jù)庫崩潰后進行重建并重新啟動(這些日志本質上類似于文件系統(tǒng)日志)
因為上述組件都有不同類型的訪問模式,所以每種文件類型均被存儲在不同的文件系統(tǒng)中,并有調節(jié)選項。其它數(shù)據(jù)庫也擁有相似的文件類型,需要以相似的方式考慮。
控制文件
大部分數(shù)據(jù)庫都建議使用多個控制文件以確??煽啃???刂莆募⒉恍枰懗Wx,不過你必須確定各文件被放置在不同的RAID集上,適用于不同的RAID控制器。
表空間
表空間一般是數(shù)據(jù)庫中量最大的數(shù)據(jù)。當讀取列上的大表時,表空間可以由更大的I/O請求訪問。根據(jù)大小和更新頻率的不同,表空間常常位于更大的數(shù)據(jù)條帶化RAID-5上,以便獲得較RAID-1更高的密度和提升的性能。
索引文件/空間
在許多數(shù)據(jù)庫中,索引文件是被訪問頻率最高的數(shù)據(jù)。查找索引文件有可能需要很大的IOPS(每秒I/O操作)。另外,有時候數(shù)據(jù)庫被重新索引,這在計算上非常密集,并且需要大量的I/O帶寬。因為數(shù)據(jù)庫和所需的查找類型不同,索引空間也許會很大,一般來說,根據(jù)傳統(tǒng)的UNIX文件尺寸,索引文件的大小為2 GB。
重做日志
重做日志文件中存放了各種記錄,你可以撤銷對數(shù)據(jù)庫的各種操作,這些被稱為重做記錄。重做記錄用于循環(huán)緩沖器中,因為它一般是小I/O,所以用RAID-1就不錯。由于需要兩個或以上的重做日志文件,通常將日志文件放在不同的RAID-1卷上。
操作系統(tǒng)
數(shù)據(jù)庫一般都需要具備操作系統(tǒng)的一些特性和功能,如共享內存和標志等。另外,數(shù)據(jù)庫也經(jīng)常利用計算機內大量的內存,這通常由改變數(shù)據(jù)庫中的可調參數(shù)來實現(xiàn)。
在許多操作系統(tǒng)中,I/O請求的大小限制在256 KB或128 KB,不能改變,所以如果必須對存儲和操作系統(tǒng)完成更多的請求,就會影響到I/O性能。
文件系統(tǒng)和卷管理器
架構決策中最重要的事情之一就是為每個數(shù)據(jù)庫組件確定最理想的卷管理器和文件系統(tǒng)設置,對于每種類型的I/O,你可能希望進行不同的設置,請考慮以下的I/O類型:
長和短的連續(xù)塊
長和短的隨機塊
長和短的多重數(shù)據(jù)流塊
所有的讀
所有的寫
多線程
對所有這些類型的I/O來說,只有一組設置的文件系統(tǒng)表現(xiàn)得都不好,而且我敢說對于上述任何兩種類型的I/O來說,只有一組可調參數(shù)的文件系統(tǒng)也無法做好,也不可能通過改變參數(shù)來提升性能。
設計中要確定的兩個關鍵因素是:
1.對于所要處理的I/O類型,什么是最好的卷管理器和文件系統(tǒng)
2.對于該文件系統(tǒng)和卷管理器,什么又是最好的可調參數(shù)
幾年前我曾做過一個數(shù)據(jù)庫,由于一些原因而無法進行擴展,不過我認為其中最主要的原因是RAID緩存在進行索引查找時未得到有效利用。RAID的讀訪問率小于20%,而且我認為大部分是不規(guī)則的連續(xù)讀(先對幾個請求連續(xù)讀,然后隨機跳過幾個,又開始連續(xù)讀)。
檢查卷管理器后,我發(fā)現(xiàn)了問題所在。每個文件系統(tǒng)有32個LUN(邏輯單元號),每個LUN為8 GB。文件系統(tǒng)上的數(shù)據(jù)條設置為32 KB,與RAID分配相符。每個索引文件是2 GB。
考慮到RAID緩存的工作方式,你必須先讀兩個連續(xù)塊再讀第三個塊,這是常用的算法,因此在下一個I/O到達緩存之前,需要32 KB*32 LUN*2,即2 MB的連續(xù)讀數(shù)據(jù)。
RAID緩存利用率如此低下并不奇怪。客戶被告知他們有兩個辦法提升性能,一是為卷管理器數(shù)據(jù)條分配2 GB,這樣每個索引文件均被連續(xù)分配;二是使用另一種文件系統(tǒng),可以使數(shù)據(jù)進行循環(huán)而不是條帶化。循環(huán)狀態(tài)下,每個開放的系統(tǒng)請求都會被分配給另一個LUN,并且被打開的文件中所有數(shù)據(jù)也都會被分配在那個LUN上。
當我們使用循環(huán)分配方法和讀緩存測試這種配置時,訪問率從20%上升到80%,性能也超過了當時客戶的要求。
主機總線適配器(HBA)
即使價值2,000美元的HBA也會對大型數(shù)據(jù)庫的性能造成重大影響。對HBA要考慮兩個地方:
1.未處理的I/O請求量
2.可以實現(xiàn)的最大請求量
大多數(shù)HBA在驅動器軟件中將未處理的請求量默認值設置為16,這就限制了發(fā)送給RAID設備的命令數(shù),即使擁有很多的磁盤驅動器和隨機I/O,這個數(shù)值也可能無法充分利用存儲資源。
許多操作系統(tǒng)和設備驅動器都限制了I/O請求的大小,使之小于從表空間讀或向表空間寫所需的請求量。應該將設備驅動器內所設的限制更改為允許更大的請求量。當然,對每個設備驅動器和操作系統(tǒng)要做不同的設置,而且有意思的是,這些設置常常改變。
存儲硬件
存儲硬件很可能是為數(shù)據(jù)庫構建系統(tǒng)時最重要的部分之一。你也許希望擁有許多不同的LUN,以便用于數(shù)據(jù)庫中將發(fā)生的各種類型的I/O。舉例來說,一般情況下你希望:
重做日志文件擁有高帶寬需求(64 KB),發(fā)送到重做日志的I/O大部分是寫
索引查找擁有高帶寬小塊隨機I/O(8 KB),并且多數(shù)情況下對索引的I/O大部分是讀
表空間擁有大塊I/O(256 KB),并且一般情況下對表空間的I/O大部分是讀
正如你所看到的,一種大小是無法滿足所有需求的,因此你必須完成以下幾組匹配工作:
1.RAID級別與典型的讀/寫訪問類型
2.數(shù)據(jù)條寬度與請求大小
3.帶寬需求與RAID級別和請求大小
4.緩存策略與所處理的I/O類型
這些似乎都不太容易,不過如果你從最基本的問題著手,解決起來也不難。
重做日志
根據(jù)重做日志的大小和帶寬量,你可能最初會認為需要RAID-5數(shù)據(jù)條。這其實要看情況而定,因為大多數(shù)10K RPM磁盤的數(shù)據(jù)傳送速度為外磁道柱面每秒69 MB,內磁道柱面每秒39 MB,15K RPM的磁盤則更快。另外再加上RAID緩存的大小,你就無須使用RAID-5了。真正的決定因素在于:
1.帶寬需求—-每秒多少MB的日志數(shù)據(jù)
2.日志的大小—-能夠適應緩存嗎?
3.你的RAID速度
你必須收集到上述三項重要信息,用各種不同的數(shù)據(jù)庫和系統(tǒng)工具查看系統(tǒng),確定重做日志的表現(xiàn)是否會限制數(shù)據(jù)庫的性能和擴展,而如果是,那么重做日志的I/O需求又是什么。
索引文件
索引文件的結構相當簡單。如果你需要速度快一些,就使用數(shù)據(jù)條帶化值很小的RAID-1加上一塊高性能15K磁盤。因為索引文件是小塊讀文件,并且常常是隨機I/O,所以這是目前最快的方式。
表空間
根據(jù)表的大小及其被訪問和查找的方式,RAID-1有時是更好的方法,不過其它時候RAID-5就是最佳選擇了。關鍵是決定表空間的I/O請求大小是多少,請求的大小常常取決于數(shù)據(jù)庫中的可調參數(shù)。
結論
關于不同操作系統(tǒng)上的各種可調數(shù)據(jù)庫有許多書籍和文獻供參考,下面是我讀過覺得有用的幾本:
《在Solaris平臺上配置和調節(jié)數(shù)據(jù)庫(Configuring and Tuning Databases on the Solaris Platform)》,作者:Allan N. Packer,Sun微系統(tǒng)公司出版社,出版商:Prentice Hall(2001年12月5日),ISBN:0130834173。
《Oacle9i性能調節(jié)方法和技巧(erformance Tuning Tips & Techniques)》,作者:Richard J. Niemiec,出版商:McGraw-Hill Osborne Media(2003年5月12日),ISBN:0072224738。
《創(chuàng)建一個自調節(jié)Oracle數(shù)據(jù)庫:自動化Oracle9i動態(tài)SGA性能[Oracle焦點系列](Creating a Self-Tuning Oracle Database: Automating Oracle9i Dynamic SGA Performance [Oracle In-Focus series])》,作者:Donald K. Burleson,出版商:Rampant TechPress(2003年8月1日),ISBN:0972751327。
數(shù)據(jù)庫的構建正如其它應用一樣,你需要確定數(shù)據(jù)庫對文件系統(tǒng)/卷管理器、HBA和RAID的I/O模式,同時牢記性能需求和成本問題。由于數(shù)據(jù)庫很復雜,調節(jié)起來有些難度,不過現(xiàn)在有很多工具供你查看數(shù)據(jù),幫助你理解潛在的I/O問題。