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