數(shù)據(jù)庫系統(tǒng)搭建硬件平臺選購指南
隨著服務(wù)器硬件的功能變得越來越強(qiáng)大,而價格一路急劇下跌,許多公司(尤其是小公司)發(fā)現(xiàn)如今購買數(shù)據(jù)庫服務(wù)器面臨眾多選擇。這意味著,經(jīng)驗相對欠缺的數(shù)據(jù)庫管理員們也被要求設(shè)計功能越來越強(qiáng)大的系統(tǒng)。你在為大型系統(tǒng)設(shè)計數(shù)據(jù)庫系統(tǒng)時,能夠買到有許多硬盤和充足內(nèi)存的大型數(shù)據(jù)庫服務(wù)器。以下是你在設(shè)計系統(tǒng)時應(yīng)當(dāng)遵守的一些基本原則。
·存儲系統(tǒng)
人們在設(shè)計磁盤陣列時最常犯下的錯誤就是,只計算所需的閑置容量。閑置容量只是設(shè)計存儲子系統(tǒng)時要考慮的一部分而已;另一個部分就是存儲系統(tǒng)需要支持的輸入/輸出操作次數(shù)。
應(yīng)當(dāng)遵守的一條基本原則就是,寫操作頻繁的數(shù)據(jù)庫***使用RAID10陣列,而讀操作頻繁的數(shù)據(jù)庫通常***使用RAID5陣列。原因在于,如果把數(shù)據(jù)寫到RAID5陣列,性能會受到影響。由于把數(shù)據(jù)寫到RAID5陣列上,存儲系統(tǒng)必須在寫數(shù)據(jù)之前計算出奇偶檢驗位,而算出奇偶檢驗位需要相當(dāng)長的時間,這意味著寫到RAID5陣列上的性能會降低。
由于這種性能影響,我們總是建議你應(yīng)當(dāng)把事務(wù)日志放到RAID10陣列上。事務(wù)日志是寫操作始終很頻繁的文件,不管數(shù)據(jù)庫是以讀操作為主的數(shù)據(jù)庫,還是以寫操作為主的數(shù)據(jù)庫。tempdb數(shù)據(jù)庫也應(yīng)當(dāng)放在RAID10陣列上,具體來說放在與事務(wù)日志文件所在陣列不同的另一個RAID10陣列上。
對每個磁盤陣列進(jìn)行分區(qū)時,應(yīng)當(dāng)確保分區(qū)正確對齊。默認(rèn)情況下,Windows2003及以下版本沒有正確對齊分區(qū),這會導(dǎo)致磁盤子系統(tǒng)的性能達(dá)不到最理想水平??梢酝ㄟ^使用diskpart.exe實用程序(Windows2000中的diskpar.exe)創(chuàng)建分區(qū)來解決這個問題。這樣創(chuàng)建的每個分區(qū)其對齊偏移量應(yīng)為64kb;在默認(rèn)情況下,創(chuàng)建的每個分區(qū)其對齊偏移量為32kb。Windows2008在默認(rèn)情況下創(chuàng)建的分區(qū)其對齊偏移量為128kb。
·物理數(shù)據(jù)庫構(gòu)建
微軟最近開始推薦使用的一項比較新的技術(shù)就是,針對兩個至四個CPU核心當(dāng)中的每個核心,數(shù)據(jù)庫應(yīng)當(dāng)有一個物理數(shù)據(jù)庫文件。應(yīng)當(dāng)為數(shù)據(jù)庫里面的每個文件組做到這一點。
如果你的服務(wù)器有兩個四核CPU,那么共有八個核心。我們假定數(shù)據(jù)庫有兩個文件組,一個名為Data,另一個名為Indexes。那么每個文件組都應(yīng)當(dāng)有兩個至四個物理文件。這項技術(shù)讓SQLServer可以對磁盤輸入/輸出進(jìn)行優(yōu)化??赡艿脑挘銘?yīng)當(dāng)盡量分散文件,以便位于每個存儲陣列上的文件盡可能少。
tempdb數(shù)據(jù)庫的配置應(yīng)有點不同。配置tempdb數(shù)據(jù)庫時,建議針對每個CPU核心,數(shù)據(jù)庫應(yīng)當(dāng)有一個物理文件。這樣系統(tǒng)就可以為tempdb數(shù)據(jù)庫盡量加快輸入/輸出操作。與用戶數(shù)據(jù)庫一樣,放在每個磁盤陣列上的文件也應(yīng)當(dāng)盡可能少。
你在數(shù)據(jù)庫里面應(yīng)當(dāng)始終至少有兩個文件組。***個文件組包括表,第二個組包括索引。你需要讓它們位于不同的文件組,那樣查詢索引時,裝入到表的操作不會受到影響,反之亦然。
·系統(tǒng)內(nèi)存
在過去,購買只安裝了數(shù)GB內(nèi)存的數(shù)據(jù)庫服務(wù)器相當(dāng)常見。那是因為內(nèi)存的價格還很昂貴。
如今,內(nèi)存價格相當(dāng)便宜;只要你能承受得了,應(yīng)當(dāng)購買盡量多的內(nèi)存。內(nèi)存越多,數(shù)據(jù)庫的運行速度幾乎總是越快。例外情況就是,如果你安裝的內(nèi)存超過了數(shù)據(jù)庫的大小。舉例來說,如果你有3GB大小的數(shù)據(jù)庫,但安裝了8GB內(nèi)存,那么為服務(wù)器添加更多內(nèi)存對提升數(shù)據(jù)庫的性能沒有幫助,因為SQLServer可能已經(jīng)能把整個數(shù)據(jù)庫裝入到內(nèi)存中。
在決定為SQLServer分配多大內(nèi)存時,絕對不要讓SQLServer把所有內(nèi)存都分配給它。因為Windows操作系統(tǒng)需要內(nèi)存來運行,安裝在數(shù)據(jù)庫服務(wù)器上的其他任何軟件同樣需要內(nèi)存來運行,比如備份軟件和反病毒軟件等。建議留出一兩GB內(nèi)存用于操作系統(tǒng)及所用的其他軟件。這個內(nèi)存量的大小取決于安裝了哪些軟件。
因為沒有兩個數(shù)據(jù)庫服務(wù)器是一樣的,所以沒有明確的原則規(guī)定你的硬件解決方案應(yīng)當(dāng)是什么樣子。你有眾多選擇;要設(shè)計一款將來可以使用多年的可靠的解決方案,關(guān)鍵在于明白自己的數(shù)據(jù)庫需求,明白自己使用的硬件,明白這些需求在哪些環(huán)節(jié)得到了滿足,以便既沒有購買對現(xiàn)在而言配置過低的硬件,也沒有購買對下一年而言配置過高的硬件。